From b8d43b293b285e7af500ef4decf2ea9eee6c0b8c Mon Sep 17 00:00:00 2001 From: ZhongFuze Date: Thu, 21 Mar 2024 00:46:09 +0800 Subject: [PATCH 1/6] [#] #122 debuging... --- Cargo.lock | 1729 +++++--- Cargo.toml | 4 +- justfile | 2 +- src/bin/standalone.rs | 2 +- src/controller/tigergraphql/identity.rs | 1 + src/upstream/lensv2/mod.rs | 155 + src/upstream/lensv2/schema.graphql | 5173 +++++++++++++++++++++++ src/upstream/lensv2/tests.rs | 27 + src/upstream/mod.rs | 7 +- 9 files changed, 6435 insertions(+), 665 deletions(-) create mode 100644 src/upstream/lensv2/mod.rs create mode 100644 src/upstream/lensv2/schema.graphql create mode 100644 src/upstream/lensv2/tests.rs diff --git a/Cargo.lock b/Cargo.lock index b1713536..d1da5e8e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -12,6 +12,21 @@ dependencies = [ "regex", ] +[[package]] +name = "addr2line" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" + [[package]] name = "aead" version = "0.3.2" @@ -68,24 +83,30 @@ dependencies = [ [[package]] name = "ahash" -version = "0.7.6" +version = "0.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.12", "once_cell", "version_check", ] [[package]] name = "aho-corasick" -version = "1.0.1" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67fc08ce920c31afb70f013dcce1bfc3a3195de6a228474e45e1f145b36f8d04" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" dependencies = [ "memchr", ] +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -103,9 +124,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.71" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c7d0618f0e0b7e8ff11427422b64564d5fb0be1940354bfe2e0529b18a9d9b8" +checksum = "0952808a6c2afd1aa8947271f3a60f1a6763c7b912d210184c5149b5cf147247" [[package]] name = "array_tool" @@ -127,66 +148,79 @@ checksum = "71938f30533e4d95a6d17aa530939da3842c2ab6f4f84b9dae68447e4129f74a" [[package]] name = "async-channel" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf46fee83e5ccffc220104713af3292ff9bc7c64c7de289f66dae8e38d826833" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" dependencies = [ "concurrent-queue", - "event-listener", + "event-listener 2.5.3", "futures-core", ] +[[package]] +name = "async-channel" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28243a43d821d11341ab73c80bed182dc015c514b951616cf79bd4af39af0c3" +dependencies = [ + "concurrent-queue", + "event-listener 5.2.0", + "event-listener-strategy 0.5.0", + "futures-core", + "pin-project-lite", +] + [[package]] name = "async-executor" -version = "1.5.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6fa3dc5f2a8564f07759c008b9109dc0d39de92a88d5588b8a5036d286383afb" +checksum = "17ae5ebefcc48e7452b4987947920dac9450be1110cadf34d1b8c116bdbaf97c" dependencies = [ - "async-lock", + "async-lock 3.3.0", "async-task", "concurrent-queue", - "fastrand", - "futures-lite", + "fastrand 2.0.1", + "futures-lite 2.3.0", "slab", ] [[package]] name = "async-global-executor" -version = "2.3.1" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1b6f5d7df27bd294849f8eec66ecfc63d11814df7a4f5d74168a2394467b776" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" dependencies = [ - "async-channel", + "async-channel 2.2.0", "async-executor", - "async-io", - "async-lock", + "async-io 2.3.2", + "async-lock 3.3.0", "blocking", - "futures-lite", + "futures-lite 2.3.0", "once_cell", ] [[package]] name = "async-graphql" -version = "5.0.9" +version = "5.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "364423936c4b828ac1615ce325e528c5afbe6e6995d799ee5683c7d36720dfa4" +checksum = "b35ef8f9be23ee30fe1eb1cf175c689bc33517c6c6d0fd0669dade611e5ced7f" dependencies = [ - "async-graphql-derive", - "async-graphql-parser", - "async-graphql-value", + "async-graphql-derive 5.0.10", + "async-graphql-parser 5.0.10", + "async-graphql-value 5.0.10", "async-stream", "async-trait", "base64 0.13.1", - "bytes 1.4.0", + "bytes 1.5.0", "chrono", "fast_chemail", "fnv", "futures-util", "handlebars", - "http", - "indexmap", + "http 0.2.12", + "indexmap 1.9.3", "mime", - "multer", + "multer 2.1.0", "num-traits", "once_cell", "pin-project-lite", @@ -200,14 +234,44 @@ dependencies = [ "uuid", ] +[[package]] +name = "async-graphql" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261fa27d5bff5afdf7beff291b3bc73f99d1529804c70e51b0fbc51e70b1c6a9" +dependencies = [ + "async-graphql-derive 7.0.3", + "async-graphql-parser 7.0.3", + "async-graphql-value 7.0.3", + "async-stream", + "async-trait", + "base64 0.21.7", + "bytes 1.5.0", + "fnv", + "futures-util", + "http 1.1.0", + "indexmap 2.2.5", + "mime", + "multer 3.0.0", + "num-traits", + "once_cell", + "pin-project-lite", + "regex", + "serde", + "serde_json", + "serde_urlencoded", + "static_assertions_next", + "thiserror", +] + [[package]] name = "async-graphql-derive" -version = "5.0.9" +version = "5.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23a06320343bbe0a1f2e29ec6d1ed34e0460f10e6827b3154a78e4ccc039dbc4" +checksum = "1a0f6ceed3640b4825424da70a5107e79d48d9b2bc6318dfc666b2fc4777f8c4" dependencies = [ "Inflector", - "async-graphql-parser", + "async-graphql-parser 5.0.10", "darling 0.14.4", "proc-macro-crate", "proc-macro2", @@ -216,13 +280,42 @@ dependencies = [ "thiserror", ] +[[package]] +name = "async-graphql-derive" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3188809947798ea6db736715a60cf645ba3b87ea031c710130e1476b48e45967" +dependencies = [ + "Inflector", + "async-graphql-parser 7.0.3", + "darling 0.20.8", + "proc-macro-crate", + "proc-macro2", + "quote", + "strum", + "syn 2.0.53", + "thiserror", +] + +[[package]] +name = "async-graphql-parser" +version = "5.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc308cd3bc611ee86c9cf19182d2b5ee583da40761970e41207f088be3db18f" +dependencies = [ + "async-graphql-value 5.0.10", + "pest", + "serde", + "serde_json", +] + [[package]] name = "async-graphql-parser" -version = "5.0.9" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46ce3b4b57e2a4630ea5e69eeb02fb5ee3c5f48754fcf7fd6a7bf3b4f96538f0" +checksum = "d4e65a0b83027f35b2a5d9728a098bc66ac394caa8191d2c65ed9eb2985cf3d8" dependencies = [ - "async-graphql-value", + "async-graphql-value 7.0.3", "pest", "serde", "serde_json", @@ -230,24 +323,37 @@ dependencies = [ [[package]] name = "async-graphql-value" -version = "5.0.9" +version = "5.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "637c6b5a755133d47c9829df04b7a5e2f1856fe4c1101f581650c93198eba103" +checksum = "d461325bfb04058070712296601dfe5e5bd6cdff84780a0a8c569ffb15c87eb3" dependencies = [ - "bytes 1.4.0", - "indexmap", + "bytes 1.5.0", + "indexmap 1.9.3", + "serde", + "serde_json", +] + +[[package]] +name = "async-graphql-value" +version = "7.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68e40849c29a39012d38bff87bfed431f1ed6c53fbec493294c1045d61a7ae75" +dependencies = [ + "bytes 1.5.0", + "indexmap 2.2.5", "serde", "serde_json", ] [[package]] name = "async-graphql-warp" -version = "5.0.9" +version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fae3d1991cb75a984eb6787b84dd7ebb362a696d4239bb59abbc5a015a01724c" +checksum = "e901ea60bac5613a1c824da04c8e72906cf79efde5c56f657e3a4ac89624b0a5" dependencies = [ - "async-graphql", + "async-graphql 7.0.3", "futures-util", + "http 0.2.12", "serde_json", "warp", ] @@ -258,38 +364,68 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0fc5b45d93ef0529756f812ca52e44c221b35341892d3dcc34132ac02f3dd2af" dependencies = [ - "async-lock", + "async-lock 2.8.0", "autocfg", "cfg-if", "concurrent-queue", - "futures-lite", + "futures-lite 1.13.0", "log", "parking", - "polling", - "rustix", + "polling 2.8.0", + "rustix 0.37.27", "slab", - "socket2", + "socket2 0.4.10", "waker-fn", ] +[[package]] +name = "async-io" +version = "2.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dcccb0f599cfa2f8ace422d3555572f47424da5648a4382a9dd0310ff8210884" +dependencies = [ + "async-lock 3.3.0", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite 2.3.0", + "parking", + "polling 3.5.0", + "rustix 0.38.32", + "slab", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "async-lock" -version = "2.7.0" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "287272293e9d8c41773cec55e365490fe034813a2f172f502d6ddcf75b2f582b" +dependencies = [ + "event-listener 2.5.3", +] + +[[package]] +name = "async-lock" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa24f727524730b077666307f2734b4a1a1c57acb79193127dcc8914d5242dd7" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ - "event-listener", + "event-listener 4.0.3", + "event-listener-strategy 0.4.0", + "pin-project-lite", ] [[package]] name = "async-recursion" -version = "1.0.4" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e97ce7de6cf12de5d7226c73f5ba9811622f4db3a5b91b55c53e987e5f91cba" +checksum = "30c5ef0ede93efbf733c1a727f3b6b5a1060bbedd5600183e66f6e4be4af0ec5" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -298,15 +434,15 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62565bb4402e926b29953c785397c6dc0391b7b446e45008b0049eb43cec6f5d" dependencies = [ - "async-channel", + "async-channel 1.9.0", "async-global-executor", - "async-io", - "async-lock", + "async-io 1.13.0", + "async-lock 2.8.0", "crossbeam-utils", "futures-channel", "futures-core", "futures-io", - "futures-lite", + "futures-lite 1.13.0", "gloo-timers", "kv-log-macro", "log", @@ -337,24 +473,24 @@ checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "async-task" -version = "4.4.0" +version = "4.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc7ab41815b3c653ccd2978ec3255c81349336702dfdf62ee6f7069b12a3aae" +checksum = "fbb36e985947064623dbd357f727af08ffd077f93d696782f3c56365fa2e2799" [[package]] name = "async-trait" -version = "0.1.68" +version = "0.1.78" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ccdd8f2a161be9bd5c023df56f1b2a0bd1d83872ae53b71a84a12c9bf6e842" +checksum = "461abc97219de0eaaf81fe3ef974a540158f3d079c2ab200f891f1a2ef201e85" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -365,9 +501,9 @@ checksum = "c59bdb34bc650a32731b31bd8f0829cc15d24a708ee31559e0bb34f2bc320cba" [[package]] name = "atomic-waker" -version = "1.1.1" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1181e1e0d1fce796a03db1ae795d67167da795f9cf4a39c37589e85ef57f26d3" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" @@ -377,22 +513,35 @@ checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" [[package]] name = "aws_lambda_events" -version = "0.7.3" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d376097ccf49a2699d554558267b2735f62ce94ee1840a9f73253ad7c26fbaa7" +checksum = "03611508dd1e514e311caec235b581c99a4cb66fa1771bd502819eed69894f12" dependencies = [ - "base64 0.13.1", - "bytes 1.4.0", - "chrono", - "http", + "base64 0.21.7", + "bytes 1.5.0", + "http 0.2.12", "http-body", "http-serde", "query_map", "serde", - "serde_derive", "serde_json", ] +[[package]] +name = "backtrace" +version = "0.3.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837" +dependencies = [ + "addr2line", + "cc", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", +] + [[package]] name = "base-x" version = "0.2.11" @@ -407,9 +556,15 @@ checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" [[package]] name = "base64" -version = "0.21.2" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5" + +[[package]] +name = "base64" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "604178f6c5c21f02dc555784810edfb88d34ac2c73b2eae109655649ee73ce3d" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "bitflags" @@ -417,6 +572,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf4b9d6a944f767f8e5e0db018570623c85f3d925ac718db4e06d0187adb21c1" + [[package]] name = "block-buffer" version = "0.9.0" @@ -437,30 +598,31 @@ dependencies = [ [[package]] name = "blocking" -version = "1.3.1" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77231a1c8f801696fc0123ec6150ce92cffb8e164a02afb9c8ddee0e9b65ad65" +checksum = "6a37913e8dc4ddcc604f0c6d3bf2887c995153af3611de9e23c352b44c1b9118" dependencies = [ - "async-channel", - "async-lock", + "async-channel 2.2.0", + "async-lock 3.3.0", "async-task", - "atomic-waker", - "fastrand", - "futures-lite", - "log", + "fastrand 2.0.1", + "futures-io", + "futures-lite 2.3.0", + "piper", + "tracing", ] [[package]] name = "bumpalo" -version = "3.13.0" +version = "3.15.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a3e2c3daef883ecc1b5d58c15adae93470a91d425f3532ba1695849656af3fc1" +checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa" [[package]] name = "byteorder" -version = "1.4.3" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" @@ -470,9 +632,9 @@ checksum = "0e4cec68f03f32e44924783795810fa50a7035d8c8ebe78580ad7e6c703fba38" [[package]] name = "bytes" -version = "1.4.0" +version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be" +checksum = "a2bd12c1caf447e69cd4528f47f94d203fd2582878ecb9e9465484c4148a8223" dependencies = [ "serde", ] @@ -485,9 +647,9 @@ checksum = "a2698f953def977c68f935bb0dfa959375ad4638570e969e2f1e9f433cbf1af6" [[package]] name = "cc" -version = "1.0.79" +version = "1.0.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f" +checksum = "8cd6604a82acf3039f1144f54b8eb34e91ffba622051189e71b781822d5ee1f5" [[package]] name = "cfg-if" @@ -497,18 +659,17 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "chrono" -version = "0.4.26" +version = "0.4.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec837a71355b28f6556dbd569b37b3f363091c0bd4b2e735674521b4c5fd9bc5" +checksum = "8eaf5903dcbc0a39312feb77df2ff4c76387d591b9fc7b04a238dcf8bb62639a" dependencies = [ "android-tzdata", "iana-time-zone", "js-sys", "num-traits", "serde", - "time 0.1.45", "wasm-bindgen", - "winapi", + "windows-targets 0.52.4", ] [[package]] @@ -535,18 +696,18 @@ dependencies = [ [[package]] name = "concurrent-queue" -version = "2.2.0" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62ec6771ecfa0762d24683ee5a32ad78487a3d3afdc0fb8cae19d2c5deb50b7c" +checksum = "d16048cd947b08fa32c24458a22f5dc5e835264f689f4f5653210c69fd107363" dependencies = [ "crossbeam-utils", ] [[package]] name = "config" -version = "0.13.3" +version = "0.13.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" +checksum = "23738e11972c7643e4ec947840fc463b6a571afcd3e735bdfce7d03c7a784aca" dependencies = [ "async-trait", "json5", @@ -563,14 +724,14 @@ dependencies = [ [[package]] name = "console" -version = "0.15.7" +version = "0.15.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c926e00cc70edefdc64d3a5ff31cc65bb97a3460097762bd23afb4d8145fccf8" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" dependencies = [ "encode_unicode", "lazy_static", "libc", - "windows-sys 0.45.0", + "windows-sys 0.52.0", ] [[package]] @@ -592,15 +753,15 @@ dependencies = [ "percent-encoding", "rand 0.8.5", "sha2 0.9.9", - "time 0.2.27", + "time", "version_check", ] [[package]] name = "core-foundation" -version = "0.9.3" +version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "194a7a9e6de53fa55116934067c844d9d749312f75c6f6d0980e8c252f8c2146" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" dependencies = [ "core-foundation-sys", "libc", @@ -608,15 +769,24 @@ dependencies = [ [[package]] name = "core-foundation-sys" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e496a50fda8aacccc86d7529e2c1e0892dbd0f898a6b5645b5561b89c3210efa" +checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" + +[[package]] +name = "counter" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d458e66999348f56fd3ffcfbb7f7951542075ca8359687c703de6500c1ddccd" +dependencies = [ + "num-traits", +] [[package]] name = "cpufeatures" -version = "0.2.7" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e4c1eaa2012c47becbbad2ab175484c2a84d1185b566fb2cc5b8707343dfe58" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] @@ -629,12 +799,9 @@ checksum = "dcb25d077389e53838a8158c8e99174c5a9d902dee4904320db714f3c653ffba" [[package]] name = "crossbeam-utils" -version = "0.8.15" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crypto-common" @@ -658,12 +825,12 @@ dependencies = [ [[package]] name = "ctor" -version = "0.2.1" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990a40740adf249724a6000c0fc4bd574712f50bb17c2d6f6cec837ae2f0ee75" +checksum = "ad291aa74992b9b7a7e88c38acbbf6ad7e107f1d90ee8775b7bc1fc3394f485c" dependencies = [ "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -677,24 +844,24 @@ dependencies = [ [[package]] name = "curl" -version = "0.4.44" +version = "0.4.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "509bd11746c7ac09ebd19f0b17782eae80aadee26237658a6b4808afb5c11a22" +checksum = "1e2161dd6eba090ff1594084e95fd67aeccf04382ffea77999ea94ed42ec67b6" dependencies = [ "curl-sys", "libc", "openssl-probe", "openssl-sys", "schannel", - "socket2", - "winapi", + "socket2 0.5.6", + "windows-sys 0.52.0", ] [[package]] name = "curl-sys" -version = "0.4.62+curl-8.1.0" +version = "0.4.72+curl-8.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "274ef7ef7c1113c7611af49ce248a700afa1171045a1aaa40137030773f993b8" +checksum = "29cbdc8314c447d11e8fd156dcdd031d9e02a7a976163e396b548c03153bc9ea" dependencies = [ "cc", "libc", @@ -703,74 +870,79 @@ dependencies = [ "openssl-sys", "pkg-config", "vcpkg", - "winapi", + "windows-sys 0.52.0", ] [[package]] name = "cynic" -version = "1.0.0" +version = "3.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a086fdece2d6206e52894d978a09b09efca1e61ac59d69a934eab74d8d9ee40" +checksum = "7335114540697c7b1c1a0131cbe0e983fdb1e646f881234afe9e2a66133ac99a" dependencies = [ "cynic-proc-macros", - "json-decode", + "ref-cast", "serde", "serde_json", + "static_assertions", "surf", "thiserror", ] [[package]] name = "cynic-codegen" -version = "1.0.0" +version = "3.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd9f0852fe3d3637d4dccb4b69e5a8f881214fc38907a528385ff71cd7b15c3e" +checksum = "a11d6119f9f0f55c9d7cff5189a7b318f35a7d2d6faa4872441ee521f65420b6" dependencies = [ - "Inflector", - "darling 0.13.4", + "counter", + "darling 0.20.8", "graphql-parser", - "lazy_static", + "once_cell", + "ouroboros", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.53", + "thiserror", ] [[package]] name = "cynic-proc-macros" -version = "1.0.0" +version = "3.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cabdef46a6ff3c06e337a9c0c6b7d2f71aefae4ab582ed319a0d454ea1085f9" +checksum = "eb81a5872a7774daf11caefb2ebe7166d9da12b1b69cf35661130b3c3fccbd61" dependencies = [ "cynic-codegen", - "syn 1.0.109", + "darling 0.20.8", + "quote", + "syn 2.0.53", ] [[package]] name = "darling" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a01d95850c592940db9b8194bc39f4bc0e89dee5c4265e4b1807c34a9aba453c" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" dependencies = [ - "darling_core 0.13.4", - "darling_macro 0.13.4", + "darling_core 0.14.4", + "darling_macro 0.14.4", ] [[package]] name = "darling" -version = "0.14.4" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", + "darling_core 0.20.8", + "darling_macro 0.20.8", ] [[package]] name = "darling_core" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "859d65a907b6852c9361e3185c862aae7fafd2887876799fa55f5f99dc40d610" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" dependencies = [ "fnv", "ident_case", @@ -782,40 +954,46 @@ dependencies = [ [[package]] name = "darling_core" -version = "0.14.4" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +checksum = "9c2cf1c23a687a1feeb728783b993c4e1ad83d99f351801977dd809b48d0a70f" dependencies = [ "fnv", "ident_case", "proc-macro2", "quote", "strsim", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "darling_macro" -version = "0.13.4" +version = "0.14.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c972679f83bdf9c42bd905396b6c3588a843a17f0f16dfcfa3e2c5d57441835" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" dependencies = [ - "darling_core 0.13.4", + "darling_core 0.14.4", "quote", "syn 1.0.109", ] [[package]] name = "darling_macro" -version = "0.14.4" +version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "darling_core 0.14.4", + "darling_core 0.20.8", "quote", - "syn 1.0.109", + "syn 2.0.53", ] +[[package]] +name = "data-encoding" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e962a19be5cfc3f3bf6dd8f61eb50107f356ad6270fbb3ed41476571db78be5" + [[package]] name = "dataloader" version = "0.16.0" @@ -841,9 +1019,15 @@ dependencies = [ [[package]] name = "deadpool-runtime" -version = "0.1.2" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63dfa964fe2a66f3fde91fc70b267fe193d822c7e603e2a675a49a7f46ad3f49" + +[[package]] +name = "deunicode" +version = "1.4.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eaa37046cc0f6c3cc6090fbdbf73ef0b8ef4cfcc37f6befc0020f63e8cf121e1" +checksum = "b6e854126756c496b8c81dec88f9a706b15b875c5849d4097a3854476b9fdf94" [[package]] name = "digest" @@ -878,9 +1062,9 @@ checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" [[package]] name = "either" -version = "1.8.1" +version = "1.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fcaabb2fef8c910e7f4c7ce9f67a1283a1715879a7c230ca9d6d1ae31f16d91" +checksum = "11157ac094ffbdde99aa67b23417ebdd801842852b500e395a45a9c0aac03e4a" [[package]] name = "encode_unicode" @@ -890,58 +1074,95 @@ checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" [[package]] name = "encoding_rs" -version = "0.8.32" +version = "0.8.33" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "071a31f4ee85403370b58aca746f01041ede6f0da2730960ad001edc2b71b394" +checksum = "7268b386296a025e474d5140678f75d6de9493ae55a5d709eeb9dd08149945e1" dependencies = [ "cfg-if", ] +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + [[package]] name = "erased-serde" -version = "0.3.25" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2b0c2380453a92ea8b6c8e5f64ecaafccddde8ceab55ff7a8ac1029f894569" +checksum = "2b73807008a3c7f171cc40312f37d95ef0396e048b5848d775f54b1a4dd4a0d3" dependencies = [ "serde", ] [[package]] name = "errno" -version = "0.3.1" +version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a" +checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245" dependencies = [ - "errno-dragonfly", "libc", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] -name = "errno-dragonfly" -version = "0.1.2" +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" dependencies = [ - "cc", - "libc", + "concurrent-queue", + "parking", + "pin-project-lite", ] [[package]] name = "event-listener" -version = "2.5.3" +version = "5.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "2b5fb89194fa3cad959b833185b3063ba881dbfc7030680b314250779fb4cc91" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "958e4d70b6d5e81971bebec42271ec641e7ff4e170a6fa605f2b8a8b65cb97d3" +dependencies = [ + "event-listener 4.0.3", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "feedafcaa9b749175d5ac357452a9d41ea2911da598fde46ce1fe02c37751291" +dependencies = [ + "event-listener 5.2.0", + "pin-project-lite", +] [[package]] name = "fake" -version = "2.6.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a44c765350db469b774425ff1c833890b16ceb9612fb5d7c4bbdf4a1b55f876" +checksum = "1c25829bde82205da46e1823b2259db6273379f626fc211f126f65654a2669be" dependencies = [ "chrono", + "deunicode", "rand 0.8.5", - "unidecode", "uuid", ] @@ -963,6 +1184,12 @@ dependencies = [ "instant", ] +[[package]] +name = "fastrand" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "25cbce373ec4653f1a01a31e8a5e5ec0c622dc27ff9c4e6606eefef5cbbed4a5" + [[package]] name = "flume" version = "0.9.2" @@ -997,18 +1224,18 @@ checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b" [[package]] name = "form_urlencoded" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9c384f161156f5260c24a097c56119f9be8c798586aecc13afbcbe7b7e26bf8" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" dependencies = [ "percent-encoding", ] [[package]] name = "futures" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23342abe12aba583913b2e62f22225ff9c950774065e4bfb61a19cd9770fec40" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -1021,9 +1248,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "955518d47e09b25bbebc7a18df10b81f0c766eaf4c4f1cccef2fca5f2a4fb5f2" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -1031,15 +1258,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4bca583b7e26f571124fe5b7561d49cb2868d79116cfa0eefce955557c6fee8c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccecee823288125bd88b4d7f565c9e58e41858e47ab72e8ea2d64e93624386e0" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -1048,9 +1275,9 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4fff74096e71ed47f8e023204cfd0aa1289cd54ae5430a9523be060cdb849964" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-lite" @@ -1058,7 +1285,7 @@ version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49a9d51ce47660b1e808d3c990b4709f2f415d928835a17dfd16991515c46bce" dependencies = [ - "fastrand", + "fastrand 1.9.0", "futures-core", "futures-io", "memchr", @@ -1067,34 +1294,47 @@ dependencies = [ "waker-fn", ] +[[package]] +name = "futures-lite" +version = "2.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "52527eb5074e35e9339c6b4e8d12600c7128b68fb25dcb9fa9dec18f7c25f3a5" +dependencies = [ + "fastrand 2.0.1", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + [[package]] name = "futures-macro" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "89ca545a94061b6365f2c7355b4b32bd20df3ff95f02da9329b34ccc3bd6ee72" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "futures-sink" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f43be4fe21a13b9781a69afa4985b0f6ee0e1afab2c6f454a8cf30e2b2237b6e" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76d3d132be6c0e6aa1534069c705a74a5997a356c0dc2f86a47765e5617c5b65" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.28" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26b01e40b772d54cf6c6d721c1d1abd0647a0106a12ecaa1c186273392a69533" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -1131,9 +1371,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -1151,15 +1391,10 @@ dependencies = [ ] [[package]] -name = "ghost" -version = "0.1.9" +name = "gimli" +version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e77ac7b51b8e6313251737fcef4b1c01a2ea102bde68415b62c0ee9268fec357" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.18", -] +checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" [[package]] name = "gloo-timers" @@ -1187,9 +1422,9 @@ dependencies = [ [[package]] name = "graphql-parser" -version = "0.3.0" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1abd4ce5247dfc04a03ccde70f87a048458c9356c7e41d21ad8c407b3dde6f2" +checksum = "d2ebc8013b4426d5b81a4364c419a95ed0b404af2b82e2457de52d9348f0e474" dependencies = [ "combine", "thiserror", @@ -1197,17 +1432,17 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.19" +version = "0.3.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d357c7ae988e7d2182f7d7871d0b963962420b0678b0997ce7de72001aeab782" +checksum = "4fbd2820c5e49886948654ab546d0688ff24530286bdcf8fca3cefb16d4618eb" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "fnv", "futures-core", "futures-sink", "futures-util", - "http", - "indexmap", + "http 0.2.12", + "indexmap 2.2.5", "slab", "tokio", "tokio-util", @@ -1216,9 +1451,9 @@ dependencies = [ [[package]] name = "handlebars" -version = "4.3.7" +version = "4.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +checksum = "faa67bab9ff362228eb3d00bd024a4965d8231bbb7921167f0cfa66c6626b225" dependencies = [ "log", "pest", @@ -1237,20 +1472,25 @@ dependencies = [ "ahash", ] +[[package]] +name = "hashbrown" +version = "0.14.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604" + [[package]] name = "headers" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3e372db8e5c0d213e0cd0b9be18be2aca3d44cf2fe30a9d46a65581cd454584" +checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" dependencies = [ - "base64 0.13.1", - "bitflags", - "bytes 1.4.0", + "base64 0.21.7", + "bytes 1.5.0", "headers-core", - "http", + "http 0.2.12", "httpdate", "mime", - "sha1 0.10.5", + "sha1 0.10.6", ] [[package]] @@ -1259,7 +1499,7 @@ version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" dependencies = [ - "http", + "http 0.2.12", ] [[package]] @@ -1270,18 +1510,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" -dependencies = [ - "libc", -] - -[[package]] -name = "hermit-abi" -version = "0.3.1" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed44880c466736ef9a5c5b5facefb5ed0785676d0c02d612db14e54f0d84286" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" [[package]] name = "hkdf" @@ -1305,23 +1536,34 @@ dependencies = [ [[package]] name = "http" -version = "0.2.9" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd6effc99afb63425aff9b05836f029929e345a6148a14b7ecd5ab67af944482" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes 1.5.0", "fnv", "itoa", ] [[package]] name = "http-body" -version = "0.4.5" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" +checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ - "bytes 1.4.0", - "http", + "bytes 1.5.0", + "http 0.2.12", "pin-project-lite", ] @@ -1341,11 +1583,11 @@ dependencies = [ [[package]] name = "http-serde" -version = "1.1.2" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e272971f774ba29341db2f686255ff8a979365a26fb9e4277f6b6d9ec0cdd5e" +checksum = "6f560b665ad9f1572cfcaf034f7fb84338a7ce945216d64a90fd81f046a3caee" dependencies = [ - "http", + "http 0.2.12", "serde", ] @@ -1356,11 +1598,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e9b187a72d63adbfba487f48095306ac823049cb504ee195541e91c7775f5ad" dependencies = [ "anyhow", - "async-channel", + "async-channel 1.9.0", "async-std", "base64 0.13.1", "cookie", - "futures-lite", + "futures-lite 1.13.0", "infer", "pin-project-lite", "rand 0.7.3", @@ -1379,28 +1621,28 @@ checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.26" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab302d72a6f11a3b910431ff93aae7e773078c769f0a3ef15fb9ec692ed147d4" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-channel", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "httparse", "httpdate", "itoa", "pin-project-lite", - "socket2", + "socket2 0.5.6", "tokio", "tower-service", "tracing", @@ -1413,7 +1655,7 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "hyper", "native-tls", "tokio", @@ -1422,16 +1664,16 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.56" +version = "0.1.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0722cd7114b7de04316e7ea5456a0bbb20e4adb46fd27a3697adb812cff0f37c" +checksum = "e7ffbb5a1b541ea2561f8c41c087286cc091e21e556a4f09a8f6cbf17b69b141" dependencies = [ "android_system_properties", "core-foundation-sys", "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows", + "windows-core", ] [[package]] @@ -1451,9 +1693,9 @@ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" [[package]] name = "idna" -version = "0.3.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e14ddfc70884202db2244c223200c204c2bda1bc6e0998d11b5e024d657209e6" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" dependencies = [ "unicode-bidi", "unicode-normalization", @@ -1466,7 +1708,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" dependencies = [ "autocfg", - "hashbrown", + "hashbrown 0.12.3", + "serde", +] + +[[package]] +name = "indexmap" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4" +dependencies = [ + "equivalent", + "hashbrown 0.14.3", "serde", ] @@ -1478,9 +1731,9 @@ checksum = "64e9829a50b42bb782c1df523f78d332fe371b10c661e78b7a3c34b0198e9fac" [[package]] name = "insta" -version = "1.29.0" +version = "1.36.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a28d25139df397cbca21408bb742cf6837e04cdbebf1b07b760caf971d6a972" +checksum = "0a7c22c4d34ef4788c351e971c52bfdfe7ea2766f8c5466bc175dd46e52ac22e" dependencies = [ "console", "lazy_static", @@ -1500,12 +1753,9 @@ dependencies = [ [[package]] name = "inventory" -version = "0.3.6" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0539b5de9241582ce6bd6b0ba7399313560151e58c9aaf8b74b711b1bdce644" -dependencies = [ - "ghost", -] +checksum = "f958d3d68f4167080a18141e10381e7634563984a537f2a49a30fd8e53ac5767" [[package]] name = "io-lifetimes" @@ -1513,16 +1763,16 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2" dependencies = [ - "hermit-abi 0.3.1", + "hermit-abi", "libc", "windows-sys 0.48.0", ] [[package]] name = "ipnet" -version = "2.7.2" +version = "2.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12b6ee2129af8d4fb011108c73d99a1b83a85977f23b82460c0ae2e25bb4b57f" +checksum = "8f518f335dce6725a761382244631d86cf0ccb2863413590b31338feb467f9c3" [[package]] name = "isahc" @@ -1535,8 +1785,8 @@ dependencies = [ "curl", "curl-sys", "flume", - "futures-lite", - "http", + "futures-lite 1.13.0", + "http 0.2.12", "log", "once_cell", "slab", @@ -1553,19 +1803,19 @@ version = "1.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "334e04b4d781f436dc315cb1e7515bd96826426345d498149e4bde36b67f8ee9" dependencies = [ - "async-channel", + "async-channel 1.9.0", "castaway", "crossbeam-utils", "curl", "curl-sys", "encoding_rs", - "event-listener", - "futures-lite", - "http", + "event-listener 2.5.3", + "futures-lite 1.13.0", + "http 0.2.12", "log", "mime", "once_cell", - "polling", + "polling 2.8.0", "slab", "sluice", "tracing", @@ -1575,29 +1825,27 @@ dependencies = [ ] [[package]] -name = "itoa" -version = "1.0.6" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "453ad9f582a441959e5f0d088b02ce04cfe8d51a8eaf077f12ac6d3e94164ca6" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] [[package]] -name = "js-sys" -version = "0.3.63" +name = "itoa" +version = "1.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f37a4a5928311ac501dee68b3c7613a1037d0edb30c8e5427bd832d55d1b790" -dependencies = [ - "wasm-bindgen", -] +checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] -name = "json-decode" -version = "0.6.0" +name = "js-sys" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fd72139ade93da4f8a437afe8654a4a3cf1d858dc195fc6691e6e932fa1b6ee" +checksum = "29c15563dc2726973df627357ce0c9ddddbea194836909d655df6a75d2cf296d" dependencies = [ - "serde", - "serde_json", - "thiserror", + "wasm-bindgen", ] [[package]] @@ -1622,16 +1870,16 @@ dependencies = [ [[package]] name = "lambda_http" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2f580d0cf5364705314779cded5f8a4a9c856b104361ce18254e05969793933" +checksum = "2505c4a24f5a8d8ac66a87691215ec1f79736c5bc6e62bb921788dca9753f650" dependencies = [ "aws_lambda_events", - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.7", + "bytes 1.5.0", "encoding_rs", "futures", - "http", + "http 0.2.12", "http-body", "hyper", "lambda_runtime", @@ -1640,23 +1888,28 @@ dependencies = [ "serde", "serde_json", "serde_urlencoded", + "tokio-stream", "url", ] [[package]] name = "lambda_runtime" -version = "0.8.0" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "124a7d502e26b1ae9645bafd964d299d9c0d882cc8b3e228604d02bf0e13fc87" +checksum = "deca8f65d7ce9a8bfddebb49d7d91b22e788a59ca0c5190f26794ab80ed7a702" dependencies = [ "async-stream", - "bytes 1.4.0", + "base64 0.20.0", + "bytes 1.5.0", "futures", - "http", + "http 0.2.12", + "http-body", + "http-serde", "hyper", "lambda_runtime_api_client", "serde", "serde_json", + "serde_path_to_error", "tokio", "tokio-stream", "tower", @@ -1669,7 +1922,7 @@ version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "690c5ae01f3acac8c9c3348b556fc443054e9b7f1deaf53e9ebab716282bf0ed" dependencies = [ - "http", + "http 0.2.12", "hyper", "tokio", "tower-service", @@ -1683,15 +1936,15 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.144" +version = "0.2.153" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b00cc1c228a6782d0f076e7b232802e0c5689d41bb5df366f2a6b6621cfdfe1" +checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd" [[package]] name = "libnghttp2-sys" -version = "0.1.7+1.45.0" +version = "0.1.9+1.58.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57ed28aba195b38d5ff02b9170cbff627e336a20925e43b4945390401c5dc93f" +checksum = "b57e858af2798e167e709b9d969325b6d8e9d50232fcbc494d7d54f976854a64" dependencies = [ "cc", "libc", @@ -1699,9 +1952,9 @@ dependencies = [ [[package]] name = "libz-sys" -version = "1.1.9" +version = "1.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56ee889ecc9568871456d42f603d6a0ce59ff328d291063a45cbdf0036baf6db" +checksum = "037731f5d3aaa87a5675e895b63ddff1a87624bc29f77004ea829809654e48f6" dependencies = [ "cc", "libc", @@ -1721,11 +1974,17 @@ version = "0.3.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519" +[[package]] +name = "linux-raw-sys" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" + [[package]] name = "lock_api" -version = "0.4.9" +version = "0.4.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df" +checksum = "3c168f8615b12bc01f9c17e2eb0cc07dcae1940121185446edc3744920e8ef45" dependencies = [ "autocfg", "scopeguard", @@ -1733,9 +1992,9 @@ dependencies = [ [[package]] name = "log" -version = "0.4.18" +version = "0.4.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "518ef76f2f87365916b142844c16d8fefd85039bc5699050210a7778ee1cd1de" +checksum = "90ed8c1e510134f979dbc4f070f87d4313098b704861a105fe34231c70a3901c" dependencies = [ "value-bag", ] @@ -1751,29 +2010,30 @@ dependencies = [ [[package]] name = "maybe-async" -version = "0.2.7" +version = "0.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f1b8c13cb1f814b634a96b2c725449fe7ed464a7b8781de8688be5ffbd3f305" +checksum = "5cf92c10c7e361d6b99666ec1c6f9805b0bea2c3bd8c78dc6fe98ac5bd78db11" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] name = "md-5" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6365506850d44bff6e2fbcb5176cf63650e48bd45ef2fe2665ae1570e0f4b9ca" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" dependencies = [ + "cfg-if", "digest 0.10.7", ] [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "mime" @@ -1797,11 +2057,20 @@ version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" +[[package]] +name = "miniz_oxide" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d811f3e15f28568be3407c8e7fdb6514c1cda3cb30683f15b6a1a1dc4ea14a7" +dependencies = [ + "adler", +] + [[package]] name = "mio" -version = "0.8.8" +version = "0.8.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "927a765cd3fc26206e66b296465fa9d3e5ab003e651c1b3c060e7956d96b19d2" +checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" dependencies = [ "libc", "wasi 0.11.0+wasi-snapshot-preview1", @@ -1814,10 +2083,28 @@ version = "2.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "01acbdc23469fd8fe07ab135923371d5f5a422fbf9c522158677c8eb15bc51c2" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", + "encoding_rs", + "futures-util", + "http 0.2.12", + "httparse", + "log", + "memchr", + "mime", + "spin", + "version_check", +] + +[[package]] +name = "multer" +version = "3.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a15d522be0a9c3e46fd2632e272d178f56387bdb5c9fbb3a36c649062e9b5219" +dependencies = [ + "bytes 1.5.0", "encoding_rs", "futures-util", - "http", + "http 1.1.0", "httparse", "log", "memchr", @@ -1866,42 +2153,51 @@ dependencies = [ [[package]] name = "num-traits" -version = "0.2.15" +version = "0.2.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd" +checksum = "da0df0e5185db44f69b44f26786fe401b6c293d1907744beaa7fa62b2e5a517a" dependencies = [ "autocfg", ] [[package]] name = "num_cpus" -version = "1.15.0" +version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0fac9e2da13b5eb447a6ce3d392f23a29d8694bff781bf03a16cd9ac8697593b" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" dependencies = [ - "hermit-abi 0.2.6", + "hermit-abi", "libc", ] +[[package]] +name = "object" +version = "0.32.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" +dependencies = [ + "memchr", +] + [[package]] name = "once_cell" -version = "1.17.2" +version = "1.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9670a07f94779e00908f3e686eab508878ebb390ba6e604d3a284c00e8d0487b" +checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" [[package]] name = "opaque-debug" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" +checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "openssl" -version = "0.10.53" +version = "0.10.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "12df40a956736488b7b44fe79fe12d4f245bb5b3f5a1f6095e499760015be392" +checksum = "95a0481286a310808298130d22dd1fef0fa571e05a8f44ec801801e84b216b1f" dependencies = [ - "bitflags", + "bitflags 2.5.0", "cfg-if", "foreign-types", "libc", @@ -1918,7 +2214,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -1929,9 +2225,9 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "openssl-sys" -version = "0.9.88" +version = "0.9.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617" +checksum = "dda2b0f344e78efc2facf7d195d098df0dd72151b26ab98da807afc26c198dff" dependencies = [ "cc", "libc", @@ -1946,7 +2242,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" dependencies = [ "dlv-list", - "hashbrown", + "hashbrown 0.12.3", +] + +[[package]] +name = "ouroboros" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97b7be5a8a3462b752f4be3ff2b2bf2f7f1d00834902e46be2a4d68b87b0573c" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b645dcde5f119c2c454a92d0dfa271a2a3b205da92e4292a68ead4bdbfde1f33" +dependencies = [ + "heck", + "itertools", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.53", ] [[package]] @@ -1957,9 +2278,9 @@ checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" [[package]] name = "parking" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14f2252c834a40ed9bb5422029649578e63aa341ac401f74e719dd1afda8394e" +checksum = "bb813b8af86854136c6922af0598d719255ecb2179515e6e7730d468f05c9cae" [[package]] name = "parking_lot" @@ -1973,15 +2294,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.7" +version = "0.9.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9069cbb9f99e3a5083476ccb29ceb1de18b9118cafa53e90c9551235de2b9521" +checksum = "4c42a9226546d68acdd9c0a280d17ce19bfe27a46bf68784e4066115788d008e" dependencies = [ "cfg-if", "libc", - "redox_syscall 0.2.16", + "redox_syscall", "smallvec", - "windows-sys 0.45.0", + "windows-targets 0.48.5", ] [[package]] @@ -1992,25 +2313,26 @@ checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" [[package]] name = "percent-encoding" -version = "2.2.0" +version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" [[package]] name = "pest" -version = "2.6.0" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e68e84bfb01f0507134eac1e9b410a12ba379d064eab48c50ba4ce329a527b70" +checksum = "56f8023d0fb78c8e03784ea1c7f3fa36e68a723138990b8d5a47d916b651e7a8" dependencies = [ + "memchr", "thiserror", "ucd-trie", ] [[package]] name = "pest_derive" -version = "2.6.0" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b79d4c71c865a25a4322296122e3924d30bc8ee0834c8bfc8b95f7f054afbfb" +checksum = "b0d24f72393fd16ab6ac5738bc33cdb6a9aa73f8b902e8fe29cf4e67d7dd1026" dependencies = [ "pest", "pest_generator", @@ -2018,53 +2340,53 @@ dependencies = [ [[package]] name = "pest_generator" -version = "2.6.0" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c435bf1076437b851ebc8edc3a18442796b30f1728ffea6262d59bbe28b077e" +checksum = "fdc17e2a6c7d0a492f0158d7a4bd66cc17280308bbaff78d5bef566dca35ab80" dependencies = [ "pest", "pest_meta", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "pest_meta" -version = "2.6.0" +version = "2.7.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "745a452f8eb71e39ffd8ee32b3c5f51d03845f99786fa9b68db6ff509c505411" +checksum = "934cd7631c050f4674352a6e835d5f6711ffbfb9345c2fc0107155ac495ae293" dependencies = [ "once_cell", "pest", - "sha2 0.10.6", + "sha2 0.10.8", ] [[package]] name = "pin-project" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c95a7476719eab1e366eaf73d0260af3021184f18177925b07f54b30089ceead" +checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.1.0" +version = "1.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39407670928234ebc5e6e580247dd567ad73a3578460c5990f9503df207e8f07" +checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "pin-project-lite" -version = "0.2.9" +version = "0.2.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" +checksum = "8afb450f006bf6385ca15ef45d71d2288452bc3683ce2e2cacc0d18e4be60b58" [[package]] name = "pin-utils" @@ -2072,11 +2394,22 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" +[[package]] +name = "piper" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "668d31b1c4eba19242f2088b2bf3316b82ca31082a8335764db4e083db7485d4" +dependencies = [ + "atomic-waker", + "fastrand 2.0.1", + "futures-io", +] + [[package]] name = "pkg-config" -version = "0.3.27" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964" +checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" [[package]] name = "polling" @@ -2085,7 +2418,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4b2d323e8ca7996b3e23126511a523f7e62924d93ecd5ae73b333815b0eb3dce" dependencies = [ "autocfg", - "bitflags", + "bitflags 1.3.2", "cfg-if", "concurrent-queue", "libc", @@ -2094,6 +2427,20 @@ dependencies = [ "windows-sys 0.48.0", ] +[[package]] +name = "polling" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24f040dee2588b4963afb4e420540439d126f73fdacf4a9c486a96d840bac3c9" +dependencies = [ + "cfg-if", + "concurrent-queue", + "pin-project-lite", + "rustix 0.38.32", + "tracing", + "windows-sys 0.52.0", +] + [[package]] name = "polyval" version = "0.4.5" @@ -2129,18 +2476,31 @@ checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" [[package]] name = "proc-macro2" -version = "1.0.59" +version = "1.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6aeca18b86b413c660b781aa319e4e2648a3e6f9eadc9b47e9038e6fe9f3451b" +checksum = "e835ff2298f5721608eb1a980ecaee1aef2c132bf95ecc026a11b7bf3c01c02e" dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.53", + "version_check", + "yansi", +] + [[package]] name = "query_map" -version = "0.6.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4465aacac3bebc9484cf7a56dc8b2d7feacb657da6002a9198b4f7af4247a204" +checksum = "5eab6b8b1074ef3359a863758dae650c7c0c6027927a085b7af911c8e0bf3a15" dependencies = [ "form_urlencoded", "serde", @@ -2149,9 +2509,9 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.28" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b9ab9c7eadfd8df19006f1cf1a4aed13540ed5cbc047010ece5826e10825488" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -2215,7 +2575,7 @@ version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ - "getrandom 0.2.9", + "getrandom 0.2.12", ] [[package]] @@ -2229,31 +2589,42 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.2.16" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" +checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] -name = "redox_syscall" -version = "0.3.5" +name = "ref-cast" +version = "1.0.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4846d4c50d1721b1a3bef8af76924eef20d5e723647333798c1b519b3a9473f" +dependencies = [ + "ref-cast-impl", +] + +[[package]] +name = "ref-cast-impl" +version = "1.0.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" +checksum = "5fddb4f8d99b0a2ebafc65a87a69a7b9875e4b1ae1f00db265d300ef7f28bccc" dependencies = [ - "bitflags", + "proc-macro2", + "quote", + "syn 2.0.53", ] [[package]] name = "regex" -version = "1.10.2" +version = "1.10.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.3", + "regex-automata 0.4.6", "regex-syntax 0.8.2", ] @@ -2268,9 +2639,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.3" +version = "0.4.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +checksum = "86b83b8b9847f9bf95ef68afb0b8e6cdb80f498442f5179a29fad448fcc1eaea" dependencies = [ "aho-corasick", "memchr", @@ -2294,7 +2665,7 @@ name = "relation_server" version = "0.1.0" dependencies = [ "array_tool", - "async-graphql", + "async-graphql 5.0.10", "async-graphql-warp", "async-recursion", "async-trait", @@ -2307,7 +2678,7 @@ dependencies = [ "fake", "futures", "gql_client", - "http", + "http 0.2.12", "hyper", "hyper-tls", "insta", @@ -2340,17 +2711,17 @@ dependencies = [ [[package]] name = "reqwest" -version = "0.11.18" +version = "0.11.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cde824a14b7c14f85caff81225f411faacc04a2013f41670f41443742b1c1c55" +checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" dependencies = [ - "base64 0.21.2", - "bytes 1.4.0", + "base64 0.21.7", + "bytes 1.5.0", "encoding_rs", "futures-core", "futures-util", "h2", - "http", + "http 0.2.12", "http-body", "hyper", "hyper-tls", @@ -2362,9 +2733,12 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", + "rustls-pemfile", "serde", "serde_json", "serde_urlencoded", + "sync_wrapper", + "system-configuration", "tokio", "tokio-native-tls", "tower-service", @@ -2388,7 +2762,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" dependencies = [ "base64 0.13.1", - "bitflags", + "bitflags 1.3.2", "serde", ] @@ -2402,6 +2776,12 @@ dependencies = [ "ordered-multimap", ] +[[package]] +name = "rustc-demangle" +version = "0.1.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76" + [[package]] name = "rustc_version" version = "0.2.3" @@ -2413,46 +2793,59 @@ dependencies = [ [[package]] name = "rustix" -version = "0.37.19" +version = "0.37.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acf8729d8542766f1b2cf77eb034d52f40d375bb8b615d0b147089946e16613d" +checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2" dependencies = [ - "bitflags", + "bitflags 1.3.2", "errno", "io-lifetimes", "libc", - "linux-raw-sys", + "linux-raw-sys 0.3.8", "windows-sys 0.48.0", ] +[[package]] +name = "rustix" +version = "0.38.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65e04861e65f21776e67888bfbea442b3642beaa0138fdb1dd7a84a52dffdb89" +dependencies = [ + "bitflags 2.5.0", + "errno", + "libc", + "linux-raw-sys 0.4.13", + "windows-sys 0.52.0", +] + [[package]] name = "rustls-pemfile" -version = "1.0.2" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d194b56d58803a43635bdc398cd17e383d6f71f9182b9a192c127ca42494a59b" +checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c" dependencies = [ - "base64 0.21.2", + "base64 0.21.7", ] [[package]] name = "rustversion" -version = "1.0.12" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f3208ce4d8448b3f3e7d168a73f5e0c43a61e32930de3bceeccedb388b6bf06" +checksum = "7ffc183a10b4478d04cbbbfc96d0873219d962dd5accaff2ffbd4ceb7df837f4" [[package]] name = "ryu" -version = "1.0.13" +version = "1.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91339c0467de62360649f8d3e185ca8de4224ff281f66000de5eb2a77a79041" +checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "schannel" -version = "0.1.21" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713cfb06c7059f3588fb8044c0fad1d09e3c01d225e25b9220dbfdcf16dbb1b3" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.42.0", + "windows-sys 0.52.0", ] [[package]] @@ -2463,17 +2856,17 @@ checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" [[package]] name = "scopeguard" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "security-framework" -version = "2.9.1" +version = "2.9.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc758eb7bffce5b308734e9b0c1468893cae9ff70ebf13e7090be8dcbcc83a8" +checksum = "05b64fb303737d99b81884b2c63433e9ae28abebe5eb5045dcdd175dc2ecf4de" dependencies = [ - "bitflags", + "bitflags 1.3.2", "core-foundation", "core-foundation-sys", "libc", @@ -2482,9 +2875,9 @@ dependencies = [ [[package]] name = "security-framework-sys" -version = "2.9.0" +version = "2.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f51d0c0d83bec45f16480d0ce0058397a69e48fcdc52d1dc8855fb68acbd31a7" +checksum = "e932934257d3b408ed8f30db49d85ea163bfe74961f017f405b025af298f0c7a" dependencies = [ "core-foundation-sys", "libc", @@ -2507,35 +2900,45 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" [[package]] name = "serde" -version = "1.0.163" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2113ab51b87a539ae008b5c6c02dc020ffa39afd2d83cffcb3f4eb2722cebec2" +checksum = "3fb1c873e1b9b056a4dc4c0c198b24c3ffa059243875552b2bd0933b1aee4ce2" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.163" +version = "1.0.197" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8c805777e3930c8883389c602315a24224bcc738b63905ef87cd1420353ea93e" +checksum = "7eb0b34b42edc17f6b7cac84a52a1c5f0e1bb2227e997ca9011ea3dd34e8610b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "serde_json" -version = "1.0.96" +version = "1.0.114" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "057d394a50403bcac12672b2b18fb387ab6d289d957dab67dd201875391e52f1" +checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0" dependencies = [ "itoa", "ryu", "serde", ] +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + [[package]] name = "serde_qs" version = "0.8.5" @@ -2549,13 +2952,13 @@ dependencies = [ [[package]] name = "serde_repr" -version = "0.1.12" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcec881020c684085e55a25f7fd888954d56609ef363479dc5a1305eb0d40cab" +checksum = "0b2e6b945e9d3df726b65d6ee24060aff8e3533d431f677a9695db04eff9dfdb" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -2581,9 +2984,9 @@ dependencies = [ [[package]] name = "sha1" -version = "0.10.5" +version = "0.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f04293dc80c3993519f2d7f6f511707ee7094fe0c6d3406feb330cdb3540eba3" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" dependencies = [ "cfg-if", "cpufeatures", @@ -2611,9 +3014,9 @@ dependencies = [ [[package]] name = "sha2" -version = "0.10.6" +version = "0.10.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" dependencies = [ "cfg-if", "cpufeatures", @@ -2622,9 +3025,9 @@ dependencies = [ [[package]] name = "sharded-slab" -version = "0.1.4" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" dependencies = [ "lazy_static", ] @@ -2640,15 +3043,15 @@ dependencies = [ [[package]] name = "similar" -version = "2.2.1" +version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "420acb44afdae038210c99e69aae24109f32f15500aa708e81d46c9f29d55fcf" +checksum = "32fea41aca09ee824cc9724996433064c89f7777e60762749a4170a14abbfa21" [[package]] name = "slab" -version = "0.4.8" +version = "0.4.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6528351c9bc8ab22353f9d776db39a20288e8d6c37ef8cfe3317cf875eecfc2d" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" dependencies = [ "autocfg", ] @@ -2659,27 +3062,37 @@ version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6d7400c0eff44aa2fcb5e31a5f24ba9716ed90138769e4977a2ba6014ae63eb5" dependencies = [ - "async-channel", + "async-channel 1.9.0", "futures-core", "futures-io", ] [[package]] name = "smallvec" -version = "1.10.0" +version = "1.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0" +checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" [[package]] name = "socket2" -version = "0.4.9" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64a4a911eed85daf18834cfaa86a79b7d266ff93ff5ba14005426219480ed662" +checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" dependencies = [ "libc", "winapi", ] +[[package]] +name = "socket2" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05ffd9c0a93b7543e062e759284fcf5f5e3b098501104bfbdde4d404db792871" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + [[package]] name = "spin" version = "0.9.8" @@ -2710,6 +3123,12 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" +[[package]] +name = "static_assertions_next" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7beae5182595e9a8b683fa98c4317f956c9a2dec3b9716990d20023cc60c766" + [[package]] name = "stdweb" version = "0.4.20" @@ -2767,21 +3186,24 @@ checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" [[package]] name = "strum" -version = "0.24.1" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f" +checksum = "5d8cec3501a5194c432b2b7976db6b7d10ec95c253208b45f83f7136aa985e29" +dependencies = [ + "strum_macros", +] [[package]] name = "strum_macros" -version = "0.24.3" +version = "0.26.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59" +checksum = "c6cf59daf282c0a494ba14fd21610a0325f9f90ec9d1231dea26bcb1d696c946" dependencies = [ "heck", "proc-macro2", "quote", "rustversion", - "syn 1.0.109", + "syn 2.0.53", ] [[package]] @@ -2801,7 +3223,7 @@ dependencies = [ "cfg-if", "encoding_rs", "futures-util", - "getrandom 0.2.9", + "getrandom 0.2.12", "http-client", "http-types", "log", @@ -2826,69 +3248,84 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.18" +version = "2.0.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32d41677bcbe24c20c52e7c70b0d8db04134c5d1066bf98662e2871ad200ea3e" +checksum = "7383cd0e49fff4b6b90ca5670bfd3e9d6a733b3f90c686605aa7eec8c4996032" dependencies = [ "proc-macro2", "quote", "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "system-configuration" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba3a3adc5c275d719af8cb4272ea1c4a6d668a777f37e115f6d11ddbc1c8e0e7" +dependencies = [ + "bitflags 1.3.2", + "core-foundation", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75fb188eb626b924683e3b95e3a48e63551fcfb51949de2f06a9d91dbee93c9" +dependencies = [ + "core-foundation-sys", + "libc", +] + [[package]] name = "tempfile" -version = "3.5.0" +version = "3.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9fbec84f381d5795b08656e4912bec604d162bff9291d6189a78f4c8ab87998" +checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" dependencies = [ "cfg-if", - "fastrand", - "redox_syscall 0.3.5", - "rustix", - "windows-sys 0.45.0", + "fastrand 2.0.1", + "rustix 0.38.32", + "windows-sys 0.52.0", ] [[package]] name = "thiserror" -version = "1.0.40" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "978c9a314bd8dc99be594bc3c175faaa9794be04a5a5e153caba6915336cebac" +checksum = "03468839009160513471e86a034bb2c5c0e4baae3b43f79ffc55c4a5427b3297" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.40" +version = "1.0.58" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9456a42c5b0d803c8cd86e73dd7cc9edd429499f37a3550d286d5e86720569f" +checksum = "c61f3ba182994efc43764a46c018c347bc492c79f024e705f46567b418f6d4f7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "thread_local" -version = "1.1.7" +version = "1.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdd6f064ccff2d6567adcb3873ca630700f00b5ad3f060c25b5dcfd9a4ce152" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" dependencies = [ "cfg-if", "once_cell", ] -[[package]] -name = "time" -version = "0.1.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b797afad3f312d1c66a56d11d0316f916356d11bd158fbc6ca6389ff6bf805a" -dependencies = [ - "libc", - "wasi 0.10.0+wasi-snapshot-preview1", - "winapi", -] - [[package]] name = "time" version = "0.2.27" @@ -2944,32 +3381,32 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.28.2" +version = "1.36.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94d7b1cfd2aa4011f2de74c2c4c63665e27a71006b0a192dcd2710272e73dfa2" +checksum = "61285f6515fa018fb2d1e46eb21223fff441ee8db5d0f1435e8ab4f5cdb80931" dependencies = [ - "autocfg", - "bytes 1.4.0", + "backtrace", + "bytes 1.5.0", "libc", "mio", "num_cpus", "parking_lot", "pin-project-lite", "signal-hook-registry", - "socket2", + "socket2 0.5.6", "tokio-macros", "windows-sys 0.48.0", ] [[package]] name = "tokio-macros" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "630bdcf245f78637c13ec01ffae6187cca34625e8c63150d424b59e55af2675e" +checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] @@ -2984,9 +3421,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.14" +version = "0.1.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "397c988d37662c7dda6d2208364a706264bf3d6138b11d436cbac0ad38832842" +checksum = "267ac89e0bec6e691e5813911606935d77c476ff49024f98abcea3e7b15e37af" dependencies = [ "futures-core", "pin-project-lite", @@ -2995,9 +3432,9 @@ dependencies = [ [[package]] name = "tokio-tungstenite" -version = "0.18.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54319c93411147bced34cb5609a80e0a8e44c5999c93903a81cd866630ec0bfd" +checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" dependencies = [ "futures-util", "log", @@ -3007,11 +3444,11 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.7.8" +version = "0.7.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "806fe8c2c87eccc8b3267cbae29ed3ab2d0bd37fca70ab622e46aaa9375ddb7d" +checksum = "5419f34732d9eb6ee4c3578b7989078579b7f039cbbb9ca2c4da015749371e15" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-core", "futures-sink", "pin-project-lite", @@ -3030,17 +3467,17 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.2" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a76a9312f5ba4c2dec6b9161fdf25d87ad8a09256ccea5a556fef03c706a10f" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.19.10" +version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2380d56e8670370eee6566b0bfd4265f65b3f432e8c6d85623f728d4fa31f739" +checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap", + "indexmap 2.2.5", "toml_datetime", "winnow", ] @@ -3074,11 +3511,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.37" +version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ce8c33a8d48bd45d624a6e523445fd21ec13d3653cd51f681abf67418f54eb8" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "cfg-if", "log", "pin-project-lite", "tracing-attributes", @@ -3087,20 +3523,20 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.24" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f57e3ca2a01450b1a921183a9c9cbfda207fd822cef4ccb00a65402cbba7a74" +checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "tracing-core" -version = "0.1.31" +version = "0.1.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0955b8137a1df6f1a2e9a37d8a6656291ff0297c1a97c24e0d8425fe2312f79a" +checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54" dependencies = [ "once_cell", "valuable", @@ -3118,20 +3554,20 @@ dependencies = [ [[package]] name = "tracing-log" -version = "0.1.3" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "78ddad33d2d10b1ed7eb9d1f518a5674713876e97e5bb9b7345a7984fbb4f922" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" dependencies = [ - "lazy_static", "log", + "once_cell", "tracing-core", ] [[package]] name = "tracing-subscriber" -version = "0.3.17" +version = "0.3.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30a651bc37f915e81f087d86e62a18eec5f79550c7faff886f7090b4ea757c77" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" dependencies = [ "matchers", "nu-ansi-term", @@ -3147,24 +3583,24 @@ dependencies = [ [[package]] name = "try-lock" -version = "0.2.4" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" [[package]] name = "tungstenite" -version = "0.18.0" +version = "0.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ee6ab729cd4cf0fd55218530c4522ed30b7b6081752839b68fcec8d0960788" +checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" dependencies = [ - "base64 0.13.1", "byteorder", - "bytes 1.4.0", - "http", + "bytes 1.5.0", + "data-encoding", + "http 0.2.12", "httparse", "log", "rand 0.8.5", - "sha1 0.10.5", + "sha1 0.10.6", "thiserror", "url", "utf-8", @@ -3172,15 +3608,15 @@ dependencies = [ [[package]] name = "typenum" -version = "1.16.0" +version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" [[package]] name = "typetag" -version = "0.2.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a6898cc6f6a32698cc3e14d5632a14d2b23ed9f7b11e6b8e05ce685990acc22" +checksum = "661d18414ec032a49ece2d56eee03636e43c4e8d577047ab334c0ba892e29aaf" dependencies = [ "erased-serde", "inventory", @@ -3191,57 +3627,51 @@ dependencies = [ [[package]] name = "typetag-impl" -version = "0.2.8" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c3e1c30cedd24fc597f7d37a721efdbdc2b1acae012c1ef1218f4c7c2c0f3e7" +checksum = "ac73887f47b9312552aa90ef477927ff014d63d1920ca8037c6c1951eab64bb1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", ] [[package]] name = "ucd-trie" -version = "0.1.5" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" [[package]] name = "unicase" -version = "2.6.0" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" +checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" dependencies = [ "version_check", ] [[package]] name = "unicode-bidi" -version = "0.3.13" +version = "0.3.15" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92888ba5573ff080736b3648696b70cafad7d250551175acbaa4e0385b3e1460" +checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75" [[package]] name = "unicode-ident" -version = "1.0.9" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0" +checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" [[package]] name = "unicode-normalization" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921" +checksum = "a56d1686db2308d901306f92a263857ef59ea39678a5458e7cb17f01415101f5" dependencies = [ "tinyvec", ] -[[package]] -name = "unidecode" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "402bb19d8e03f1d1a7450e2bd613980869438e0666331be3e073089124aa1adc" - [[package]] name = "universal-hash" version = "0.4.1" @@ -3263,9 +3693,9 @@ dependencies = [ [[package]] name = "url" -version = "2.3.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643" +checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633" dependencies = [ "form_urlencoded", "idna", @@ -3275,9 +3705,9 @@ dependencies = [ [[package]] name = "urlencoding" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8db7427f936968176eaa7cdf81b7f98b980b18495ec28f1b5791ac3bfe3eea9" +checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" [[package]] name = "utf-8" @@ -3287,12 +3717,12 @@ checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" [[package]] name = "uuid" -version = "1.3.3" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "345444e32442451b267fc254ae85a209c64be56d2890e601a0c37ff0c3c5ecd2" +checksum = "a183cf7feeba97b4dd1c0d46788634f6221d87fa961b305bed08c851829efcc0" dependencies = [ "atomic", - "getrandom 0.2.9", + "getrandom 0.2.12", "md-5", "serde", "sha1_smol", @@ -3306,9 +3736,9 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" [[package]] name = "value-bag" -version = "1.4.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4d330786735ea358f3bc09eea4caa098569c1c93f342d9aca0514915022fe7e" +checksum = "74797339c3b98616c009c7c3eb53a0ce41e85c8ec66bd3db96ed132d20cfdee8" [[package]] name = "vcpkg" @@ -3330,36 +3760,35 @@ checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d" [[package]] name = "waker-fn" -version = "1.1.0" +version = "1.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d5b2c62b4012a3e1eca5a7e077d13b3bf498c4073e33ccd58626607748ceeca" +checksum = "f3c4517f54858c779bbcbf228f4fca63d121bf85fbecb2dc578cdf4a39395690" [[package]] name = "want" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" dependencies = [ - "log", "try-lock", ] [[package]] name = "warp" -version = "0.3.5" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba431ef570df1287f7f8b07e376491ad54f84d26ac473489427231e1718e1f69" +checksum = "c1e92e22e03ff1230c03a1a8ee37d2f89cd489e2e541b7550d6afad96faed169" dependencies = [ - "bytes 1.4.0", + "bytes 1.5.0", "futures-channel", "futures-util", "headers", - "http", + "http 0.2.12", "hyper", "log", "mime", "mime_guess", - "multer", + "multer 2.1.0", "percent-encoding", "pin-project", "rustls-pemfile", @@ -3381,12 +3810,6 @@ version = "0.9.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" -[[package]] -name = "wasi" -version = "0.10.0+wasi-snapshot-preview1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f" - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -3395,9 +3818,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bba0e8cb82ba49ff4e229459ff22a191bbe9a1cb3a341610c9c33efc27ddf73" +checksum = "4be2531df63900aeb2bca0daaaddec08491ee64ceecbee5076636a3b026795a8" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -3405,24 +3828,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "19b04bc93f9d6bdee709f6bd2118f57dd6679cf1176a1af464fca3ab0d66d8fb" +checksum = "614d787b966d3989fa7bb98a654e369c762374fd3213d212cfc0251257e747da" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.36" +version = "0.4.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d1985d03709c53167ce907ff394f5316aa22cb4e12761295c5dc57dacb6297e" +checksum = "76bc14366121efc8dbb487ab05bcc9d346b3b5ec0eaa76e46594cabbe51762c0" dependencies = [ "cfg-if", "js-sys", @@ -3432,9 +3855,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14d6b024f1a526bb0234f52840389927257beb670610081360e5a03c5df9c258" +checksum = "a1f8823de937b71b9460c0c34e25f3da88250760bec0ebac694b49997550d726" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -3442,28 +3865,28 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e128beba882dd1eb6200e1dc92ae6c5dbaa4311aa7bb211ca035779e5efc39f8" +checksum = "e94f17b526d0a461a191c78ea52bbce64071ed5c04c9ffe424dcb38f74171bb7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.18", + "syn 2.0.53", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.86" +version = "0.2.92" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9d5b4305409d1fc9482fee2d7f9bcbf24b3972bf59817ef757e23982242a93" +checksum = "af190c94f2773fdb3729c55b007a722abb5384da03bc0986df4c289bf5567e96" [[package]] name = "web-sys" -version = "0.3.63" +version = "0.3.69" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bdd9ef4e984da1187bf8110c5cf5b845fbc87a23602cdf912386a76fcd3a7c2" +checksum = "77afa9a11836342370f4817622a2f0f418b134426d91a82dfb48f532d2ec13ef" dependencies = [ "js-sys", "wasm-bindgen", @@ -3492,177 +3915,163 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] -name = "windows" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e686886bc078bc1b0b600cac0147aadb815089b6e4da64016cbd754b6342700f" -dependencies = [ - "windows-targets 0.48.0", -] - -[[package]] -name = "windows-sys" -version = "0.42.0" +name = "windows-core" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows-targets 0.52.4", ] [[package]] name = "windows-sys" -version = "0.45.0" +version = "0.48.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75283be5efb2831d37ea142365f009c02ec203cd29a3ebecbc093d52315b66d0" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" dependencies = [ - "windows-targets 0.42.2", + "windows-targets 0.48.5", ] [[package]] name = "windows-sys" -version = "0.48.0" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" dependencies = [ - "windows-targets 0.48.0", + "windows-targets 0.52.4", ] [[package]] name = "windows-targets" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8e5180c00cd44c9b1c88adb3693291f1cd93605ded80c250a75d472756b4d071" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" dependencies = [ - "windows_aarch64_gnullvm 0.42.2", - "windows_aarch64_msvc 0.42.2", - "windows_i686_gnu 0.42.2", - "windows_i686_msvc 0.42.2", - "windows_x86_64_gnu 0.42.2", - "windows_x86_64_gnullvm 0.42.2", - "windows_x86_64_msvc 0.42.2", + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", ] [[package]] name = "windows-targets" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b1eb6f0cd7c80c79759c929114ef071b87354ce476d9d94271031c0497adfd5" +checksum = "7dd37b7e5ab9018759f893a1952c9420d060016fc19a472b4bb20d1bdd694d1b" dependencies = [ - "windows_aarch64_gnullvm 0.48.0", - "windows_aarch64_msvc 0.48.0", - "windows_i686_gnu 0.48.0", - "windows_i686_msvc 0.48.0", - "windows_x86_64_gnu 0.48.0", - "windows_x86_64_gnullvm 0.48.0", - "windows_x86_64_msvc 0.48.0", + "windows_aarch64_gnullvm 0.52.4", + "windows_aarch64_msvc 0.52.4", + "windows_i686_gnu 0.52.4", + "windows_i686_msvc 0.52.4", + "windows_x86_64_gnu 0.52.4", + "windows_x86_64_gnullvm 0.52.4", + "windows_x86_64_msvc 0.52.4", ] [[package]] name = "windows_aarch64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "597a5118570b68bc08d8d59125332c54f1ba9d9adeedeef5b99b02ba2b0698f8" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" [[package]] name = "windows_aarch64_gnullvm" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc" +checksum = "bcf46cf4c365c6f2d1cc93ce535f2c8b244591df96ceee75d8e83deb70a9cac9" [[package]] name = "windows_aarch64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e08e8864a60f06ef0d0ff4ba04124db8b0fb3be5776a5cd47641e942e58c4d43" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" [[package]] name = "windows_aarch64_msvc" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3" +checksum = "da9f259dd3bcf6990b55bffd094c4f7235817ba4ceebde8e6d11cd0c5633b675" [[package]] name = "windows_i686_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c61d927d8da41da96a81f029489353e68739737d3beca43145c8afec9a31a84f" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" [[package]] name = "windows_i686_gnu" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241" +checksum = "b474d8268f99e0995f25b9f095bc7434632601028cf86590aea5c8a5cb7801d3" [[package]] name = "windows_i686_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44d840b6ec649f480a41c8d80f9c65108b92d89345dd94027bfe06ac444d1060" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" [[package]] name = "windows_i686_msvc" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00" +checksum = "1515e9a29e5bed743cb4415a9ecf5dfca648ce85ee42e15873c3cd8610ff8e02" [[package]] name = "windows_x86_64_gnu" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8de912b8b8feb55c064867cf047dda097f92d51efad5b491dfb98f6bbb70cb36" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" [[package]] name = "windows_x86_64_gnu" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1" +checksum = "5eee091590e89cc02ad514ffe3ead9eb6b660aedca2183455434b93546371a03" [[package]] name = "windows_x86_64_gnullvm" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "26d41b46a36d453748aedef1486d5c7a85db22e56aff34643984ea85514e94a3" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" [[package]] name = "windows_x86_64_gnullvm" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953" +checksum = "77ca79f2451b49fa9e2af39f0747fe999fcda4f5e241b2898624dca97a1f2177" [[package]] name = "windows_x86_64_msvc" -version = "0.42.2" +version = "0.48.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9aec5da331524158c6d1a4ac0ab1541149c0b9505fde06423b02f5ef0106b9f0" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" [[package]] name = "windows_x86_64_msvc" -version = "0.48.0" +version = "0.52.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a" +checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8" [[package]] name = "winnow" -version = "0.4.6" +version = "0.5.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "61de7bac303dc551fe038e2b3cef0f571087a47571ea6e79a87692ac99b99699" +checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876" dependencies = [ "memchr", ] [[package]] name = "winreg" -version = "0.10.1" +version = "0.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d0f4e272c85def139476380b12f9ac60926689dd2e01d4923222f40580869d" +checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" dependencies = [ - "winapi", + "cfg-if", + "windows-sys 0.48.0", ] [[package]] @@ -3673,3 +4082,9 @@ checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" dependencies = [ "linked-hash-map", ] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" diff --git a/Cargo.toml b/Cargo.toml index 8b030140..91335895 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ url = "2.2" lambda_runtime = "0.8.0" lambda_http = "0.8.0" hyper = { version = "0.14.17", features = ["full"] } -hyper-tls = "*" +hyper-tls = "0.5" warp = { version = "0.3" } typetag = "0.2" @@ -61,7 +61,7 @@ array_tool = "1.0.3" gql_client = "1.0.4" # cynic GraphQL library -cynic = { version = "1.0", features = ["surf"] } +cynic = { version = "3", features = ["http-surf"] } surf = "2.0.0" reqwest = { version = "^0.11", features = ["json", "blocking"] } isahc = "1.7.2" diff --git a/justfile b/justfile index 68f66e32..7b7baebe 100644 --- a/justfile +++ b/justfile @@ -34,4 +34,4 @@ clean: # Get latest schema file. # npm install -g get-graphql-schema get-schema: - get-graphql-schema https://api.lens.dev/playground > src/upstream/lens/schema.graphql + get-graphql-schema https://api-v2.lens.dev/playground > src/upstream/lensv2/schema.graphql diff --git a/src/bin/standalone.rs b/src/bin/standalone.rs index 7dfcd162..5b36ffe0 100644 --- a/src/bin/standalone.rs +++ b/src/bin/standalone.rs @@ -22,7 +22,7 @@ async fn main() -> Result<()> { let log_subscriber = tracing_subscriber::FmtSubscriber::builder() .with_env_filter( EnvFilter::builder() - .with_default_directive(LevelFilter::INFO.into()) + .with_default_directive(LevelFilter::DEBUG.into()) .from_env_lossy() .add_directive("hyper=info".parse().unwrap()) .add_directive("tokio=info".parse().unwrap()), diff --git a/src/controller/tigergraphql/identity.rs b/src/controller/tigergraphql/identity.rs index 4b0708b0..187929c1 100644 --- a/src/controller/tigergraphql/identity.rs +++ b/src/controller/tigergraphql/identity.rs @@ -364,6 +364,7 @@ impl IdentityQuery { } Some(found) => { if found.is_outdated() { + // if true { event!( Level::DEBUG, ?platform, diff --git a/src/upstream/lensv2/mod.rs b/src/upstream/lensv2/mod.rs new file mode 100644 index 00000000..2fd15811 --- /dev/null +++ b/src/upstream/lensv2/mod.rs @@ -0,0 +1,155 @@ +#[cfg(test)] +mod tests; + +use crate::config::C; +use crate::error::Error; +use crate::tigergraph::edge::{Hold, Resolve}; +use crate::tigergraph::upsert::create_identity_domain_resolve_record; +use crate::tigergraph::upsert::create_identity_domain_reverse_resolve_record; +use crate::tigergraph::upsert::create_identity_to_identity_hold_record; +use crate::tigergraph::vertex::Identity; +use crate::upstream::{ + DataFetcher, DataSource, DomainNameSystem, Fetcher, Platform, Target, TargetProcessedList, +}; +use crate::util::{ + make_client, make_http_client, naive_now, option_naive_datetime_from_utc_string, parse_body, +}; +use async_trait::async_trait; +use cynic::QueryFragment; +use cynic::{http::SurfExt, QueryBuilder}; +use http::uri::InvalidUri; +use hyper::body; +use hyper::Method; +use hyper::{client::HttpConnector, Body, Client}; +use serde::{Deserialize, Serialize}; +use tracing::{debug, info, warn}; + +mod schema { + cynic::use_schema!("src/upstream/lensv2/schema.graphql"); +} + +// Query by Handles +#[derive(cynic::QueryVariables, Debug, Default)] +pub struct ProfilesRequestVariables { + pub handles: Option>, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic( + graphql_type = "Query", + schema_path = "src/upstream/lensv2/schema.graphql", + variables = "ProfilesRequestVariables" +)] +pub struct ProfileQueryByHandles { + #[arguments(request: { where: { handles: $handles}} )] + pub profiles: PaginatedProfileResult, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] +pub struct PaginatedProfileResult { + pub items: Vec, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] +pub struct Profile { + pub id: ProfileId, + pub handle: Option, + pub created_at: DateTime, + pub owned_by: NetworkAddress, + pub metadata: Option, + pub tx_hash: TxHash, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] +pub struct ProfileMetadata { + pub display_name: Option, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] +pub struct NetworkAddress { + pub address: EvmAddress, + pub chain_id: ChainId, +} + +#[derive(cynic::QueryFragment, Debug)] +#[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] +pub struct HandleInfo { + pub id: TokenId, + pub full_handle: Handle, + pub local_name: String, + pub namespace: String, + pub owned_by: EvmAddress, +} + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct ChainId(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct DateTime(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct EvmAddress(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct Handle(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct ProfileId(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct TokenId(pub String); + +#[derive(cynic::Scalar, Debug, Clone)] +pub struct TxHash(pub String); + +pub struct LensV2 {} + +#[async_trait] +impl Fetcher for LensV2 { + async fn fetch(target: &Target) -> Result { + if !Self::can_fetch(target) { + return Ok(vec![]); + } + + match target.platform()? { + Platform::Ethereum => fetch_by_wallet(target).await, + Platform::Lens => fetch_by_lens_handle(target).await, + _ => Ok(vec![]), + } + } + + fn can_fetch(target: &Target) -> bool { + target.in_platform_supported(vec![Platform::Ethereum, Platform::Lens]) + } +} + +async fn fetch_by_lens_handle(target: &Target) -> Result { + let target_var = target.identity()?; + let handle = target_var.trim_end_matches(".lens"); + let full_handle = format!("lens/{}", handle); + let operation = ProfileQueryByHandles::build(ProfilesRequestVariables { + handles: Some(vec![Handle(full_handle)]), + }); + println!("{}", operation.query); + let response = surf::post(C.upstream.lens_api.url.clone()) + .run_graphql(operation) + .await; + if response.is_err() { + warn!( + "LensV2 target {} | Failed to fetch: {}", + target, + response.unwrap_err(), + ); + return Ok(vec![]); + } + info!("Lens response {:?}", response); + Ok(vec![]) +} + +async fn fetch_by_wallet(target: &Target) -> Result { + todo!() +} diff --git a/src/upstream/lensv2/schema.graphql b/src/upstream/lensv2/schema.graphql new file mode 100644 index 00000000..cfc3c9b1 --- /dev/null +++ b/src/upstream/lensv2/schema.graphql @@ -0,0 +1,5173 @@ +"""Exposes a URL that specifies the behavior of this scalar.""" +directive @specifiedBy( + """The URL that specifies the behavior of this scalar.""" + url: String! +) on SCALAR + +"""The ABI json string""" +scalar ABIJson + +type ActedNotification { + id: UUID! + actions: [OpenActionProfileActed!]! + publication: AnyPublication! +} + +input ActOnOpenActionInput { + multirecipientCollectOpenAction: Boolean + simpleCollectOpenAction: Boolean + unknownOpenAction: UnknownOpenActionActRedeemInput +} + +""" +The lens manager will only support FREE open action modules, if you want your +unknown module allowed to be signless please contact us +""" +input ActOnOpenActionLensManagerInput { + simpleCollectOpenAction: Boolean + unknownOpenAction: UnknownOpenActionActRedeemInput +} + +input ActOnOpenActionLensManagerRequest { + for: PublicationId! + actOn: ActOnOpenActionLensManagerInput! + referrers: [OnchainReferrer!] = [] +} + +input ActOnOpenActionRequest { + for: PublicationId! + actOn: ActOnOpenActionInput! + referrers: [OnchainReferrer!] = [] +} + +""" +Condition that checks if the given on-chain contract function returns true. It only supports view functions +""" +type AdvancedContractCondition { + """The address and chain ID of the contract to call""" + contract: NetworkAddress! + + """The name of the function to call. Must be included in the provided abi""" + functionName: String! + + """ + The contract ABI. Has to be in human readable single string format containing + the signature of the function you want to call. See + https://docs.ethers.org/v5/api/utils/abi/fragments/#human-readable-abi for more info + """ + abi: String! + + """ + ABI encoded function parameters. In order to represent the address of the + person trying to decrypt, you *have* to use the string ":userAddress" as this + param represents the decrypting user address. If a param is an array or tuple, + it will be in stringified format. + """ + params: [String!]! + + """ + The check to perform on the result of the function. In case of boolean + outputs, "EQUALS" and "NOT_EQUALS" are supported. For BigNumber outputs, you + can use every comparison option + """ + comparison: ComparisonOperatorConditionType! + + """ + The value to compare the result of the function against. Can be "true", "false" or a number in string format + """ + value: String! +} + +input AlreadyInvitedCheckRequest { + for: EvmAddress! +} + +type Amount { + """The asset""" + asset: Asset! + + """ + Floating point number as string (e.g. 42.009837). It could have the entire + precision of the Asset or be truncated to the last significant decimal. + """ + value: String! + rate(request: RateRequest!): FiatAmount +} + +input AmountInput { + """The currency""" + currency: EvmAddress! + + """ + Floating point number as string (e.g. 42.009837). It could have the entire + precision of the Asset or be truncated to the last significant decimal. + """ + value: String! +} + +type AndCondition { + criteria: [ThirdTierCondition!]! +} + +union AnyPublication = Post | Comment | Mirror | Quote + +type App { + id: AppId! +} + +"""The app id""" +scalar AppId + +type ApprovedAllowanceAmountResult { + moduleName: String! + moduleContract: NetworkAddress! + allowance: Amount! +} + +type ApprovedAuthentication { + authorizationId: UUID! + browser: String + device: String + os: String + origin: URI + expiresAt: DateTime! + createdAt: DateTime! + updatedAt: DateTime! +} + +input ApprovedAuthenticationRequest { + limit: LimitType + cursor: Cursor +} + +input ApprovedModuleAllowanceAmountRequest { + currencies: [EvmAddress!]! + openActionModules: [OpenActionModuleType!] = [] + unknownOpenActionModules: [EvmAddress!] = [] + followModules: [FollowModuleType!] = [] + unknownFollowModules: [EvmAddress!] = [] + referenceModules: [ReferenceModuleType!] = [] + unknownReferenceModules: [EvmAddress!] = [] +} + +type ArticleMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + content: EncryptableMarkdown! + + """The title of the article. Empty if not set.""" + title: String! + attachments: [PublicationMetadataMedia!] +} + +union Asset = Erc20 + +type Audio { + mimeType: MimeType + uri: URI! +} + +type AudioMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + asset: PublicationMetadataMediaAudio! + attachments: [PublicationMetadataMedia!] + + """The title of the audio. Empty if not set.""" + title: String! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type AuthChallengeResult { + id: ChallengeId! + + """The text that needs to be signed""" + text: String! +} + +"""The authentication result""" +type AuthenticationResult { + """The access token""" + accessToken: Jwt! + + """The refresh token""" + refreshToken: Jwt! +} + +"""Blockchain data""" +scalar BlockchainData + +input BlockRequest { + profiles: [ProfileId!]! +} + +"""The broadcast id""" +scalar BroadcastId + +union BroadcastMomokaResult = CreateMomokaPublicationResult | RelayError + +input BroadcastRequest { + id: BroadcastId! + signature: Signature! +} + +input CanClaimRequest { + addresses: [EvmAddress!]! +} + +type CanClaimResult { + address: EvmAddress! + canClaim: Boolean! +} + +type CanDecryptResponse { + result: Boolean! + reasons: [DecryptFailReasonType!] + extraDetails: String +} + +"""The chain id""" +scalar ChainId + +"""The challenge id""" +scalar ChallengeId + +input ChallengeRequest { + """ + The profile ID to initiate a challenge - note if you do not pass this in you + be logging in as a wallet and wont be able to use all the features + """ + for: ProfileId + + """The Ethereum address that will sign the challenge""" + signedBy: EvmAddress! +} + +input ChangeProfileManager { + address: EvmAddress! + action: ChangeProfileManagerActionType! +} + +enum ChangeProfileManagerActionType { + REMOVE + ADD +} + +input ChangeProfileManagersRequest { + changeManagers: [ChangeProfileManager!] = [] + + """ + if you define this true will enable it and false will disable it within the + same tx as any other managers you are changing state for. Leave it blank if + you do not want to change its current state + """ + approveSignless: Boolean +} + +type CheckingInMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + location: EncryptableString! + geographic: GeoLocation + address: PhysicalAddress + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type ClaimableProfilesResult { + reserved: [ReservedClaimable!]! + canMintProfileWithFreeTextHandle: Boolean! +} + +type ClaimableTokensResult { + bonsai: Amount! +} + +enum ClaimableTokenType { + BONSAI +} + +enum ClaimProfileStatusType { + ALREADY_CLAIMED + CLAIM_FAILED + NOT_CLAIMED +} + +"""Claim profile with handle error reason type""" +enum ClaimProfileWithHandleErrorReasonType { + CONTRACT_EXECUTED + HANDLE_ALREADY_CLAIMED + CLAIM_NOT_LINKED_TO_WALLET + CLAIM_TIME_EXPIRED + CLAIM_NOT_FOUND + HANDLE_ALREADY_EXISTS + HANDLE_RESERVED + CAN_NOT_FREE_TEXT +} + +type ClaimProfileWithHandleErrorResult { + reason: ClaimProfileWithHandleErrorReasonType! +} + +input ClaimProfileWithHandleRequest { + id: String + freeTextHandle: CreateHandle + followModule: FollowModuleInput +} + +union ClaimProfileWithHandleResult = RelaySuccess | ClaimProfileWithHandleErrorResult + +input ClaimTokensRequest { + for: ClaimableTokenType! +} + +input CollectActionModuleInput { + multirecipientCollectOpenAction: MultirecipientFeeCollectModuleInput + simpleCollectOpenAction: SimpleCollectOpenActionModuleInput +} + +type CollectCondition { + publicationId: PublicationId! + thisPublication: Boolean! +} + +enum CollectOpenActionModuleType { + SimpleCollectOpenActionModule + MultirecipientFeeCollectOpenActionModule + LegacyLimitedFeeCollectModule + LegacyFeeCollectModule + LegacyLimitedTimedFeeCollectModule + LegacyTimedFeeCollectModule + LegacyAaveFeeCollectModule + LegacyRevertCollectModule + LegacyFreeCollectModule + LegacyMultirecipientFeeCollectModule + LegacyERC4626FeeCollectModule + LegacySimpleCollectModule + UnknownOpenActionModule +} + +type Comment { + id: PublicationId! + publishedOn: App + isHidden: Boolean! + momoka: MomokaInfo + txHash: TxHash + createdAt: DateTime! + + """ + Signifies whether this comment has been hidden by the author of its parent publication + """ + hiddenByAuthor: Boolean! + by: Profile! + stats(request: PublicationStatsInput): PublicationStats! + operations: PublicationOperations! + metadata: PublicationMetadata! + isEncrypted: Boolean! + openActionModules: [OpenActionModule!]! + referenceModule: ReferenceModule + profilesMentioned: [ProfileMentioned!]! + hashtagsMentioned: [String!]! + root: CommentablePublication! + commentOn: PrimaryPublication! + firstComment: Comment +} + +union CommentablePublication = Post | Quote + +type CommentNotification { + id: UUID! + comment: Comment! +} + +enum CommentRankingFilterType { + ALL + NONE_RELEVANT + RELEVANT +} + +enum ComparisonOperatorConditionType { + EQUAL + NOT_EQUAL + GREATER_THAN + GREATER_THAN_OR_EQUAL + LESS_THAN + LESS_THAN_OR_EQUAL +} + +"""The content encryption key value""" +scalar ContentEncryptionKey + +type CreateActOnOpenActionBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateActOnOpenActionEIP712TypedData! +} + +type CreateActOnOpenActionEIP712TypedData { + """The types""" + types: CreateActOnOpenActionEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateActOnOpenActionEIP712TypedDataValue! +} + +type CreateActOnOpenActionEIP712TypedDataTypes { + Act: [EIP712TypedDataField!]! +} + +type CreateActOnOpenActionEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + publicationActedProfileId: ProfileId! + publicationActedId: OnchainPublicationId! + actorProfileId: ProfileId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + actionModuleAddress: EvmAddress! + actionModuleData: BlockchainData! +} + +type CreateBlockProfilesBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateBlockProfilesEIP712TypedData! +} + +type CreateBlockProfilesEIP712TypedData { + """The types""" + types: CreateBlockProfilesEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateBlockProfilesEIP712TypedDataValue! +} + +type CreateBlockProfilesEIP712TypedDataTypes { + SetBlockStatus: [EIP712TypedDataField!]! +} + +type CreateBlockProfilesEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + byProfileId: ProfileId! + idsOfProfilesToSetBlockStatus: [ProfileId!]! + blockStatus: [Boolean!]! +} + +type CreateChangeProfileManagersBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateChangeProfileManagersEIP712TypedData! +} + +type CreateChangeProfileManagersEIP712TypedData { + """The types""" + types: CreateChangeProfileManagersEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateChangeProfileManagersEIP712TypedDataValue! +} + +type CreateChangeProfileManagersEIP712TypedDataTypes { + ChangeDelegatedExecutorsConfig: [EIP712TypedDataField!]! +} + +type CreateChangeProfileManagersEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + delegatorProfileId: ProfileId! + delegatedExecutors: [EvmAddress!]! + approvals: [Boolean!]! + configNumber: Int! + switchToGivenConfig: Boolean! +} + +type CreateFollowBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateFollowEIP712TypedData! +} + +"""The create follow eip 712 typed data""" +type CreateFollowEIP712TypedData { + """The types""" + types: CreateFollowEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateFollowEIP712TypedDataValue! +} + +"""The create follow eip 712 typed data types""" +type CreateFollowEIP712TypedDataTypes { + Follow: [EIP712TypedDataField!]! +} + +"""The create follow eip 712 typed data value""" +type CreateFollowEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + followerProfileId: ProfileId! + idsOfProfilesToFollow: [ProfileId!]! + followTokenIds: [TokenId!]! + datas: [BlockchainData!]! +} + +"""Create handle value""" +scalar CreateHandle + +type CreateLegacyCollectBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateLegacyCollectEIP712TypedData! +} + +type CreateLegacyCollectEIP712TypedData { + """The types""" + types: CreateLegacyCollectEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateLegacyCollectEIP712TypedDataValue! +} + +type CreateLegacyCollectEIP712TypedDataTypes { + CollectLegacy: [EIP712TypedDataField!]! +} + +type CreateLegacyCollectEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + publicationCollectedProfileId: ProfileId! + publicationCollectedId: OnchainPublicationId! + collectorProfileId: ProfileId! + referrerProfileId: ProfileId! + referrerPubId: OnchainPublicationId! + collectModuleData: BlockchainData! +} + +type CreateLinkHandleToProfileBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateLinkHandleToProfileEIP712TypedData! +} + +type CreateLinkHandleToProfileEIP712TypedData { + """The types""" + types: CreateLinkHandleToProfileEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateLinkHandleToProfileEIP712TypedDataValue! +} + +type CreateLinkHandleToProfileEIP712TypedDataTypes { + Link: [EIP712TypedDataField!]! +} + +type CreateLinkHandleToProfileEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + handleId: TokenId! +} + +type CreateMomokaCommentBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateMomokaCommentEIP712TypedData! +} + +type CreateMomokaCommentEIP712TypedData { + """The types""" + types: CreateMomokaCommentEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateMomokaCommentEIP712TypedDataValue! +} + +type CreateMomokaCommentEIP712TypedDataTypes { + Comment: [EIP712TypedDataField!]! +} + +type CreateMomokaCommentEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateMomokaMirrorBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateMomokaMirrorEIP712TypedData! +} + +type CreateMomokaMirrorEIP712TypedData { + """The types""" + types: CreateMomokaMirrorEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateMomokaMirrorEIP712TypedDataValue! +} + +type CreateMomokaMirrorEIP712TypedDataTypes { + Mirror: [EIP712TypedDataField!]! +} + +type CreateMomokaMirrorEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + metadataURI: String! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! +} + +type CreateMomokaPostBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateMomokaPostEIP712TypedData! +} + +type CreateMomokaPostEIP712TypedData { + """The types""" + types: CreateMomokaPostEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateMomokaPostEIP712TypedDataValue! +} + +type CreateMomokaPostEIP712TypedDataTypes { + Post: [EIP712TypedDataField!]! +} + +type CreateMomokaPostEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateMomokaPublicationResult { + id: PublicationId! + proof: MomokaProof! + momokaId: MomokaId! +} + +type CreateMomokaQuoteBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateMomokaQuoteEIP712TypedData! +} + +type CreateMomokaQuoteEIP712TypedData { + """The types""" + types: CreateMomokaQuoteEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateMomokaQuoteEIP712TypedDataValue! +} + +type CreateMomokaQuoteEIP712TypedDataTypes { + Quote: [EIP712TypedDataField!]! +} + +type CreateMomokaQuoteEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateOnchainCommentBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateOnchainCommentEIP712TypedData! +} + +type CreateOnchainCommentEIP712TypedData { + """The types""" + types: CreateOnchainCommentEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateOnchainCommentEIP712TypedDataValue! +} + +type CreateOnchainCommentEIP712TypedDataTypes { + Comment: [EIP712TypedDataField!]! +} + +type CreateOnchainCommentEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateOnchainMirrorBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateOnchainMirrorEIP712TypedData! +} + +type CreateOnchainMirrorEIP712TypedData { + """The types""" + types: CreateOnchainMirrorEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateOnchainMirrorEIP712TypedDataValue! +} + +type CreateOnchainMirrorEIP712TypedDataTypes { + Mirror: [EIP712TypedDataField!]! +} + +type CreateOnchainMirrorEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + metadataURI: String! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! +} + +type CreateOnchainPostBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateOnchainPostEIP712TypedData! +} + +type CreateOnchainPostEIP712TypedData { + """The types""" + types: CreateOnchainPostEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateOnchainPostEIP712TypedDataValue! +} + +type CreateOnchainPostEIP712TypedDataTypes { + Post: [EIP712TypedDataField!]! +} + +type CreateOnchainPostEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateOnchainQuoteBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateOnchainQuoteEIP712TypedData! +} + +type CreateOnchainQuoteEIP712TypedData { + """The types""" + types: CreateOnchainQuoteEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateOnchainQuoteEIP712TypedDataValue! +} + +type CreateOnchainQuoteEIP712TypedDataTypes { + Quote: [EIP712TypedDataField!]! +} + +type CreateOnchainQuoteEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + contentURI: URI! + pointedProfileId: ProfileId! + pointedPubId: OnchainPublicationId! + referrerProfileIds: [ProfileId!]! + referrerPubIds: [OnchainPublicationId!]! + referenceModuleData: BlockchainData! + actionModules: [EvmAddress!]! + actionModulesInitDatas: [BlockchainData!]! + referenceModule: EvmAddress! + referenceModuleInitData: BlockchainData! +} + +type CreateOnchainSetProfileMetadataBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateOnchainSetProfileMetadataEIP712TypedData! +} + +type CreateOnchainSetProfileMetadataEIP712TypedData { + """The types""" + types: CreateOnchainSetProfileMetadataEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateOnchainSetProfileMetadataEIP712TypedDataValue! +} + +type CreateOnchainSetProfileMetadataEIP712TypedDataTypes { + SetProfileMetadataURI: [EIP712TypedDataField!]! +} + +type CreateOnchainSetProfileMetadataEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + metadataURI: URI! +} + +type CreateSetFollowModuleBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateSetFollowModuleEIP712TypedData! +} + +type CreateSetFollowModuleEIP712TypedData { + """The types""" + types: CreateSetFollowModuleEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateSetFollowModuleEIP712TypedDataValue! +} + +type CreateSetFollowModuleEIP712TypedDataTypes { + SetFollowModule: [EIP712TypedDataField!]! +} + +type CreateSetFollowModuleEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + followModule: EvmAddress! + followModuleInitData: BlockchainData! +} + +type CreateUnblockProfilesBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateUnblockProfilesEIP712TypedData! +} + +type CreateUnblockProfilesEIP712TypedData { + """The types""" + types: CreateUnblockProfilesEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateUnblockProfilesEIP712TypedDataValue! +} + +type CreateUnblockProfilesEIP712TypedDataTypes { + SetBlockStatus: [EIP712TypedDataField!]! +} + +type CreateUnblockProfilesEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + byProfileId: ProfileId! + idsOfProfilesToSetBlockStatus: [ProfileId!]! + blockStatus: [Boolean!]! +} + +type CreateUnfollowBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateUnfollowEIP712TypedData! +} + +type CreateUnfollowEIP712TypedData { + """The types""" + types: CreateUnfollowEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateUnfollowEIP712TypedDataValue! +} + +type CreateUnfollowEIP712TypedDataTypes { + Unfollow: [EIP712TypedDataField!]! +} + +type CreateUnfollowEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + unfollowerProfileId: ProfileId! + idsOfProfilesToUnfollow: [ProfileId!]! +} + +type CreateUnlinkHandleFromProfileBroadcastItemResult { + """This broadcast item ID""" + id: BroadcastId! + + """The date the broadcast item expiries""" + expiresAt: DateTime! + + """The typed data""" + typedData: CreateUnlinkHandleFromProfileEIP712TypedData! +} + +type CreateUnlinkHandleFromProfileEIP712TypedData { + """The types""" + types: CreateUnlinkHandleFromProfileEIP712TypedDataTypes! + + """The typed data domain""" + domain: EIP712TypedDataDomain! + + """The values""" + value: CreateUnlinkHandleFromProfileEIP712TypedDataValue! +} + +type CreateUnlinkHandleFromProfileEIP712TypedDataTypes { + Unlink: [EIP712TypedDataField!]! +} + +type CreateUnlinkHandleFromProfileEIP712TypedDataValue { + nonce: Nonce! + deadline: UnixTimestamp! + profileId: ProfileId! + handleId: TokenId! +} + +"""Cursor custom scalar type""" +scalar Cursor + +enum CustomFiltersType { + GARDENERS +} + +""" +The javascript `Date` as string. Type represents date and time as the ISO Date string. +""" +scalar DateTime + +enum DecryptFailReasonType { + NOT_LOGGED_IN + UNAUTHORIZED_ADDRESS + DOES_NOT_OWN_NFT + DOES_NOT_OWN_PROFILE + DOES_NOT_FOLLOW_PROFILE + HAS_NOT_COLLECTED_PUBLICATION + UNAUTHORIZED_BALANCE + PROFILE_DOES_NOT_EXIST + MISSING_ENCRYPTION_PARAMS + FOLLOW_NOT_FINALISED_ON_CHAIN + COLLECT_NOT_FINALISED_ON_CHAIN + CAN_NOT_DECRYPT + PUBLICATION_IS_NOT_GATED + UNSUPPORTED +} + +input DefaultProfileRequest { + for: EvmAddress! +} + +input DegreesOfSeparationReferenceModuleInput { + commentsRestricted: Boolean! + mirrorsRestricted: Boolean! + quotesRestricted: Boolean! + degreesOfSeparation: Int! + + """ + You can set the degree to follow someone elses graph, if you leave blank it use your profile + """ + sourceProfileId: ProfileId +} + +type DegreesOfSeparationReferenceModuleSettings { + type: ReferenceModuleType! + contract: NetworkAddress! + + """Applied to comments""" + commentsRestricted: Boolean! + + """Applied to mirrors""" + mirrorsRestricted: Boolean! + + """Applied to quotes""" + quotesRestricted: Boolean! + + """Who the degree of separation is applied to""" + sourceProfileId: ProfileId! + + """Degrees of separation""" + degreesOfSeparation: Int! +} + +input DismissRecommendedProfilesRequest { + dismiss: [ProfileId!]! +} + +"""The eip 712 typed data domain""" +type EIP712TypedDataDomain { + """The name of the typed data domain""" + name: String! + + """The chainId""" + chainId: ChainId! + + """The version""" + version: String! + + """The verifying contract""" + verifyingContract: EvmAddress! +} + +"""The eip 712 typed data field""" +type EIP712TypedDataField { + """The name of the typed data field""" + name: String! + + """The type of the typed data field""" + type: String! +} + +type EmbedMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + embed: EncryptableURI! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type EncryptableAudio { + mimeType: MimeType + uri: EncryptableURI! +} + +type EncryptableAudioSet { + raw: EncryptableAudio! + optimized: Audio +} + +""" +An ISO-8610 DateTime that could also be encrypted in some circumstances. Check +parent nodes to determine if the value is encrypted or ready to use. +""" +scalar EncryptableDateTime + +type EncryptableImage { + """MIME type of the image""" + mimeType: MimeType + + """Width of the image""" + width: Int + + """Height of the image""" + height: Int + uri: EncryptableURI! +} + +type EncryptableImageSet { + raw: EncryptableImage! + optimized: Image + transformed(request: ImageTransform!): Image +} + +""" +A Markdown text that could also be encrypted in some circumstances. Check parent +nodes to determine if the value is encrypted or ready to use. +""" +scalar EncryptableMarkdown + +""" +A string that could also be encrypted in some circumstances. Check parent nodes +to determine if the value is encrypted or ready to use. +""" +scalar EncryptableString + +""" +The tx hash that could also be encrypted in some circumstances. Check parent +nodes to determine if the value is encrypted or ready to use. +""" +scalar EncryptableTxHash + +""" +A URI value that could also be encrypted in some circumstances. Check parent +nodes to determine if the value is encrypted or ready to use. +""" +scalar EncryptableURI + +type EncryptableVideo { + mimeType: MimeType + uri: EncryptableURI! +} + +type EncryptableVideoSet { + raw: EncryptableVideo! + optimized: Video +} + +""" +Define a path of a possibly encrypted property in the Publication Metadata +""" +scalar EncryptedPath + +"""The ens name""" +scalar Ens + +type EnsOnchainIdentity { + """The default ens mapped to this address""" + name: Ens +} + +type EoaOwnershipCondition { + address: EvmAddress! +} + +"""The erc20 type""" +type Erc20 { + """Name of the symbol""" + name: String! + + """Symbol for the token""" + symbol: String! + + """Decimal places for the token""" + decimals: Int! + + """The erc20 address""" + contract: NetworkAddress! +} + +type Erc20OwnershipCondition { + amount: Amount! + condition: ComparisonOperatorConditionType! +} + +type EventMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + geographic: GeoLocation + address: PhysicalAddress + startsAt: EncryptableDateTime! + endsAt: EncryptableDateTime! + links: [EncryptableURI!] + location: EncryptableString! + attachments: [PublicationMetadataMedia!] + + """The optional title of the event. Empty if not set.""" + title: String! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +"""evm address type""" +scalar EvmAddress + +"""Possible sort criteria for exploring profiles""" +enum ExploreProfilesOrderByType { + CREATED_ON + MOST_FOLLOWERS + LATEST_CREATED + MOST_POSTS + MOST_COMMENTS + MOST_MIRRORS + MOST_PUBLICATION + MOST_COLLECTS +} + +input ExploreProfilesRequest { + limit: LimitType + cursor: Cursor + + """Filtering criteria for exploring profiles""" + where: ExploreProfilesWhere + + """Order criteria for exploring profiles""" + orderBy: ExploreProfilesOrderByType! +} + +input ExploreProfilesWhere { + """Filter profiles created since the specified timestamp""" + since: UnixTimestamp + + """Array of custom filters for exploring profiles""" + customFilters: [CustomFiltersType!] = [] +} + +union ExplorePublication = Post | Quote + +input ExplorePublicationRequest { + limit: LimitType + cursor: Cursor + where: ExplorePublicationsWhere + orderBy: ExplorePublicationsOrderByType! +} + +enum ExplorePublicationsOrderByType { + TOP_COMMENTED + TOP_COLLECTED_OPEN_ACTION + TOP_MIRRORED + TOP_QUOTED + LATEST + TOP_REACTED + LENS_CURATED +} + +input ExplorePublicationsWhere { + since: UnixTimestamp + publicationTypes: [ExplorePublicationType!] + customFilters: [CustomFiltersType!] + metadata: PublicationMetadataFilters +} + +enum ExplorePublicationType { + POST + QUOTE +} + +enum FeedEventItemType { + POST + COMMENT + MIRROR + QUOTE + COLLECT + REACTION + ACTED +} + +union FeedHighlight = Post | Quote + +input FeedHighlightsRequest { + limit: LimitType + cursor: Cursor + where: FeedHighlightsWhere +} + +input FeedHighlightsWhere { + metadata: PublicationMetadataFilters + for: ProfileId +} + +type FeedItem { + id: String! + root: PrimaryPublication! + mirrors: [Mirror!]! + acted: [OpenActionProfileActed!]! + reactions: [ReactionEvent!]! + comments: [Comment!]! +} + +input FeedRequest { + cursor: Cursor + where: FeedWhere +} + +input FeedWhere { + feedEventItemTypes: [FeedEventItemType!] + metadata: PublicationMetadataFilters + for: ProfileId + customFilters: [CustomFiltersType!] +} + +input FeeFollowModuleInput { + amount: AmountInput! + recipient: EvmAddress! +} + +input FeeFollowModuleRedeemInput { + amount: AmountInput! +} + +type FeeFollowModuleSettings { + type: FollowModuleType! + contract: NetworkAddress! + + """The amount info""" + amount: Amount! + + """The module recipient address""" + recipient: EvmAddress! +} + +type Fiat { + name: String! + symbol: String! + decimals: Int! +} + +type FiatAmount { + asset: Fiat! + value: String! +} + +input Follow { + profileId: ProfileId! + followModule: FollowModuleRedeemInput +} + +type FollowCondition { + follow: ProfileId! +} + +input FollowersRequest { + limit: LimitType + cursor: Cursor + of: ProfileId! + + """ + The order by which to sort the profiles - note if your looking at your own followers it always be DESC + """ + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input FollowingRequest { + limit: LimitType + cursor: Cursor + for: ProfileId! + + """ + The order by which to sort the profiles - note if your looking at your own following it always be DESC + """ + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input FollowLensManager { + profileId: ProfileId! + followModule: FollowLensManagerModuleRedeemInput +} + +""" +The lens manager will only support follow modules which are verified here - https://github.com/lens-protocol/verified-modules/blob/master/follow-modules.json +""" +input FollowLensManagerModuleRedeemInput { + unknownFollowModule: UnknownFollowModuleRedeemInput +} + +input FollowLensManagerRequest { + follow: [FollowLensManager!]! +} + +union FollowModule = FeeFollowModuleSettings | RevertFollowModuleSettings | UnknownFollowModuleSettings + +input FollowModuleInput { + feeFollowModule: FeeFollowModuleInput + revertFollowModule: Boolean + freeFollowModule: Boolean + unknownFollowModule: UnknownFollowModuleInput +} + +input FollowModuleRedeemInput { + feeFollowModule: FeeFollowModuleRedeemInput + unknownFollowModule: UnknownFollowModuleRedeemInput +} + +enum FollowModuleType { + FeeFollowModule + RevertFollowModule + UnknownFollowModule +} + +type FollowNotification { + id: UUID! + followers: [Profile!]! +} + +type FollowOnlyReferenceModuleSettings { + type: ReferenceModuleType! + contract: NetworkAddress! +} + +type FollowPaidAction { + latestActed: [LatestActed!]! + followed: Profile! +} + +input FollowRequest { + follow: [Follow!]! +} + +input FollowRevenueRequest { + for: ProfileId! +} + +type FollowRevenueResult { + revenues: [RevenueAggregate!]! +} + +input FollowStatusBulk { + follower: ProfileId! + profileId: ProfileId! +} + +input FollowStatusBulkRequest { + followInfos: [FollowStatusBulk!]! +} + +type FollowStatusBulkResult { + follower: ProfileId! + profileId: ProfileId! + status: OptimisticStatusResult! +} + +input FraudReasonInput { + reason: PublicationReportingReason! + subreason: PublicationReportingFraudSubreason! +} + +input GenerateModuleCurrencyApprovalDataRequest { + allowance: AmountInput! + module: ModuleCurrencyApproval! +} + +type GenerateModuleCurrencyApprovalResult { + to: EvmAddress! + from: EvmAddress! + data: BlockchainData! +} + +type GeoLocation { + """ + The raw Geo URI of the location. If encrypted `latitude` and `longitude` will be `null` + """ + rawURI: EncryptableURI! + + """`null` when `rawURI` is encrypted""" + latitude: Float + + """`null` when `rawURI` is encrypted""" + longitude: Float +} + +type GetModuleMetadataResult { + metadata: ModuleMetadata! + moduleType: ModuleType! + + """True if the module is deemed as safe""" + verified: Boolean! + + """ + True if the module can be signedless and use lens manager without a signature + """ + signlessApproved: Boolean! + + """ + True if the module can be sponsored through gasless so the user does not need to pay for gas + """ + sponsoredApproved: Boolean! +} + +input GetProfileMetadataArgs { + """The app id to query the profile's metadata""" + appId: AppId + + """ + If true, will fallback to global profile metadata, if there is no metadata set for that specific app id + """ + useFallback: Boolean = true +} + +""" +The handle attached to a profile - note its it own NFT and always identified by its full name +""" +scalar Handle + +type HandleGuardianResult { + protected: Boolean! + cooldownEndsOn: DateTime +} + +type HandleInfo { + """The handle nft token id""" + id: TokenId! + + """The full handle - namespace/localname""" + fullHandle: Handle! + + """The namespace""" + namespace: String! + + """The localname""" + localName: String! + + """ + The suggested format to use on UI for ease but you can innovate and slice and dice as you want + """ + suggestedFormatted: SuggestedFormattedHandle! + + """If null its not linked to anything""" + linkedTo: HandleLinkedTo + ownedBy: EvmAddress! + guardian: HandleGuardianResult! +} + +type HandleLinkedTo { + """The contract address it is linked to""" + contract: NetworkAddress! + + """The nft token id it is linked to (this can be the profile Id)""" + nftTokenId: TokenId! +} + +input HandleToAddressRequest { + """The full handle - namespace/localname""" + handle: Handle! +} + +enum HiddenCommentsType { + SHOW + HIDE + HIDDEN_ONLY +} + +input HideCommentRequest { + """ + The comment to hide. It has to be under a publication made by the user making + the request. If already hidden, nothing will happen. + """ + for: PublicationId! +} + +input HideManagedProfileRequest { + """The profile to hide""" + profileId: ProfileId! +} + +input HidePublicationRequest { + for: PublicationId! +} + +input IdKitPhoneVerifyWebhookRequest { + sharedSecret: String! + worldcoin: WorldcoinPhoneVerifyWebhookRequest +} + +enum IdKitPhoneVerifyWebhookResultStatusType { + SUCCESS + ALREADY_VERIFIED +} + +input IllegalReasonInput { + reason: PublicationReportingReason! + subreason: PublicationReportingIllegalSubreason! +} + +type Image { + """MIME type of the image""" + mimeType: MimeType + + """Width of the image""" + width: Int + + """Height of the image""" + height: Int + uri: URI! +} + +type ImageMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + asset: PublicationMetadataMediaImage! + attachments: [PublicationMetadataMedia!] + + """The title of the image. Empty if not set.""" + title: String! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type ImageSet { + raw: Image! + optimized: Image + transformed(request: ImageTransform!): Image +} + +"""The image size transform""" +scalar ImageSizeTransform + +input ImageTransform { + """Set the transformed image's width""" + width: ImageSizeTransform = "auto" + + """Set the transformed image's height""" + height: ImageSizeTransform = "auto" + + """ + Set if you want to keep the image's original aspect ratio. True by default. If + explicitly set to false, the image will stretch based on the width and height values. + """ + keepAspectRatio: Boolean = true +} + +input InternalAddCuratedTagRequest { + secret: String! + hhh: String! + ttt: String! +} + +input InternalAddInvitesRequest { + secret: String! + p: ProfileId! + n: Int! +} + +input InternalAllowDomainRequest { + secret: String! + domain: URI! +} + +input InternalAllowedDomainsRequest { + secret: String! +} + +input InternalBoostProfileRequest { + secret: String! + p: ProfileId + s: Int! + h: Handle +} + +input InternalBoostScoreRequest { + secret: String! + p: ProfileId + h: Handle +} + +input InternalClaimRequest { + secret: String! + address: EvmAddress! + handle: CreateHandle + freeTextHandle: Boolean + overrideTradeMark: Boolean! + overrideAlreadyClaimed: Boolean! +} + +input InternalClaimStatusRequest { + secret: String! + address: EvmAddress! +} + +input InternalCuratedHandlesRequest { + secret: String! +} + +input InternalCuratedTagsRequest { + secret: String! + hhh: String! +} + +input InternalCuratedUpdateRequest { + secret: String! + + """The full handle - namespace/localname""" + handle: Handle! + remove: Boolean! +} + +input InternalInvitesRequest { + secret: String! + p: ProfileId! +} + +input InternalMintHandleAndProfileRequest { + secret: String! + h: String! + a: EvmAddress! +} + +input InternalNftIndexRequest { + secret: String! + n: [Nfi!]! +} + +input InternalNftVerifyRequest { + secret: String! + n: [Nfi!]! +} + +input InternalPaymentHandleInfoRequest { + secret: String! + p: String! +} + +input InternalProfileStatusRequest { + secret: String! + hhh: String! +} + +input InternalRemoveCuratedTagRequest { + secret: String! + hhh: String! + ttt: String! +} + +input InternalUpdateModuleOptionsRequest { + secret: String! + v: Boolean + lma: Boolean + i: EvmAddress! + t: ModuleType! +} + +input InternalUpdateProfileStatusRequest { + secret: String! + hhh: String! + ss: Boolean! + dd: Boolean! +} + +type InvitedResult { + by: EvmAddress! @deprecated(reason: "Profiles hand out invites on Lens V2 so this is unnecessary information. Will always be the dead address.") + addressInvited: EvmAddress! + profileMinted: Profile + when: DateTime! +} + +input InviteRequest { + invites: [EvmAddress!]! +} + +type IPHResult { + hs: Boolean! + h: Handle + hda: Boolean! +} + +"""The jwt token""" +scalar Jwt + +type KnownCollectOpenActionResult { + type: CollectOpenActionModuleType! +} + +type KnownSupportedModule { + moduleName: String! + contract: NetworkAddress! + moduleInput: [ModuleInfo!]! + redeemInput: [ModuleInfo!]! + returnDataInput: [ModuleInfo!]! +} + +input LastLoggedInProfileRequest { + for: EvmAddress! +} + +type LatestActed { + profile: Profile! + actedAt: DateTime! + txHash: TxHash! +} + +input LatestPaidActionsFilter { + openActionPublicationMetadataFilters: PublicationMetadataFilters + openActionFilters: [OpenActionFilter!] +} + +type LatestPaidActionsResult { + items: [PaidAction!]! + pageInfo: PaginatedResultInfo! +} + +type LegacyAaveFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect module amount info""" + amount: Amount! + + """The maximum number of collects for this publication.""" + collectLimit: String + + """The referral fee associated with this publication.""" + referralFee: Float! + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime + + """Recipient of collect fees.""" + recipient: EvmAddress! +} + +input LegacyCollectRequest { + on: PublicationId! + referrer: PublicationId +} + +type LegacyDegreesOfSeparationReferenceModuleSettings { + type: ReferenceModuleType! + contract: NetworkAddress! + + """Applied to comments""" + commentsRestricted: Boolean! + + """Applied to mirrors""" + mirrorsRestricted: Boolean! + + """Degrees of separation""" + degreesOfSeparation: Int! +} + +type LegacyERC4626FeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The ERC4626 vault address""" + vault: NetworkAddress! + + """The collect module amount info""" + amount: Amount! + + """The recipient of the ERC4626 vault shares""" + recipient: EvmAddress! + + """The maximum number of collects for this publication.""" + collectLimit: String + + """The referral fee associated with this publication.""" + referralFee: Float! + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime +} + +type LegacyFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The collect module amount info""" + amount: Amount! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """Follower only""" + followerOnly: Boolean! +} + +type LegacyFollowOnlyReferenceModuleSettings { + type: ReferenceModuleType! + contract: NetworkAddress! +} + +type LegacyFreeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """Follower only""" + followerOnly: Boolean! +} + +type LegacyLimitedFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The collect module limit.""" + collectLimit: String + + """The collect module amount info""" + amount: Amount! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """Follower only""" + followerOnly: Boolean! +} + +type LegacyLimitedTimedFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The collect module limit""" + collectLimit: String + + """The collect module amount info""" + amount: Amount! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """Follower only""" + followerOnly: Boolean! + + """The collect module end timestamp""" + endTimestamp: DateTime! +} + +type LegacyMultirecipientFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The collect module amount info""" + amount: Amount! + + """The maximum number of collects for this publication.""" + collectLimit: String + + """The referral fee associated with this publication.""" + referralFee: Float! + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime + + """Recipient of collect fees.""" + recipients: [RecipientDataOutput!]! +} + +type LegacyRevertCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! +} + +type LegacySimpleCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """ + The collect module amount info. `Amount.value = 0` in case of free collects. + """ + amount: Amount! + + """The maximum number of collects for this publication.""" + collectLimit: String + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime +} + +type LegacyTimedFeeCollectModuleSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The collect module amount info""" + amount: Amount! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """Follower only""" + followerOnly: Boolean! + + """The collect module end timestamp""" + endTimestamp: DateTime! +} + +type LensProfileManagerRelayError { + reason: LensProfileManagerRelayErrorReasonType! +} + +enum LensProfileManagerRelayErrorReasonType { + NOT_SPONSORED + NO_LENS_MANAGER_ENABLED + RATE_LIMITED + FAILED + APP_NOT_ALLOWED + REQUIRES_SIGNATURE +} + +union LensProfileManagerRelayResult = RelaySuccess | LensProfileManagerRelayError + +enum LensTransactionFailureType { + REVERTED + METADATA_ERROR +} + +type LensTransactionResult { + status: LensTransactionStatusType! + txHash: TxHash! + reason: LensTransactionFailureType + extraInfo: String +} + +input LensTransactionStatusRequest { + """Transaction hash for retrieving transaction status""" + forTxHash: TxHash + + """ + Transaction ID for retrieving transaction status when using the broadcaster + """ + forTxId: TxId +} + +enum LensTransactionStatusType { + PROCESSING + OPTIMISTICALLY_UPDATED + COMPLETE + FAILED +} + +enum LimitType { + Ten + TwentyFive + Fifty +} + +input LinkHandleToProfileRequest { + """The full handle - namespace/localname""" + handle: Handle! +} + +type LinkMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + sharingLink: EncryptableURI! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type LiveStreamMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + startsAt: EncryptableDateTime! + + """Optional end time. Empty if not set.""" + endsAt: EncryptableDateTime! + playbackURL: EncryptableURI! + liveURL: EncryptableURI! + checkLiveAPI: EncryptableURI + + """The title of the live-stream. Empty if not set.""" + title: String! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! + attachments: [PublicationMetadataMedia!] +} + +"""The locale""" +scalar Locale + +"""Managed profile visibility type""" +enum ManagedProfileVisibility { + NONE_HIDDEN + HIDDEN_ONLY + ALL +} + +"""The markdown value""" +scalar Markdown + +type MarketplaceMetadata { + description: Markdown + externalURL: URL + name: String + attributes: [PublicationMarketplaceMetadataAttribute!] + image: ImageSet + animationUrl: URI +} + +enum MarketplaceMetadataAttributeDisplayType { + NUMBER + STRING + DATE +} + +type MentionNotification { + id: UUID! + publication: PrimaryPublication! +} + +type MetadataAttribute { + """ + The type of the attribute. When: + - BOOLEAN: the `value` is `true`|`false` + - DATE: the `value` is a valid ISO 8601 date string + - NUMBER: the `value` is a valid JS number as string + - STRING: the `value` is a string. + - JSON: the `value` is a valid JSON serialized as string + + """ + type: MetadataAttributeType! + key: String! + + """ + The value serialized as string. It's consumer responsibility to parse it according to `type`. + """ + value: String! +} + +enum MetadataAttributeType { + BOOLEAN + DATE + NUMBER + STRING + JSON +} + +"""Mimetype type""" +scalar MimeType + +type MintMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + mintLink: EncryptableURI! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type Mirror { + id: PublicationId! + publishedOn: App + isHidden: Boolean! + momoka: MomokaInfo + txHash: TxHash + createdAt: DateTime! + mirrorOn: MirrorablePublication! + by: Profile! +} + +union MirrorablePublication = Post | Comment | Quote + +type MirrorNotification { + id: UUID! + mirrors: [ProfileMirrorResult!]! + publication: PrimaryPublication! +} + +input ModExplorePublicationRequest { + limit: LimitType + cursor: Cursor + where: ModExplorePublicationsWhere + orderBy: ExplorePublicationsOrderByType! +} + +input ModExplorePublicationsWhere { + since: UnixTimestamp + publicationTypes: [ModExplorePublicationType!] + customFilters: [CustomFiltersType!] + metadata: PublicationMetadataFilters +} + +enum ModExplorePublicationType { + POST + QUOTE + COMMENT +} + +type ModFollowerResult { + createdAt: DateTime! + follower: Profile! + following: Profile! +} + +input ModuleCurrencyApproval { + openActionModule: OpenActionModuleType + unknownOpenActionModule: EvmAddress + followModule: FollowModuleType + unknownFollowModule: EvmAddress + referenceModule: ReferenceModuleType + unknownReferenceModule: EvmAddress +} + +type ModuleInfo { + name: String! + type: String! +} + +type ModuleMetadata { + name: String! + title: String! + description: String! + authors: [String!]! + initializeCalldataABI: ABIJson! + initializeResultDataABI: ABIJson + processCalldataABI: ABIJson! + attributes: [MetadataAttribute!]! +} + +input ModuleMetadataRequest { + implementation: EvmAddress! +} + +enum ModuleType { + FOLLOW + OPEN_ACTION + REFERENCE +} + +input MomokaCommentRequest { + commentOn: PublicationId! + contentURI: URI! +} + +type MomokaCommentTransaction { + transactionId: String! + submitter: EvmAddress! + createdAt: DateTime! + app: App + verificationStatus: MomokaVerificationStatus! + publication: Comment! + commentOn: PrimaryPublication! +} + +"""The momoka id""" +scalar MomokaId + +type MomokaInfo { + proof: MomokaProof! +} + +input MomokaMirrorRequest { + mirrorOn: PublicationId! + + """You can add information like app on a mirror or tracking stuff""" + metadataURI: URI +} + +type MomokaMirrorTransaction { + transactionId: String! + submitter: EvmAddress! + createdAt: DateTime! + app: App + verificationStatus: MomokaVerificationStatus! + publication: Mirror! + mirrorOn: PrimaryPublication! +} + +input MomokaPostRequest { + contentURI: URI! +} + +type MomokaPostTransaction { + transactionId: String! + submitter: EvmAddress! + createdAt: DateTime! + app: App + verificationStatus: MomokaVerificationStatus! + publication: Post! +} + +"""The momoka proof""" +scalar MomokaProof + +input MomokaQuoteRequest { + contentURI: URI! + quoteOn: PublicationId! +} + +type MomokaQuoteTransaction { + transactionId: String! + submitter: EvmAddress! + createdAt: DateTime! + app: App + verificationStatus: MomokaVerificationStatus! + publication: Quote! + quoteOn: PrimaryPublication! +} + +type MomokaSubmitterResult { + address: EvmAddress! + name: String! + totalTransactions: Int! +} + +type MomokaSubmittersResult { + items: [MomokaSubmitterResult!]! + pageInfo: PaginatedResultInfo! +} + +type MomokaSummaryResult { + totalTransactions: Int! +} + +union MomokaTransaction = MomokaPostTransaction | MomokaCommentTransaction | MomokaMirrorTransaction | MomokaQuoteTransaction + +input MomokaTransactionRequest { + """The momoka transaction id or internal publication id""" + for: String! +} + +input MomokaTransactionsRequest { + limit: LimitType + cursor: Cursor + for: ProfileId +} + +type MomokaTransactionsResult { + items: [MomokaTransaction!]! + pageInfo: PaginatedResultInfo! +} + +enum MomokaValidatorError { + NO_SIGNATURE_SUBMITTER + INVALID_SIGNATURE_SUBMITTER + TIMESTAMP_PROOF_INVALID_SIGNATURE + TIMESTAMP_PROOF_INVALID_TYPE + TIMESTAMP_PROOF_INVALID_DA_ID + TIMESTAMP_PROOF_NOT_SUBMITTER + CAN_NOT_CONNECT_TO_BUNDLR + INVALID_TX_ID + INVALID_FORMATTED_TYPED_DATA + BLOCK_CANT_BE_READ_FROM_NODE + DATA_CANT_BE_READ_FROM_NODE + SIMULATION_NODE_COULD_NOT_RUN + SIMULATION_FAILED + EVENT_MISMATCH + INVALID_EVENT_TIMESTAMP + INVALID_TYPED_DATA_DEADLINE_TIMESTAMP + GENERATED_PUBLICATION_ID_MISMATCH + INVALID_POINTER_SET_NOT_NEEDED + POINTER_FAILED_VERIFICATION + NOT_CLOSEST_BLOCK + BLOCK_TOO_FAR + PUBLICATION_NO_POINTER + PUBLICATION_NONE_DA + PUBLICATION_NONCE_INVALID + PUBLICATION_SIGNER_NOT_ALLOWED + CHAIN_SIGNATURE_ALREADY_USED + POTENTIAL_REORG + PUBLICATION_NOT_RECOGNIZED + UNKNOWN +} + +union MomokaVerificationStatus = MomokaVerificationStatusSuccess | MomokaVerificationStatusFailure + +type MomokaVerificationStatusFailure { + status: MomokaValidatorError! +} + +type MomokaVerificationStatusSuccess { + verified: Boolean! +} + +input MultirecipientFeeCollectModuleInput { + amount: AmountInput! + collectLimit: String + referralFee: Float = 0 + followerOnly: Boolean! + endsAt: DateTime + recipients: [RecipientDataInput!]! +} + +type MultirecipientFeeCollectOpenActionSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """The collect module amount info""" + amount: Amount! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The maximum number of collects for this publication.""" + collectLimit: String + + """The referral fee associated with this publication.""" + referralFee: Float! + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime + + """Recipient of collect fees.""" + recipients: [RecipientDataOutput!]! +} + +type Mutation { + authenticate(request: SignedAuthChallenge!): AuthenticationResult! + refresh(request: RefreshRequest!): AuthenticationResult! + revokeAuthentication(request: RevokeAuthenticationRequest!): Void + walletAuthenticationToProfileAuthentication(request: WalletAuthenticationToProfileAuthenticationRequest!): AuthenticationResult! + linkHandleToProfile(request: LinkHandleToProfileRequest!): LensProfileManagerRelayResult! + unlinkHandleFromProfile(request: UnlinkHandleFromProfileRequest!): LensProfileManagerRelayResult! + createLinkHandleToProfileTypedData(options: TypedDataOptions, request: LinkHandleToProfileRequest!): CreateLinkHandleToProfileBroadcastItemResult! + createUnlinkHandleFromProfileTypedData(options: TypedDataOptions, request: UnlinkHandleFromProfileRequest!): CreateUnlinkHandleFromProfileBroadcastItemResult! + broadcastOnMomoka(request: BroadcastRequest!): BroadcastMomokaResult! + broadcastOnchain(request: BroadcastRequest!): RelayResult! + follow(request: FollowLensManagerRequest!): LensProfileManagerRelayResult! + unfollow(request: UnfollowRequest!): LensProfileManagerRelayResult! + createFollowTypedData(options: TypedDataOptions, request: FollowRequest!): CreateFollowBroadcastItemResult! + createUnfollowTypedData(options: TypedDataOptions, request: UnfollowRequest!): CreateUnfollowBroadcastItemResult! + internalClaim(request: InternalClaimRequest!): Void + internalCuratedUpdate(request: InternalCuratedUpdateRequest!): Void + internalAllowDomain(request: InternalAllowDomainRequest!): Void + internalAddCuratedTag(request: InternalAddCuratedTagRequest!): Void + internalRemoveCuratedTag(request: InternalRemoveCuratedTagRequest!): Void + internalUpdateProfileStatus(request: InternalUpdateProfileStatusRequest!): Void + internalNftIndex(request: InternalNftIndexRequest!): Void + internalNftVerify(request: InternalNftVerifyRequest!): Void + internalAddInvites(request: InternalAddInvitesRequest!): Void + internalUpdateModuleOptions(request: InternalUpdateModuleOptionsRequest!): Void + internalBoostProfile(request: InternalBoostProfileRequest!): Int! + internalMintHandleAndProfile(request: InternalMintHandleAndProfileRequest!): TxHash! + setFollowModule(request: SetFollowModuleRequest!): LensProfileManagerRelayResult! + actOnOpenAction(request: ActOnOpenActionLensManagerRequest!): LensProfileManagerRelayResult! + legacyCollect(request: LegacyCollectRequest!): LensProfileManagerRelayResult! + createSetFollowModuleTypedData(options: TypedDataOptions, request: SetFollowModuleRequest!): CreateSetFollowModuleBroadcastItemResult! + createActOnOpenActionTypedData(options: TypedDataOptions, request: ActOnOpenActionRequest!): CreateActOnOpenActionBroadcastItemResult! + createLegacyCollectTypedData(options: TypedDataOptions, request: LegacyCollectRequest!): CreateLegacyCollectBroadcastItemResult! + postOnMomoka(request: MomokaPostRequest!): RelayMomokaResult! + commentOnMomoka(request: MomokaCommentRequest!): RelayMomokaResult! + quoteOnMomoka(request: MomokaQuoteRequest!): RelayMomokaResult! + mirrorOnMomoka(request: MomokaMirrorRequest!): RelayMomokaResult! + createMomokaQuoteTypedData(request: MomokaQuoteRequest!): CreateMomokaQuoteBroadcastItemResult! + createMomokaPostTypedData(request: MomokaPostRequest!): CreateMomokaPostBroadcastItemResult! + createMomokaCommentTypedData(request: MomokaCommentRequest!): CreateMomokaCommentBroadcastItemResult! + createMomokaMirrorTypedData(request: MomokaMirrorRequest!): CreateMomokaMirrorBroadcastItemResult! + createNftGallery(request: NftGalleryCreateRequest!): NftGalleryId! + updateNftGalleryInfo(request: NftGalleryUpdateInfoRequest!): Void + updateNftGalleryOrder(request: NftGalleryUpdateItemOrderRequest!): Void + updateNftGalleryItems(request: NftGalleryUpdateItemsRequest!): Void + deleteNftGallery(request: NftGalleryDeleteRequest!): Void + nftOwnershipChallenge(request: NftOwnershipChallengeRequest!): NftOwnershipChallengeResult! + addProfileInterests(request: ProfileInterestsRequest!): Void + removeProfileInterests(request: ProfileInterestsRequest!): Void + dismissRecommendedProfiles(request: DismissRecommendedProfilesRequest!): Void + setDefaultProfile(request: SetDefaultProfileRequest!): Void + reportProfile(request: ReportProfileRequest!): Void + peerToPeerRecommend(request: PeerToPeerRecommendRequest!): Void + peerToPeerUnrecommend(request: PeerToPeerRecommendRequest!): Void + + """Hide a managed profile from your managed profiles list.""" + hideManagedProfile(request: HideManagedProfileRequest!): Void + + """ + Unhide an already hidden managed profile from your managed profiles list. + """ + unhideManagedProfile(request: UnhideManagedProfileRequest!): Void + claimProfileWithHandle(request: ClaimProfileWithHandleRequest!): ClaimProfileWithHandleResult! + invite(request: InviteRequest!): Void + block(request: BlockRequest!): LensProfileManagerRelayResult! + unblock(request: UnblockRequest!): LensProfileManagerRelayResult! + setProfileMetadata(request: OnchainSetProfileMetadataRequest!): LensProfileManagerRelayResult! + createOnchainSetProfileMetadataTypedData(options: TypedDataOptions, request: OnchainSetProfileMetadataRequest!): CreateOnchainSetProfileMetadataBroadcastItemResult! + createChangeProfileManagersTypedData(options: TypedDataOptions, request: ChangeProfileManagersRequest!): CreateChangeProfileManagersBroadcastItemResult! + createBlockProfilesTypedData(options: TypedDataOptions, request: BlockRequest!): CreateBlockProfilesBroadcastItemResult! + createUnblockProfilesTypedData(options: TypedDataOptions, request: UnblockRequest!): CreateUnblockProfilesBroadcastItemResult! + hidePublication(request: HidePublicationRequest!): Void + + """ + Hides a comment that exists under a publication made by the author. If already hidden, does nothing. + """ + hideComment(request: HideCommentRequest!): Void + + """ + Unhides a hidden comment under a publication made by the author. If not hidden, does nothing. + """ + unhideComment(request: UnhideCommentRequest!): Void + addPublicationNotInterested(request: PublicationNotInterestedRequest!): Void + undoPublicationNotInterested(request: PublicationNotInterestedRequest!): Void + addPublicationBookmark(request: PublicationBookmarkRequest!): Void + removePublicationBookmark(request: PublicationBookmarkRequest!): Void + addReaction(request: ReactionRequest!): Void + removeReaction(request: ReactionRequest!): Void + reportPublication(request: ReportPublicationRequest!): Void + postOnchain(request: OnchainPostRequest!): LensProfileManagerRelayResult! + commentOnchain(request: OnchainCommentRequest!): LensProfileManagerRelayResult! + quoteOnchain(request: OnchainQuoteRequest!): LensProfileManagerRelayResult! + mirrorOnchain(request: OnchainMirrorRequest!): LensProfileManagerRelayResult! + refreshPublicationMetadata(request: RefreshPublicationMetadataRequest!): RefreshPublicationMetadataResult! + createOnchainPostTypedData(options: TypedDataOptions, request: OnchainPostRequest!): CreateOnchainPostBroadcastItemResult! + createOnchainCommentTypedData(options: TypedDataOptions, request: OnchainCommentRequest!): CreateOnchainCommentBroadcastItemResult! + createOnchainQuoteTypedData(options: TypedDataOptions, request: OnchainQuoteRequest!): CreateOnchainQuoteBroadcastItemResult! + createOnchainMirrorTypedData(options: TypedDataOptions, request: OnchainMirrorRequest!): CreateOnchainMirrorBroadcastItemResult! + idKitPhoneVerifyWebhook(request: IdKitPhoneVerifyWebhookRequest!): IdKitPhoneVerifyWebhookResultStatusType! +} + +input MutualFollowersRequest { + limit: LimitType + cursor: Cursor + viewing: ProfileId! + observer: ProfileId! + + """The order by which to sort the profiles""" + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +"""Mutual NFT collections request""" +input MutualNftCollectionsRequest { + limit: LimitType + cursor: Cursor + + """Profile id of the first user""" + observer: ProfileId! + + """Profile id of the second user""" + viewing: ProfileId! +} + +input MutualPoapsQueryRequest { + limit: LimitType + cursor: Cursor + observer: ProfileId! + viewing: ProfileId! +} + +type NetworkAddress { + address: EvmAddress! + chainId: ChainId! +} + +input NetworkAddressInput { + address: EvmAddress! + chainId: ChainId! +} + +input Nfi { + c: EvmAddress! + i: ChainId! +} + +type Nft { + tokenId: TokenId! + contentURI: URI + contract: NetworkAddress! + contractType: NftContractType! + totalSupply: String! + collection: NftCollection! + metadata: NftMetadata + owner: Owner! +} + +"""Nft Collection type""" +type NftCollection { + """The contract info, address and chain id""" + contract: NetworkAddress! + + """Collection name""" + name: String! + + """Collection symbol""" + symbol: String! + + """Collection base URI for token metadata""" + baseUri: URI + + """Collection ERC type""" + contractType: NftContractType! + + """Collection verified status""" + verified: Boolean! +} + +enum NftCollectionOwnersOrder { + FollowersFirst + None +} + +"""NFT collection owners request""" +input NftCollectionOwnersRequest { + limit: LimitType + cursor: Cursor + + """The contract address""" + for: EvmAddress! + + """The chain id""" + chainId: ChainId! + + """The ordering of Nft collection owners""" + order: NftCollectionOwnersOrder = None + + """The profile id to use when ordering by followers""" + by: ProfileId = null +} + +"""NFT collections request""" +input NftCollectionsRequest { + limit: LimitType + cursor: Cursor + + """Filter by owner address""" + forAddress: EvmAddress + for: ProfileId + + """ + The chain ids to look for NFTs on. Ethereum and Polygon are supported. If omitted, it will look on both chains by default. + """ + chainIds: [ChainId!] = [1, 137] + + """Exclude Lens Follower NFTs""" + excludeFollowers: Boolean = true +} + +""" +A wrapper object containing an Nft collection, the total number of Lens profiles that own it, and optional field resolvers +""" +type NftCollectionWithOwners { + """The Nft collection""" + collection: NftCollection! + + """ + The total number of Lens profile owners that have at least 1 NFT from this collection + """ + totalOwners: Float! +} + +enum NftContractType { + ERC721 + ERC1155 +} + +input NftGalleriesRequest { + limit: LimitType + cursor: Cursor + for: ProfileId! +} + +type NftGallery { + id: NftGalleryId! + name: NftGalleryName! + owner: ProfileId! + items: [Nft!]! + createdAt: DateTime! + updatedAt: DateTime! +} + +input NftGalleryCreateRequest { + name: NftGalleryName! + items: [NftInput!]! +} + +input NftGalleryDeleteRequest { + galleryId: NftGalleryId! +} + +"""Nft gallery id type""" +scalar NftGalleryId + +"""Nft gallery name type""" +scalar NftGalleryName + +input NftGalleryUpdateInfoRequest { + galleryId: NftGalleryId! + name: NftGalleryName! +} + +input NftGalleryUpdateItemOrderRequest { + galleryId: NftGalleryId! + updates: [NftUpdateItemOrder!] = [] +} + +input NftGalleryUpdateItemsRequest { + galleryId: NftGalleryId! + toAdd: [NftInput!] = [] + toRemove: [NftInput!] = [] +} + +type NftImage { + """The contract address of the NFT collection""" + collection: NetworkAddress! + + """The token ID of the NFT""" + tokenId: TokenId! + + """The image set for the NFT""" + image: ImageSet! + + """Indicates whether the NFT is from a verified collection or not""" + verified: Boolean! +} + +input NftInput { + contract: NetworkAddressInput! + tokenId: TokenId! +} + +type NftMetadata { + description: Markdown + externalURL: URL + name: String + attributes: [PublicationMarketplaceMetadataAttribute!] + image: ImageSet + animationUrl: URI +} + +input NftOwnershipChallengeRequest { + for: EvmAddress! + nfts: [NftInput!]! +} + +type NftOwnershipChallengeResult { + success: Boolean! + info: String +} + +type NftOwnershipCondition { + contract: NetworkAddress! + contractType: NftContractType! + tokenIds: [TokenId!] +} + +input NftsRequest { + limit: LimitType + cursor: Cursor + where: NftsRequestWhere +} + +input NftsRequestWhere { + """Search query. Has to be part of a collection name""" + query: String + + """Profile ID of the owner""" + forProfileId: ProfileId = null + + """ + Ethereum address of the owner. If unknown you can also search by profile ID + """ + forAddress: EvmAddress = null + + """ + Chain IDs to search. Supports Ethereum and Polygon. If omitted, it will search in both chains + """ + chainIds: [ChainId!] = [1, 137] + + """Exclude follower NFTs from the search""" + excludeFollowers: Boolean = true + includeCollections: [NetworkAddressInput!] = [] + excludeCollections: [NetworkAddressInput!] = [] +} + +input NftUpdateItemOrder { + contract: NetworkAddressInput! + tokenId: TokenId! + newOrder: Int! +} + +"""The nonce value""" +scalar Nonce + +union Notification = ReactionNotification | CommentNotification | MirrorNotification | QuoteNotification | ActedNotification | FollowNotification | MentionNotification + +input NotificationRequest { + cursor: Cursor + where: NotificationWhere + + """ + The order by which to sort the profiles on follows, reactions, actions and mirrors + """ + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +enum NotificationType { + MIRRORED + QUOTED + COMMENTED + FOLLOWED + MENTIONED + REACTED + ACTED +} + +input NotificationWhere { + publishedOn: [AppId!] + customFilters: [CustomFiltersType!] + highSignalFilter: Boolean = true + notificationTypes: [NotificationType!] + timeBasedAggregation: Boolean = true +} + +input OnchainCommentRequest { + contentURI: URI! + commentOn: PublicationId! + + """ + If your using an unknown reference modules you need to pass this in. + `followerOnlyReferenceModule` and `degreesOfSeparationReferenceModule` is + handled automatically for you and if you supply this on publications with + those settings it will be ignored + """ + commentOnReferenceModuleData: BlockchainData + openActionModules: [OpenActionModuleInput!] = [] + referenceModule: ReferenceModuleInput + referrers: [OnchainReferrer!] = [] +} + +input OnchainMirrorRequest { + mirrorOn: PublicationId! + + """You can add information like app on a mirror or tracking stuff""" + metadataURI: URI + + """ + If your using an unknown reference modules you need to pass this in. + `followerOnlyReferenceModule` and `degreesOfSeparationReferenceModule` is + handled automatically for you and if you supply this on publications with + those settings it will be ignored + """ + mirrorReferenceModuleData: BlockchainData + referrers: [OnchainReferrer!] = [] +} + +input OnchainPostRequest { + contentURI: URI! + openActionModules: [OpenActionModuleInput!] = [] + referenceModule: ReferenceModuleInput +} + +"""The onchain publication id""" +scalar OnchainPublicationId + +input OnchainQuoteRequest { + quoteOn: PublicationId! + + """ + If your using an unknown reference modules you need to pass this in. + `followerOnlyReferenceModule` and `degreesOfSeparationReferenceModule` is + handled automatically for you and if you supply this on publications with + those settings it will be ignored + """ + quoteOnReferenceModuleData: BlockchainData + contentURI: URI! + openActionModules: [OpenActionModuleInput!] = [] + referenceModule: ReferenceModuleInput + referrers: [OnchainReferrer!] = [] +} + +input OnchainReferrer { + publicationId: PublicationId + profileId: ProfileId +} + +input OnchainSetProfileMetadataRequest { + metadataURI: URI! +} + +enum OpenActionCategoryType { + COLLECT +} + +input OpenActionFilter { + address: EvmAddress + type: OpenActionModuleType + category: OpenActionCategoryType +} + +union OpenActionModule = SimpleCollectOpenActionSettings | MultirecipientFeeCollectOpenActionSettings | LegacyFreeCollectModuleSettings | LegacyFeeCollectModuleSettings | LegacyLimitedFeeCollectModuleSettings | LegacyLimitedTimedFeeCollectModuleSettings | LegacyRevertCollectModuleSettings | LegacyTimedFeeCollectModuleSettings | LegacyMultirecipientFeeCollectModuleSettings | LegacySimpleCollectModuleSettings | LegacyERC4626FeeCollectModuleSettings | LegacyAaveFeeCollectModuleSettings | UnknownOpenActionModuleSettings + +input OpenActionModuleInput { + collectOpenAction: CollectActionModuleInput + unknownOpenAction: UnknownOpenActionModuleInput +} + +enum OpenActionModuleType { + SimpleCollectOpenActionModule + MultirecipientFeeCollectOpenActionModule + UnknownOpenActionModule + LegacyLimitedFeeCollectModule + LegacyFeeCollectModule + LegacyLimitedTimedFeeCollectModule + LegacyTimedFeeCollectModule + LegacyAaveFeeCollectModule + LegacyRevertCollectModule + LegacyFreeCollectModule + LegacyMultirecipientFeeCollectModule + LegacyERC4626FeeCollectModule + LegacySimpleCollectModule +} + +type OpenActionPaidAction { + latestActed: [LatestActed!]! + actedOn: PrimaryPublication! +} + +type OpenActionProfileActed { + by: Profile! + action: OpenActionResult! + actedAt: DateTime! +} + +union OpenActionResult = KnownCollectOpenActionResult | UnknownOpenActionResult + +type OptimisticStatusResult { + value: Boolean! + isFinalisedOnchain: Boolean! +} + +type OrCondition { + criteria: [ThirdTierCondition!]! +} + +input OwnedHandlesRequest { + limit: LimitType + cursor: Cursor + + """The Ethereum address for which to retrieve owned handles""" + for: EvmAddress! +} + +type Owner { + amount: String! + address: EvmAddress! +} + +type PaginatedApprovedAuthenticationResult { + items: [ApprovedAuthentication!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedCurrenciesResult { + items: [Erc20!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedExplorePublicationResult { + items: [ExplorePublication!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedFeedHighlightsResult { + items: [FeedHighlight!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedFeedResult { + items: [FeedItem!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedHandlesResult { + items: [HandleInfo!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedModExplorePublicationResult { + items: [PrimaryPublication!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedModFollowersResult { + items: [ModFollowerResult!]! + pageInfo: PaginatedResultInfo! +} + +"""Nft collections paginated result""" +type PaginatedNftCollectionsResult { + items: [NftCollection!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedNftGalleriesResult { + items: [NftGallery!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedNftsResult { + items: [Nft!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedNotificationResult { + items: [Notification!]! + pageInfo: PaginatedResultInfo! +} + +"""Pagination with Offset fields """ +input PaginatedOffsetRequest { + limit: LimitType + cursor: Cursor +} + +"""The paginated Poap Events result""" +type PaginatedPoapEventResult { + items: [PoapEvent!]! + pageInfo: PaginatedResultInfo! +} + +"""The paginated Poap Token Results""" +type PaginatedPoapTokenResult { + items: [PoapToken!]! + pageInfo: PaginatedResultInfo! +} + +"""Popular Nft collections paginated result""" +type PaginatedPopularNftCollectionsResult { + items: [NftCollectionWithOwners!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedProfileActionHistoryResult { + items: [ProfileActionHistory!]! + pageInfo: PaginatedResultInfo! +} + +"""The paginated profile managers result""" +type PaginatedProfileManagersResult { + items: [ProfilesManagedResult!]! + pageInfo: PaginatedResultInfo! +} + +"""The paginated profile result""" +type PaginatedProfileResult { + items: [Profile!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedPublicationPrimaryResult { + items: [PrimaryPublication!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedPublicationsResult { + items: [AnyPublication!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedPublicationsTagsResult { + items: [TagResult!]! + pageInfo: PaginatedResultInfo! +} + +input PaginatedRequest { + limit: LimitType + cursor: Cursor +} + +"""The paginated result info""" +type PaginatedResultInfo { + """Cursor to query the actual results""" + prev: Cursor + + """Cursor to query next results""" + next: Cursor +} + +type PaginatedRevenueFromPublicationsResult { + items: [PublicationRevenue!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedSupportedModules { + items: [SupportedModule!]! + pageInfo: PaginatedResultInfo! +} + +type PaginatedWhoReactedResult { + items: [ProfileWhoReactedResult!]! + pageInfo: PaginatedResultInfo! +} + +union PaidAction = FollowPaidAction | OpenActionPaidAction + +input PeerToPeerRecommendRequest { + """The profile to recommend""" + profileId: ProfileId! +} + +type PhysicalAddress { + """The full mailing address formatted for display.""" + formatted: EncryptableString + + """ + The street address including house number, street name, P.O. Box, apartment or + unit number and extended multi-line address information. + """ + streetAddress: EncryptableString + + """The city or locality.""" + locality: EncryptableString! + + """The state or region.""" + region: EncryptableString + + """The zip or postal code.""" + postalCode: EncryptableString + + """The country name component.""" + country: EncryptableString! +} + +"""The POAP Event result""" +type PoapEvent { + id: PoapEventId! + fancyId: String + name: String + eventUrl: URL + imageUrl: URL + country: String + city: String + description: String + year: Int + startDate: DateTime + endDate: DateTime + expiryDate: DateTime + virtualEvent: Boolean + fromAdmin: Boolean + animationUrl: URL + eventTemplateId: Int + privateEvent: Boolean +} + +"""The Poap Event id""" +scalar PoapEventId + +input PoapEventQueryRequest { + eventId: PoapEventId! +} + +input PoapHoldersQueryRequest { + limit: LimitType + cursor: Cursor + eventId: PoapEventId! +} + +"""The Poap Token Event""" +type PoapToken { + tokenId: TokenId! + + """Poap Event Id""" + eventId: PoapEventId! + owner: NetworkAddress! + + """Which network the token is: L1 (eth) or L2 (Gnosis)""" + layer: PoapTokenLayerType! + created: DateTime! + + """migrated to L1 at""" + migrated: DateTime + event: PoapEvent! +} + +enum PoapTokenLayerType { + Layer1 + Layer2 +} + +enum PopularNftCollectionsOrder { + TotalOwners + TotalLensProfileOwners +} + +"""Popular NFT collections request""" +input PopularNftCollectionsRequest { + limit: LimitType + cursor: Cursor + + """ + The chain ids to look for NFTs on. Ethereum and Polygon are supported. If omitted, it will look on both chains by default. + """ + chainIds: [ChainId!] = [1, 137] + + """Exclude Lens Follower NFTs""" + excludeFollowers: Boolean = true + + """Include only verified collections""" + onlyVerified: Boolean = true + + """ + The ordering of Nft collection owners. Defaults to Total Lens Profile owners + """ + orderBy: PopularNftCollectionsOrder! = TotalLensProfileOwners +} + +type Post { + id: PublicationId! + publishedOn: App + isHidden: Boolean! + momoka: MomokaInfo + txHash: TxHash + createdAt: DateTime! + by: Profile! + stats(request: PublicationStatsInput): PublicationStats! + operations: PublicationOperations! + metadata: PublicationMetadata! + isEncrypted: Boolean! + openActionModules: [OpenActionModule!]! + referenceModule: ReferenceModule + profilesMentioned: [ProfileMentioned!]! + hashtagsMentioned: [String!]! +} + +type PrfResult { + ss: Boolean! + dd: Boolean! +} + +union PrimaryPublication = Post | Comment | Quote + +"""The Profile""" +type Profile { + """The profile id""" + id: ProfileId! + + """Who owns the profile""" + ownedBy: NetworkAddress! + txHash: TxHash! + + """When the profile was created""" + createdAt: DateTime! + stats(request: ProfileStatsArg): ProfileStats! + operations: ProfileOperations! + interests: [String!]! + guardian: ProfileGuardianResult + invitedBy: Profile + + """The number of invites left""" + invitesLeft: Int! + + """The on chain identity""" + onchainIdentity: ProfileOnchainIdentity! + + """The profile follow nft address""" + followNftAddress: NetworkAddress + + """ + The profile metadata. You can optionally query profile metadata by app id. + """ + metadata(request: GetProfileMetadataArgs = {useFallback: true}): ProfileMetadata + + """The follow module""" + followModule: FollowModule + + """The profile handle - a profile may not have one""" + handle: HandleInfo + + """If the profile has got signless enabled""" + signless: Boolean! + + """ + If lens API will sponsor this persons for gasless experience, note they can + have signless on but sponsor false which means it be rejected + """ + sponsor: Boolean! + + """If the profile has been recommended by the authenticated user""" + peerToPeerRecommendedByMe: Boolean! +} + +"""The Profile""" +type ProfileActionHistory { + id: Float! + actionType: ProfileActionHistoryType! + who: EvmAddress! + txHash: TxHash + actionedOn: DateTime! +} + +input ProfileActionHistoryRequest { + limit: LimitType + cursor: Cursor +} + +"""Profile action history type""" +enum ProfileActionHistoryType { + FOLLOW + UNFOLLOW + LINK_HANDLE + UNLINK_HANDLE + SET_PROFILE_MODULE + BLOCKED + UNBLOCKED + SET_PROFILE_METADATA + ACTED + COLLECTED + COMMENT + MIRROR + QUOTE + POST + LOGGED_IN + REFRESH_AUTH_TOKEN +} + +input ProfileFraudReasonInput { + reason: ProfileReportingReason! + subreason: ProfileReportingFraudSubreason! +} + +type ProfileGuardianResult { + protected: Boolean! + cooldownEndsOn: DateTime +} + +"""ProfileId custom scalar type""" +scalar ProfileId + +input ProfileInterestsRequest { + interests: [ProfileInterestTypes!]! +} + +"""Profile interests types""" +enum ProfileInterestTypes { + ART_ENTERTAINMENT + ART_ENTERTAINMENT__BOOKS + ART_ENTERTAINMENT__ART + ART_ENTERTAINMENT__DESIGN + ART_ENTERTAINMENT__PHOTOGRAPHY + ART_ENTERTAINMENT__FASHION + ART_ENTERTAINMENT__ANIME + ART_ENTERTAINMENT__MEMES + ART_ENTERTAINMENT__FILM_TV + ART_ENTERTAINMENT__MUSIC + BUSINESS + BUSINESS__CREATOR_ECONOMY + BUSINESS__FINANCE + BUSINESS__MARKETING + TECHNOLOGY + TECHNOLOGY__AI_ML + TECHNOLOGY__SCIENCE + TECHNOLOGY__PROGRAMMING + TECHNOLOGY__TOOLS + TECHNOLOGY__BIOTECH + CAREER + EDUCATION + FAMILY_PARENTING + HEALTH_FITNESS + HEALTH_FITNESS__EXERCISE + HEALTH_FITNESS__BIOHACKING + FOOD_DRINK + FOOD_DRINK__RESTAURANTS + FOOD_DRINK__COOKING + FOOD_DRINK__COCKTAILS + FOOD_DRINK__BEER + FOOD_DRINK__WINE + HOBBIES_INTERESTS + HOBBIES_INTERESTS__ARTS_CRAFTS + HOBBIES_INTERESTS__GAMING + HOBBIES_INTERESTS__TRAVEL + HOBBIES_INTERESTS__COLLECTING + HOBBIES_INTERESTS__SPORTS + HOBBIES_INTERESTS__CARS + HOME_GARDEN + HOME_GARDEN__NATURE + HOME_GARDEN__ANIMALS + HOME_GARDEN__HOME_IMPROVEMENT + HOME_GARDEN__GARDENING + LAW_GOVERNMENT_POLITICS + LAW_GOVERNMENT_POLITICS__REGULATION + NEWS + LENS + CRYPTO + CRYPTO__NFT + CRYPTO__DEFI + CRYPTO__WEB3 + CRYPTO__WEB3_SOCIAL + CRYPTO__GOVERNANCE + CRYPTO__DAOS + CRYPTO__GM + CRYPTO__METAVERSE + CRYPTO__REKT + CRYPTO__ETHEREUM + CRYPTO__BITCOIN + CRYPTO__L1 + CRYPTO__L2 + CRYPTO__SCALING + NSFW +} + +input ProfileManagersRequest { + limit: LimitType + cursor: Cursor + + """The profile ID for which to retrieve managers""" + for: ProfileId! +} + +type ProfileMentioned { + profile: Profile! + snapshotHandleMentioned: HandleInfo! + stillOwnsHandle: Boolean! +} + +type ProfileMetadata { + """The display name for the profile""" + displayName: String + + """The bio for the profile""" + bio: Markdown + + """The raw uri for the which the profile metadata was set as""" + rawURI: URI! + + """The app that this metadata is displayed on""" + appId: AppId + + """Profile Custom attributes""" + attributes: [MetadataAttribute!] + + """The picture for the profile""" + picture: ProfilePicture + + """The cover picture for the profile""" + coverPicture: ImageSet +} + +type ProfileMirrorResult { + mirrorId: PublicationId! + mirroredAt: DateTime! + profile: Profile! +} + +type ProfileOnchainIdentity { + """The POH status""" + proofOfHumanity: Boolean! + + """The ens information""" + ens: EnsOnchainIdentity + + """The sybil dot org information""" + sybilDotOrg: SybilDotOrgIdentity! + + """The worldcoin identity""" + worldcoin: WorldcoinIdentity! +} + +type ProfileOperations { + id: ProfileId! + isBlockedByMe: OptimisticStatusResult! + hasBlockedMe: OptimisticStatusResult! + isFollowedByMe: OptimisticStatusResult! + isFollowingMe: OptimisticStatusResult! + canBlock: Boolean! + canUnblock: Boolean! + canFollow: TriStateValue! + canUnfollow: Boolean! +} + +type ProfileOwnershipCondition { + profileId: ProfileId! +} + +union ProfilePicture = ImageSet | NftImage + +type ProfileReactedResult { + profile: Profile! + reactions: [ReactedResult!]! +} + +"""The reaction details for a publication""" +type ProfileReactionResult { + """The reaction""" + reaction: PublicationReactionType! + + """The reaction date""" + reactionAt: DateTime! +} + +input ProfileRecommendationsRequest { + limit: LimitType + cursor: Cursor + + """Filter based on a specific profile ID""" + for: ProfileId! + + """Disable machine learning recommendations (default: false)""" + disableML: Boolean = false + + """Shuffle the recommendations (default: false)""" + shuffle: Boolean = false +} + +enum ProfileReportingFraudSubreason { + IMPERSONATION + SOMETHING_ELSE +} + +enum ProfileReportingReason { + FRAUD + SPAM +} + +input ProfileReportingReasonInput { + fraudReason: ProfileFraudReasonInput + spamReason: ProfileSpamReasonInput +} + +enum ProfileReportingSpamSubreason { + REPETITIVE + SOMETHING_ELSE +} + +input ProfileRequest { + """The profile you want to fetch""" + forProfileId: ProfileId + + """The handle for profile you want to fetch - namespace/localname""" + forHandle: Handle +} + +input ProfileSearchRequest { + limit: LimitType + cursor: Cursor + + """Query for the profile search""" + query: String! + + """Filtering criteria for profile search""" + where: ProfileSearchWhere + + """The order by which to sort the profiles""" + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input ProfileSearchWhere { + """Array of custom filters for profile search""" + customFilters: [CustomFiltersType!] +} + +input ProfilesManagedRequest { + limit: LimitType + cursor: Cursor + + """The Ethereum address for which to retrieve managed profiles""" + for: EvmAddress! + includeOwned: Boolean = true + hiddenFilter: ManagedProfileVisibility = NONE_HIDDEN +} + +type ProfilesManagedResult { + address: EvmAddress! + isLensManager: Boolean! +} + +enum ProfilesOrderBy { + DEFAULT + PROFILE_CLASSIFIER +} + +input ProfileSpamReasonInput { + reason: ProfileReportingReason! + subreason: ProfileReportingSpamSubreason! +} + +input ProfilesRequest { + limit: LimitType + cursor: Cursor + + """The where clause to use to filter on what you are looking for""" + where: ProfilesRequestWhere! + + """The order by which to sort the profiles""" + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input ProfilesRequestWhere { + """Pass in an array of evm address to get the profile entities they own""" + ownedBy: [EvmAddress!] + + """Pass in an array of profile ids to get the profile entities""" + profileIds: [ProfileId!] + + """Pass in an array of handles to get the profile entities""" + handles: [Handle!] + + """Pass the publication id and get a list of the profiles who quoted it""" + whoQuotedPublication: PublicationId + + """Pass the publication id and get a list of the profiles who mirrored it""" + whoMirroredPublication: PublicationId + + """ + Pass the publication id and get a list of the profiles who commented on it + """ + whoCommentedOn: PublicationId +} + +"""The Profile Stats""" +type ProfileStats { + id: ProfileId! + followers: Int! + following: Int! + comments: Int! + posts: Int! + mirrors: Int! + quotes: Int! + publications: Int! + + """ + How many times other profiles have reacted on something this profile did + """ + reactions(request: ProfileStatsReactionArgs): Int! + + """How many times a profile has reacted on something""" + reacted(request: ProfileStatsReactionArgs): Int! + countOpenActions(request: ProfileStatsCountOpenActionArgs): Int! + + """ + The profile classifier score of this profile relative to others on Lens. It is a % out of 100. + """ + lensClassifierScore: Float +} + +input ProfileStatsArg { + forApps: [AppId!] + customFilters: [CustomFiltersType!] + hiddenComments: HiddenCommentsType = SHOW +} + +input ProfileStatsCountOpenActionArgs { + anyOf: [OpenActionFilter!] = [] +} + +input ProfileStatsReactionArgs { + type: PublicationReactionType! +} + +type ProfileWhoReactedResult { + profile: Profile! + reactions: [ProfileReactionResult!]! +} + +input PublicationBookmarkRequest { + on: PublicationId! +} + +input PublicationBookmarksRequest { + limit: LimitType + cursor: Cursor + where: PublicationBookmarksWhere +} + +input PublicationBookmarksWhere { + metadata: PublicationMetadataFilters +} + +input PublicationCommentOn { + id: PublicationId! + ranking: PublicationCommentOnRanking + + """You can use this enum to show, hide or show only hidden comments""" + hiddenComments: HiddenCommentsType = SHOW +} + +input PublicationCommentOnRanking { + filter: CommentRankingFilterType = ALL +} + +enum PublicationContentWarningType { + NSFW + SENSITIVE + SPOILER +} + +"""Publication id""" +scalar PublicationId + +type PublicationMarketplaceMetadataAttribute { + displayType: MarketplaceMetadataAttributeDisplayType + traitType: String + value: String +} + +union PublicationMetadata = VideoMetadataV3 | ImageMetadataV3 | AudioMetadataV3 | ArticleMetadataV3 | EventMetadataV3 | LinkMetadataV3 | EmbedMetadataV3 | CheckingInMetadataV3 | TextOnlyMetadataV3 | ThreeDMetadataV3 | StoryMetadataV3 | TransactionMetadataV3 | MintMetadataV3 | SpaceMetadataV3 | LiveStreamMetadataV3 + +input PublicationMetadataContentWarningFilter { + oneOf: [PublicationContentWarningType!]! +} + +union PublicationMetadataEncryptionStrategy = PublicationMetadataLitEncryption + +input PublicationMetadataFilters { + locale: Locale + contentWarning: PublicationMetadataContentWarningFilter + mainContentFocus: [PublicationMetadataMainFocusType!] + tags: PublicationMetadataTagsFilter + publishedOn: [AppId!] +} + +enum PublicationMetadataLicenseType { + CCO + CC_BY + CC_BY_ND + CC_BY_NC + TBNL_C_D_PL_Legal + TBNL_C_DT_PL_Legal + TBNL_C_ND_PL_Legal + TBNL_C_D_NPL_Legal + TBNL_C_DT_NPL_Legal + TBNL_C_DTSA_PL_Legal + TBNL_C_DTSA_NPL_Legal + TBNL_C_ND_NPL_Legal + TBNL_C_D_PL_Ledger + TBNL_C_DT_PL_Ledger + TBNL_C_ND_PL_Ledger + TBNL_C_D_NPL_Ledger + TBNL_C_DT_NPL_Ledger + TBNL_C_DTSA_PL_Ledger + TBNL_C_DTSA_NPL_Ledger + TBNL_C_ND_NPL_Ledger + TBNL_NC_D_PL_Legal + TBNL_NC_DT_PL_Legal + TBNL_NC_ND_PL_Legal + TBNL_NC_D_NPL_Legal + TBNL_NC_DT_NPL_Legal + TBNL_NC_DTSA_PL_Legal + TBNL_NC_DTSA_NPL_Legal + TBNL_NC_ND_NPL_Legal + TBNL_NC_D_PL_Ledger + TBNL_NC_DT_PL_Ledger + TBNL_NC_ND_PL_Ledger + TBNL_NC_D_NPL_Ledger + TBNL_NC_DT_NPL_Ledger + TBNL_NC_DTSA_PL_Ledger + TBNL_NC_DTSA_NPL_Ledger + TBNL_NC_ND_NPL_Ledger +} + +type PublicationMetadataLitEncryption { + encryptionKey: ContentEncryptionKey! + accessCondition: RootCondition! + accessControlContract: NetworkAddress! + encryptedPaths: [EncryptedPath!]! +} + +enum PublicationMetadataMainFocusType { + VIDEO + IMAGE + ARTICLE + TEXT_ONLY + AUDIO + LINK + EMBED + CHECKING_IN + EVENT + MINT + TRANSACTION + LIVESTREAM + SHORT_VIDEO + THREE_D + STORY + SPACE +} + +union PublicationMetadataMedia = PublicationMetadataMediaVideo | PublicationMetadataMediaImage | PublicationMetadataMediaAudio + +type PublicationMetadataMediaAudio { + audio: EncryptableAudioSet! + attributes: [MetadataAttribute!] + cover: EncryptableImageSet + duration: Int + license: PublicationMetadataLicenseType + credits: EncryptableString + artist: EncryptableString + genre: EncryptableString + recordLabel: EncryptableString + lyrics: EncryptableString +} + +type PublicationMetadataMediaImage { + image: EncryptableImageSet! + license: PublicationMetadataLicenseType + + """Alternative text for the image""" + altTag: EncryptableString + attributes: [MetadataAttribute!] +} + +type PublicationMetadataMediaVideo { + video: EncryptableVideoSet! + cover: EncryptableImageSet + duration: Int + license: PublicationMetadataLicenseType + + """Alternative text for the video""" + altTag: EncryptableString + attributes: [MetadataAttribute!] +} + +input PublicationMetadataTagsFilter { + oneOf: [String!] + all: [String!] +} + +enum PublicationMetadataTransactionType { + ERC721 + ERC20 + OTHER +} + +input PublicationNotInterestedRequest { + on: PublicationId! +} + +type PublicationOperations { + id: PublicationId! + isNotInterested: Boolean! + hasBookmarked: Boolean! + hasReported: Boolean! + canAct(request: PublicationOperationsActedArgs): TriStateValue! + hasActed(request: PublicationOperationsActedArgs): OptimisticStatusResult! + actedOn(request: PublicationOperationsActedArgs): [OpenActionResult!]! + hasReacted(request: PublicationOperationsReactionArgs): Boolean! + canComment: TriStateValue! + canMirror: TriStateValue! + canQuote: TriStateValue! + hasQuoted: Boolean! + hasMirrored: Boolean! + canDecrypt: CanDecryptResponse! +} + +input PublicationOperationsActedArgs { + filter: OpenActionFilter = null +} + +input PublicationOperationsReactionArgs { + type: PublicationReactionType +} + +enum PublicationReactionType { + UPVOTE + DOWNVOTE +} + +enum PublicationReportingFraudSubreason { + SCAM + IMPERSONATION +} + +enum PublicationReportingIllegalSubreason { + ANIMAL_ABUSE + HUMAN_ABUSE + VIOLENCE + THREAT_INDIVIDUAL + DIRECT_THREAT +} + +enum PublicationReportingReason { + SENSITIVE + ILLEGAL + FRAUD + SPAM +} + +enum PublicationReportingSensitiveSubreason { + NSFW + OFFENSIVE +} + +enum PublicationReportingSpamSubreason { + MISLEADING + MISUSE_HASHTAGS + UNRELATED + REPETITIVE + FAKE_ENGAGEMENT + MANIPULATION_ALGO + LOW_SIGNAL + SOMETHING_ELSE +} + +input PublicationRequest { + forId: PublicationId + forTxHash: TxHash +} + +type PublicationRevenue { + publication: AnyPublication! + revenue: [RevenueAggregate!]! +} + +input PublicationSearchRequest { + limit: LimitType + cursor: Cursor + where: PublicationSearchWhere + query: String! +} + +input PublicationSearchWhere { + customFilters: [CustomFiltersType!] + metadata: PublicationMetadataFilters + publicationTypes: [SearchPublicationType!] +} + +input PublicationsRequest { + limit: LimitType + cursor: Cursor + where: PublicationsWhere! +} + +input PublicationsTagsRequest { + limit: LimitType + cursor: Cursor + where: PublicationsTagsWhere + orderBy: TagSortCriteriaType = MOST_POPULAR +} + +input PublicationsTagsWhere { + publishedOn: [AppId!] +} + +type PublicationStats { + id: PublicationId! + comments: Int! + mirrors: Int! + quotes: Int! + reactions(request: PublicationStatsReactionArgs): Int! + countOpenActions(request: PublicationStatsCountOpenActionArgs): Int! + bookmarks: Int! +} + +input PublicationStatsCountOpenActionArgs { + anyOf: [OpenActionFilter!] = [] +} + +input PublicationStatsInput { + customFilters: [CustomFiltersType!] = [] + hiddenComments: HiddenCommentsType = SHOW + + """ + Filter the returned stats on apps and 1 of the following filters: tags, contentWarning, mainContentFocus, locale + """ + metadata: PublicationMetadataFilters +} + +input PublicationStatsReactionArgs { + type: PublicationReactionType! +} + +input PublicationsWhere { + publicationIds: [PublicationId!] + from: [ProfileId!] + publicationTypes: [PublicationType!] + commentOn: PublicationCommentOn + mirrorOn: PublicationId + quoteOn: PublicationId + withOpenActions: [OpenActionFilter!] + actedBy: ProfileId + metadata: PublicationMetadataFilters + customFilters: [CustomFiltersType!] +} + +enum PublicationType { + POST + COMMENT + QUOTE + MIRROR +} + +type PublicationValidateMetadataResult { + valid: Boolean! + reason: String +} + +type Query { + challenge(request: ChallengeRequest!): AuthChallengeResult! + verify(request: VerifyRequest!): Boolean! + approvedAuthentications(request: ApprovedAuthenticationRequest!): PaginatedApprovedAuthenticationResult! + currentSession: ApprovedAuthentication! + ownedHandles(request: OwnedHandlesRequest!): PaginatedHandlesResult! + handleToAddress(request: HandleToAddressRequest!): EvmAddress + + """Get all enabled currencies""" + currencies(request: PaginatedOffsetRequest!): PaginatedCurrenciesResult! + feed(request: FeedRequest!): PaginatedFeedResult! + feedHighlights(request: FeedHighlightsRequest!): PaginatedFeedHighlightsResult! + followers(request: FollowersRequest!): PaginatedProfileResult! + + """ + Returns a paged list of profiles that are followed by both the observer and the viewing profile + """ + mutualFollowers(request: MutualFollowersRequest!): PaginatedProfileResult! + following(request: FollowingRequest!): PaginatedProfileResult! + followStatusBulk(request: FollowStatusBulkRequest!): [FollowStatusBulkResult!]! + ping: String! + internalClaimStatus(request: InternalClaimStatusRequest!): Void + internalCuratedHandles(request: InternalCuratedHandlesRequest!): [String!]! + internalAllowedDomains(request: InternalAllowedDomainsRequest!): [URI!]! + internalCuratedTags(request: InternalCuratedTagsRequest!): [String!]! + internalProfileStatus(request: InternalProfileStatusRequest!): PrfResult! + internalInvites(request: InternalInvitesRequest!): Int! + internalBoostScore(request: InternalBoostScoreRequest!): Int + internalPaymentHandleInfo(request: InternalPaymentHandleInfoRequest!): IPHResult + modExplorePublications(request: ModExplorePublicationRequest!): PaginatedModExplorePublicationResult! + modFollowers(request: PaginatedRequest!): PaginatedModFollowersResult! + + """ + note here if your using a wallet JWT token it will get the allowance of the + public proxy contract if its supported if not throw as profiles act not wallets + """ + approvedModuleAllowanceAmount(request: ApprovedModuleAllowanceAmountRequest!): [ApprovedAllowanceAmountResult!]! + + """ + note here if your using a wallet JWT token it will approve to the public proxy + contract if its supported if not throw as profiles act not wallets + """ + generateModuleCurrencyApprovalData(request: GenerateModuleCurrencyApprovalDataRequest!): GenerateModuleCurrencyApprovalResult! + supportedOpenActionModules(request: SupportedModulesRequest!): PaginatedSupportedModules! + supportedReferenceModules(request: SupportedModulesRequest!): PaginatedSupportedModules! + supportedOpenActionCollectModules(request: SupportedModulesRequest!): PaginatedSupportedModules! + supportedFollowModules(request: SupportedModulesRequest!): PaginatedSupportedModules! + moduleMetadata(request: ModuleMetadataRequest!): GetModuleMetadataResult + momokaSubmitters: MomokaSubmittersResult! + momokaSummary: MomokaSummaryResult! + momokaTransactions(request: MomokaTransactionsRequest!): MomokaTransactionsResult! + momokaTransaction(request: MomokaTransactionRequest!): MomokaTransaction + nfts(request: NftsRequest!): PaginatedNftsResult! + + """ + Get the NFT collections that the given wallet or profileId owns at least one + NFT of. Only supports Ethereum and Polygon NFTs. Note excludeFollowers is set + to true by default, so the result will not include Lens Follower NFTsunless + explicitly requested. + """ + nftCollections(request: NftCollectionsRequest!): PaginatedNftCollectionsResult! + + """ + Get the NFT collections that the given two profiles own at least one NFT of. + """ + mutualNftCollections(request: MutualNftCollectionsRequest!): PaginatedNftCollectionsResult! + + """Get the Lens Profiles that own NFTs from a given collection.""" + nftCollectionOwners(request: NftCollectionOwnersRequest!): PaginatedProfileResult! + + """ + Get the most popular NFT collections. Popularity is based on how many Lens Profiles own NFTs from a given collection. + """ + popularNftCollections(request: PopularNftCollectionsRequest!): PaginatedPopularNftCollectionsResult! + nftGalleries(request: NftGalleriesRequest!): PaginatedNftGalleriesResult! + notifications(request: NotificationRequest): PaginatedNotificationResult! + poaps(request: UserPoapsQueryRequest!): PaginatedPoapTokenResult! + mutualPoaps(request: MutualPoapsQueryRequest!): PaginatedPoapEventResult! + poapHolders(request: PoapHoldersQueryRequest!): PaginatedProfileResult! + poapEvent(request: PoapEventQueryRequest!): PoapEvent + profiles(request: ProfilesRequest!): PaginatedProfileResult! + profile(request: ProfileRequest!): Profile + whoActedOnPublication(request: WhoActedOnPublicationRequest!): PaginatedProfileResult! + profileInterestsOptions: [String!]! + + """The list of profiles that the logged in profile has blocked""" + whoHaveBlocked(request: WhoHaveBlockedRequest!): PaginatedProfileResult! + profileActionHistory(request: ProfileActionHistoryRequest!): PaginatedProfileActionHistoryResult! + lastLoggedInProfile(request: LastLoggedInProfileRequest!): Profile + + """ + Get the default profile for a given EvmAddress. If no default is explicitly + set, you will get the oldest profile owned by the address. + """ + defaultProfile(request: DefaultProfileRequest!): Profile + claimableProfiles: ClaimableProfilesResult! + claimableStatus: ClaimProfileStatusType! + canClaim(request: CanClaimRequest!): [CanClaimResult!]! + exploreProfiles(request: ExploreProfilesRequest!): PaginatedProfileResult! + invitedProfiles: [InvitedResult!]! + profileAlreadyInvited(request: AlreadyInvitedCheckRequest!): Boolean! + profileManagers(request: ProfileManagersRequest!): PaginatedProfileManagersResult! + profilesManaged(request: ProfilesManagedRequest!): PaginatedProfileResult! + profileRecommendations(request: ProfileRecommendationsRequest!): PaginatedProfileResult! + followRevenues(request: FollowRevenueRequest!): FollowRevenueResult! + latestPaidActions(filter: LatestPaidActionsFilter, request: PaginatedRequest): LatestPaidActionsResult! + searchProfiles(request: ProfileSearchRequest!): PaginatedProfileResult! + userSigNonces: UserSigNonces! + lensProtocolVersion: String! + publications(request: PublicationsRequest!): PaginatedPublicationsResult! + publication(request: PublicationRequest!): AnyPublication + publicationsTags(request: PublicationsTagsRequest): PaginatedPublicationsTagsResult! + publicationBookmarks(request: PublicationBookmarksRequest): PaginatedPublicationsResult! + whoReactedPublication(request: WhoReactedPublicationRequest!): PaginatedWhoReactedResult! + explorePublications(request: ExplorePublicationRequest!): PaginatedExplorePublicationResult! + validatePublicationMetadata(request: ValidatePublicationMetadataRequest!): PublicationValidateMetadataResult! + revenueFromPublications(request: RevenueFromPublicationsRequest!): PaginatedRevenueFromPublicationsResult! + revenueFromPublication(request: RevenueFromPublicationRequest!): PublicationRevenue + searchPublications(request: PublicationSearchRequest!): PaginatedPublicationPrimaryResult! + relayQueues: [RelayQueueResult!]! + lensAPIOwnedEOAs: [EvmAddress!]! + generateLensAPIRelayAddress: EvmAddress! + userRateLimit(request: UserCurrentRateLimitRequest!): UserCurrentRateLimitResult! + claimTokens(request: ClaimTokensRequest!): LensProfileManagerRelayResult! + claimableTokens: ClaimableTokensResult! + txIdToTxHash(for: TxId!): TxHash + lensTransactionStatus(request: LensTransactionStatusRequest!): LensTransactionResult +} + +type Quote { + id: PublicationId! + publishedOn: App + isHidden: Boolean! + momoka: MomokaInfo + txHash: TxHash + createdAt: DateTime! + by: Profile! + stats(request: PublicationStatsInput): PublicationStats! + operations: PublicationOperations! + metadata: PublicationMetadata! + isEncrypted: Boolean! + openActionModules: [OpenActionModule!]! + referenceModule: ReferenceModule + profilesMentioned: [ProfileMentioned!]! + hashtagsMentioned: [String!]! + quoteOn: PrimaryPublication! +} + +type QuoteNotification { + id: UUID! + quote: Quote! +} + +input RateRequest { + for: SupportedFiatType! +} + +type ReactedResult { + reaction: PublicationReactionType! + reactedAt: DateTime! +} + +type ReactionEvent { + by: Profile! + reaction: PublicationReactionType! + createdAt: DateTime! +} + +type ReactionNotification { + id: UUID! + reactions: [ProfileReactedResult!]! + publication: PrimaryPublication! +} + +input ReactionRequest { + reaction: PublicationReactionType! + for: PublicationId! +} + +input RecipientDataInput { + """Recipient of collect fees.""" + recipient: EvmAddress! + + """ + Split %, should be between 0.01 and 100. Up to 2 decimal points supported. All % should add up to 100 + """ + split: Float! +} + +type RecipientDataOutput { + """Recipient of collect fees.""" + recipient: EvmAddress! + + """ + Split %, should be between 0.01 and 100. Up to 2 decimal points supported. All % should add up to 100 + """ + split: Float! +} + +union ReferenceModule = LegacyFollowOnlyReferenceModuleSettings | FollowOnlyReferenceModuleSettings | UnknownReferenceModuleSettings | LegacyDegreesOfSeparationReferenceModuleSettings | DegreesOfSeparationReferenceModuleSettings + +input ReferenceModuleInput { + followerOnlyReferenceModule: Boolean + degreesOfSeparationReferenceModule: DegreesOfSeparationReferenceModuleInput + unknownReferenceModule: UnknownReferenceModuleInput +} + +enum ReferenceModuleType { + LegacyFollowerOnlyReferenceModule + LegacyDegreesOfSeparationReferenceModule + FollowerOnlyReferenceModule + DegreesOfSeparationReferenceModule + UnknownReferenceModule +} + +input RefreshPublicationMetadataRequest { + for: PublicationId! +} + +type RefreshPublicationMetadataResult { + result: RefreshPublicationMetadataResultType! +} + +enum RefreshPublicationMetadataResultType { + QUEUED + ALREADY_PENDING + VALID_PUBLICATION_NOT_FOUND +} + +"""The refresh request""" +input RefreshRequest { + """The refresh token""" + refreshToken: Jwt! +} + +type RelayError { + reason: RelayErrorReasonType! +} + +enum RelayErrorReasonType { + NOT_SPONSORED + RATE_LIMITED + FAILED + EXPIRED + WRONG_WALLET_SIGNED + APP_NOT_ALLOWED +} + +union RelayMomokaResult = CreateMomokaPublicationResult | LensProfileManagerRelayError + +type RelayQueueResult { + key: RelayRoleKey! + relay: NetworkAddress! + queue: Int! +} + +union RelayResult = RelaySuccess | RelayError + +enum RelayRoleKey { + CREATE_PROFILE + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_1 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_2 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_3 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_4 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_5 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_6 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_7 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_8 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_9 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_10 + CREATE_PROFILE_WITH_HANDLE_USING_CREDITS_UNDER_CHAR_LIMIT + LENS_MANAGER_1 + LENS_MANAGER_2 + LENS_MANAGER_3 + LENS_MANAGER_4 + LENS_MANAGER_5 + LENS_MANAGER_6 + LENS_MANAGER_7 + LENS_MANAGER_8 + LENS_MANAGER_9 + LENS_MANAGER_10 + LENS_MANAGER_11 + LENS_MANAGER_12 + LENS_MANAGER_13 + LENS_MANAGER_14 + LENS_MANAGER_15 + LENS_MANAGER_16 + LENS_MANAGER_17 + LENS_MANAGER_18 + LENS_MANAGER_19 + LENS_MANAGER_20 + LENS_MANAGER_21 + LENS_MANAGER_22 + LENS_MANAGER_23 + LENS_MANAGER_24 + LENS_MANAGER_25 + LENS_MANAGER_26 + LENS_MANAGER_27 + LENS_MANAGER_28 + LENS_MANAGER_29 + LENS_MANAGER_30 + WITH_SIG_1 + WITH_SIG_2 + WITH_SIG_3 + WITH_SIG_4 + WITH_SIG_5 + WITH_SIG_6 + WITH_SIG_7 + WITH_SIG_8 + WITH_SIG_9 + WITH_SIG_10 + WITH_SIG_11 + WITH_SIG_12 + WITH_SIG_13 + WITH_SIG_14 + WITH_SIG_15 + WITH_SIG_16 + WITH_SIG_17 + WITH_SIG_18 + WITH_SIG_19 + WITH_SIG_20 +} + +type RelaySuccess { + txHash: TxHash + txId: TxId! +} + +input ReportingReasonInput { + sensitiveReason: SensitiveReasonInput + illegalReason: IllegalReasonInput + fraudReason: FraudReasonInput + spamReason: SpamReasonInput +} + +input ReportProfileRequest { + for: ProfileId! + reason: ProfileReportingReasonInput! + additionalComments: String +} + +input ReportPublicationRequest { + for: PublicationId! + reason: ReportingReasonInput! + additionalComments: String +} + +type ReservedClaimable { + id: String! + + """The full handle - namespace/localname""" + withHandle: Handle! + source: AppId! + expiry: DateTime! +} + +type RevenueAggregate { + total: Amount! +} + +input RevenueFromPublicationRequest { + for: PublicationId! + + """ + Will return revenue for publications made on any of the provided app ids. Will include all apps if omitted + """ + publishedOn: [AppId!] +} + +input RevenueFromPublicationsRequest { + limit: LimitType + cursor: Cursor + + """The profile to get revenue for""" + for: ProfileId! + + """ + Will return revenue for publications made on any of the provided app ids. Will include all apps if omitted + """ + publishedOn: [AppId!] +} + +type RevertFollowModuleSettings { + type: FollowModuleType! + contract: NetworkAddress! +} + +input RevokeAuthenticationRequest { + """The token authorization id wish to revoke""" + authorizationId: UUID! +} + +type RootCondition { + criteria: [SecondTierCondition!]! +} + +enum SearchPublicationType { + POST + QUOTE + COMMENT +} + +union SecondTierCondition = NftOwnershipCondition | Erc20OwnershipCondition | EoaOwnershipCondition | ProfileOwnershipCondition | FollowCondition | CollectCondition | AdvancedContractCondition | AndCondition | OrCondition + +input SensitiveReasonInput { + reason: PublicationReportingReason! + subreason: PublicationReportingSensitiveSubreason! +} + +input SetDefaultProfileRequest { + profileId: ProfileId! +} + +input SetFollowModuleRequest { + followModule: FollowModuleInput! +} + +"""The signature value""" +scalar Signature + +"""The signed auth challenge""" +input SignedAuthChallenge { + id: ChallengeId! + + """The signature""" + signature: Signature! +} + +input SimpleCollectOpenActionModuleInput { + amount: AmountInput + referralFee: Float = 0 + recipient: EvmAddress + collectLimit: String + followerOnly: Boolean! + endsAt: DateTime +} + +type SimpleCollectOpenActionSettings { + type: OpenActionModuleType! + contract: NetworkAddress! + + """ + The collect module amount info. `Amount.value = 0` in case of free collects. + """ + amount: Amount! + + """The collect nft address - only deployed on first collect""" + collectNft: EvmAddress + + """The maximum number of collects for this publication.""" + collectLimit: String + + """True if only followers of publisher may collect the post.""" + followerOnly: Boolean! + + """The collect module recipient address""" + recipient: EvmAddress! + + """The collect module referral fee""" + referralFee: Float! + + """The end timestamp after which collecting is impossible.""" + endsAt: DateTime +} + +type SpaceMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + title: String! + link: EncryptableURI! + startsAt: EncryptableDateTime! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +input SpamReasonInput { + reason: PublicationReportingReason! + subreason: PublicationReportingSpamSubreason! +} + +type StoryMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + asset: PublicationMetadataMedia! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type Subscription { + authorizationRecordRevoked(authorizationId: UUID!): Void + newMomokaTransaction: MomokaTransaction! + newNotification(for: ProfileId!): Notification + userSigNonces(address: EvmAddress!): UserSigNonces! + newPublicationStats(for: PublicationId!): PublicationStats! +} + +type SuggestedFormattedHandle { + """The full formatted handle - namespace/@localname""" + full: String! + + """The formatted handle - @localname""" + localName: String! +} + +enum SupportedFiatType { + USD + GBP + EUR +} + +union SupportedModule = KnownSupportedModule | UnknownSupportedModule + +input SupportedModulesRequest { + limit: LimitType + cursor: Cursor + includeUnknown: Boolean = false + onlyVerified: Boolean = false +} + +type SybilDotOrgIdentity { + """The sybil dot org status""" + verified: Boolean! + source: SybilDotOrgIdentitySource +} + +type SybilDotOrgIdentitySource { + twitter: SybilDotOrgTwitterIdentity! +} + +type SybilDotOrgTwitterIdentity { + handle: String +} + +type TagResult { + tag: String! + total: Int! +} + +enum TagSortCriteriaType { + MOST_POPULAR + ALPHABETICAL +} + +type TextOnlyMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + content: EncryptableMarkdown! +} + +union ThirdTierCondition = NftOwnershipCondition | Erc20OwnershipCondition | EoaOwnershipCondition | ProfileOwnershipCondition | AdvancedContractCondition | FollowCondition | CollectCondition + +type ThreeDMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + assets: [ThreeDMetadataV3Asset!]! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +type ThreeDMetadataV3Asset { + uri: EncryptableURI! + zipPath: String + playerURL: EncryptableURI! + format: String! + license: PublicationMetadataLicenseType +} + +"""The NFT token id""" +scalar TokenId + +type TransactionMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + type: PublicationMetadataTransactionType! + txHash: EncryptableTxHash! + chainId: ChainId! + attachments: [PublicationMetadataMedia!] + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +enum TriStateValue { + YES + NO + UNKNOWN +} + +"""The tx hash""" +scalar TxHash + +"""The tx id""" +scalar TxId + +input TypedDataOptions { + """ + If you wish to override the nonce for the sig if you want to do some clever stuff in the client + """ + overrideSigNonce: Nonce! +} + +input UnblockRequest { + profiles: [ProfileId!]! +} + +input UnfollowRequest { + unfollow: [ProfileId!]! +} + +input UnhideCommentRequest { + """ + The comment to unhide. It has to be under a publication made by the user + making the request. If already visible, nothing will happen. + """ + for: PublicationId! +} + +input UnhideManagedProfileRequest { + """The profile to unhide""" + profileId: ProfileId! +} + +"""The unix timestamp""" +scalar UnixTimestamp + +input UnknownFollowModuleInput { + address: EvmAddress! + data: BlockchainData! +} + +input UnknownFollowModuleRedeemInput { + address: EvmAddress! + data: BlockchainData! +} + +type UnknownFollowModuleSettings { + """The data used to setup the module""" + initializeCalldata: BlockchainData + + """The data returned from the init module""" + initializeResultData: BlockchainData + + """True if the module is deemed as safe""" + verified: Boolean! + + """ + True if the module can be signedless and use lens manager without a signature + """ + signlessApproved: Boolean! + + """ + True if the module can be sponsored through gasless so the user does not need to pay for gas + """ + sponsoredApproved: Boolean! + type: FollowModuleType! + contract: NetworkAddress! + + """ + The data used to setup the module which you can decode with your known ABI + """ + followModuleReturnData: BlockchainData @deprecated(reason: "Use initializeResultData instead") +} + +input UnknownOpenActionActRedeemInput { + address: EvmAddress! + data: BlockchainData! +} + +input UnknownOpenActionModuleInput { + address: EvmAddress! + data: BlockchainData! +} + +type UnknownOpenActionModuleSettings { + """The data used to setup the module""" + initializeCalldata: BlockchainData + + """The data returned from the init module""" + initializeResultData: BlockchainData + + """True if the module is deemed as safe""" + verified: Boolean! + + """ + True if the module can be signedless and use lens manager without a signature + """ + signlessApproved: Boolean! + + """ + True if the module can be sponsored through gasless so the user does not need to pay for gas + """ + sponsoredApproved: Boolean! + type: OpenActionModuleType! + contract: NetworkAddress! + + """ + The collect nft address - only deployed on first collect and if its a collectable open action + """ + collectNft: EvmAddress + + """The data returned from the init module""" + openActionModuleReturnData: BlockchainData @deprecated(reason: "Use initializeResultData instead") +} + +type UnknownOpenActionResult { + address: EvmAddress! + category: OpenActionCategoryType + initReturnData: BlockchainData +} + +input UnknownReferenceModuleInput { + address: EvmAddress! + data: BlockchainData! +} + +type UnknownReferenceModuleSettings { + """The data used to setup the module""" + initializeCalldata: BlockchainData + + """The data returned from the init module""" + initializeResultData: BlockchainData + + """True if the module is deemed as safe""" + verified: Boolean! + + """ + True if the module can be signedless and use lens manager without a signature + """ + signlessApproved: Boolean! + + """ + True if the module can be sponsored through gasless so the user does not need to pay for gas + """ + sponsoredApproved: Boolean! + type: ReferenceModuleType! + contract: NetworkAddress! + + """ + The data used to setup the module which you can decode with your known ABI + """ + referenceModuleReturnData: BlockchainData @deprecated(reason: "Use initializeResultData instead") +} + +type UnknownSupportedModule { + moduleName: String! + contract: NetworkAddress! +} + +input UnlinkHandleFromProfileRequest { + """The full handle - namespace/localname""" + handle: Handle! +} + +""" +The URI value not this can be used in it can be a https OR different aka ar:// and ipfs:// +""" +scalar URI + +"""The url value""" +scalar URL + +type UserCurrentRateLimit { + hourAllowanceLeft: Int! + hourAllowanceUsed: Int! + hourAllowance: Int! + dayAllowanceLeft: Int! + dayAllowanceUsed: Int! + dayAllowance: Int! +} + +input UserCurrentRateLimitRequest { + userAddress: EvmAddress! + profileId: ProfileId +} + +type UserCurrentRateLimitResult { + momoka: UserCurrentRateLimit! + onchain: UserCurrentRateLimit! +} + +input UserPoapsQueryRequest { + limit: LimitType + cursor: Cursor + for: ProfileId! +} + +type UserSigNonces { + lensHubOnchainSigNonce: Nonce! + lensTokenHandleRegistryOnchainSigNonce: Nonce! + lensPublicActProxyOnchainSigNonce: Nonce! +} + +"""The guid uuid value""" +scalar UUID + +input ValidatePublicationMetadataRequest { + rawURI: URI + json: String +} + +input VerifyRequest { + """The access token to verify""" + accessToken: Jwt! +} + +type Video { + mimeType: MimeType + uri: URI! +} + +type VideoMetadataV3 { + id: String! + rawURI: URI! + locale: Locale! + tags: [String!] + contentWarning: PublicationContentWarningType + hideFromFeed: Boolean! + appId: AppId + marketplace: MarketplaceMetadata + attributes: [MetadataAttribute!] + encryptedWith: PublicationMetadataEncryptionStrategy + asset: PublicationMetadataMediaVideo! + attachments: [PublicationMetadataMedia!] + isShortVideo: Boolean! + + """The title of the video. Empty if not set.""" + title: String! + + """Optional content. Empty if not set.""" + content: EncryptableMarkdown! +} + +"""Represents NULL values""" +scalar Void + +input WalletAuthenticationToProfileAuthenticationRequest { + """ + This can convert a wallet token to a profile token if you now onboarded + """ + profileId: ProfileId! +} + +input WhoActedOnPublicationRequest { + limit: LimitType + cursor: Cursor + on: PublicationId! + where: WhoActedOnPublicationWhere + + """The order by which to sort the profiles""" + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input WhoActedOnPublicationWhere { + anyOf: [OpenActionFilter!]! +} + +input WhoHaveBlockedRequest { + limit: LimitType + cursor: Cursor +} + +input WhoReactedPublicationRequest { + limit: LimitType + cursor: Cursor + for: PublicationId! + where: WhoReactedPublicationWhere + + """The order by which to sort the profiles""" + orderBy: ProfilesOrderBy = PROFILE_CLASSIFIER +} + +input WhoReactedPublicationWhere { + anyOf: [PublicationReactionType!] +} + +type WorldcoinIdentity { + """If the profile has verified as a user""" + isHuman: Boolean! +} + +enum WorldcoinPhoneVerifyType { + PHONE + ORB +} + +input WorldcoinPhoneVerifyWebhookRequest { + nullifierHash: String! + signalType: WorldcoinPhoneVerifyType! + signal: EvmAddress! +} + diff --git a/src/upstream/lensv2/tests.rs b/src/upstream/lensv2/tests.rs new file mode 100644 index 00000000..e9ee462d --- /dev/null +++ b/src/upstream/lensv2/tests.rs @@ -0,0 +1,27 @@ +#[cfg(test)] +mod tests { + use crate::{ + error::Error, + tigergraph::vertex::Identity, + upstream::lensv2::LensV2, + upstream::Platform, + upstream::{Fetcher, Target}, + util::make_http_client, + }; + + #[tokio::test] + async fn test_fetch_by_lens_handle() -> Result<(), Error> { + let target = Target::Identity(Platform::Lens, String::from("sujiyan.lens")); + let _ = LensV2::fetch(&target).await?; + // let client = make_http_client(); + // let found = Identity::find_by_platform_identity( + // &client, + // &Platform::Ethereum, + // "0x0fefed77bb715e96f1c35c1a4e0d349563d6f6c0", + // ) + // .await? + // .expect("Record not found"); + // print!("found: {:?}", found); + Ok(()) + } +} diff --git a/src/upstream/mod.rs b/src/upstream/mod.rs index e6ba1c3b..1cef5e07 100644 --- a/src/upstream/mod.rs +++ b/src/upstream/mod.rs @@ -6,7 +6,7 @@ mod ens_reverse; mod farcaster; mod keybase; mod knn3; -mod lens; +mod lensv2; mod proof_client; mod rss3; mod space_id; @@ -23,8 +23,8 @@ use crate::{ upstream::{ aggregation::Aggregation, crossbell::Crossbell, dotbit::DotBit, ens_reverse::ENSReverseLookup, farcaster::Farcaster, keybase::Keybase, knn3::Knn3, - lens::Lens, proof_client::ProofClient, rss3::Rss3, space_id::SpaceId, - sybil_list::SybilList, the_graph::TheGraph, unstoppable::UnstoppableDomains, + proof_client::ProofClient, rss3::Rss3, space_id::SpaceId, sybil_list::SybilList, + the_graph::TheGraph, unstoppable::UnstoppableDomains, }, util::hashset_append, }; @@ -169,7 +169,6 @@ pub async fn fetch_one(target: &Target) -> Result, Error> { DotBit::fetch(target), UnstoppableDomains::fetch(target), SpaceId::fetch(target), - Lens::fetch(target), Crossbell::fetch(target), TheGraph::fetch(target), ]) From 0dfd9b4dd1b5e90e013c27c3506dd3b8e9d61393 Mon Sep 17 00:00:00 2001 From: ZhongFuze Date: Thu, 21 Mar 2024 20:16:58 +0800 Subject: [PATCH 2/6] [!] upgrade: time's functions --- Cargo.lock | 107 ++++++++++++++++++++---- Cargo.toml | 2 +- src/controller/tigergraphql/contract.rs | 2 +- src/controller/tigergraphql/hold.rs | 6 +- src/controller/tigergraphql/identity.rs | 8 +- src/controller/tigergraphql/proof.rs | 4 +- src/controller/tigergraphql/resolve.rs | 6 +- src/error/mod.rs | 3 + src/tigergraph/edge/hold.rs | 2 +- src/tigergraph/edge/proof.rs | 2 +- src/tigergraph/edge/resolve.rs | 2 +- src/tigergraph/vertex/contract.rs | 2 +- src/tigergraph/vertex/identity.rs | 2 +- src/upstream/aggregation/tests.rs | 7 +- src/upstream/dotbit/tests.rs | 5 +- src/upstream/proof_client/tests.rs | 5 +- src/upstream/rss3/mod.rs | 16 +++- src/util/mod.rs | 36 ++++++-- 18 files changed, 163 insertions(+), 54 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index d1da5e8e..b0d5c85e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -520,7 +520,7 @@ dependencies = [ "base64 0.21.7", "bytes 1.5.0", "http 0.2.12", - "http-body", + "http-body 0.4.6", "http-serde", "query_map", "serde", @@ -1567,6 +1567,29 @@ dependencies = [ "pin-project-lite", ] +[[package]] +name = "http-body" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" +dependencies = [ + "bytes 1.5.0", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" +dependencies = [ + "bytes 1.5.0", + "futures-core", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", +] + [[package]] name = "http-client" version = "6.5.3" @@ -1637,7 +1660,7 @@ dependencies = [ "futures-util", "h2", "http 0.2.12", - "http-body", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -1649,6 +1672,21 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" +dependencies = [ + "bytes 1.5.0", + "http 1.1.0", + "http-body 1.0.0", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + [[package]] name = "hyper-tls" version = "0.5.0" @@ -1656,12 +1694,48 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes 1.5.0", - "hyper", + "hyper 0.14.28", "native-tls", "tokio", "tokio-native-tls", ] +[[package]] +name = "hyper-tls" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" +dependencies = [ + "bytes 1.5.0", + "http-body-util", + "hyper 1.2.0", + "hyper-util", + "native-tls", + "tokio", + "tokio-native-tls", + "tower-service", +] + +[[package]] +name = "hyper-util" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" +dependencies = [ + "bytes 1.5.0", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body 1.0.0", + "hyper 1.2.0", + "pin-project-lite", + "socket2 0.5.6", + "tokio", + "tower", + "tower-service", + "tracing", +] + [[package]] name = "iana-time-zone" version = "0.1.60" @@ -1880,8 +1954,8 @@ dependencies = [ "encoding_rs", "futures", "http 0.2.12", - "http-body", - "hyper", + "http-body 0.4.6", + "hyper 0.14.28", "lambda_runtime", "mime", "percent-encoding", @@ -1903,9 +1977,9 @@ dependencies = [ "bytes 1.5.0", "futures", "http 0.2.12", - "http-body", + "http-body 0.4.6", "http-serde", - "hyper", + "hyper 0.14.28", "lambda_runtime_api_client", "serde", "serde_json", @@ -1923,7 +1997,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "690c5ae01f3acac8c9c3348b556fc443054e9b7f1deaf53e9ebab716282bf0ed" dependencies = [ "http 0.2.12", - "hyper", + "hyper 0.14.28", "tokio", "tower-service", ] @@ -2679,8 +2753,8 @@ dependencies = [ "futures", "gql_client", "http 0.2.12", - "hyper", - "hyper-tls", + "hyper 0.14.28", + "hyper-tls 0.6.0", "insta", "isahc 1.7.2", "lambda_http", @@ -2722,9 +2796,9 @@ dependencies = [ "futures-util", "h2", "http 0.2.12", - "http-body", - "hyper", - "hyper-tls", + "http-body 0.4.6", + "hyper 0.14.28", + "hyper-tls 0.5.0", "ipnet", "js-sys", "log", @@ -3069,9 +3143,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.13.1" +version = "1.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6ecd384b10a64542d77071bd64bd7b231f4ed5940fba55e98c3de13824cf3d7" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" [[package]] name = "socket2" @@ -3492,6 +3566,7 @@ dependencies = [ "futures-util", "pin-project", "pin-project-lite", + "tokio", "tower-layer", "tower-service", "tracing", @@ -3784,7 +3859,7 @@ dependencies = [ "futures-util", "headers", "http 0.2.12", - "hyper", + "hyper 0.14.28", "log", "mime", "mime_guess", diff --git a/Cargo.toml b/Cargo.toml index 91335895..ed014913 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,7 +32,7 @@ url = "2.2" lambda_runtime = "0.8.0" lambda_http = "0.8.0" hyper = { version = "0.14.17", features = ["full"] } -hyper-tls = "0.5" +hyper-tls = "*" warp = { version = "0.3" } typetag = "0.2" diff --git a/src/controller/tigergraphql/contract.rs b/src/controller/tigergraphql/contract.rs index c67bf020..5f2ca554 100644 --- a/src/controller/tigergraphql/contract.rs +++ b/src/controller/tigergraphql/contract.rs @@ -32,6 +32,6 @@ impl ContractRecord { /// When this connection is fetched by us RelationService. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } } diff --git a/src/controller/tigergraphql/hold.rs b/src/controller/tigergraphql/hold.rs index a54b088d..573614db 100644 --- a/src/controller/tigergraphql/hold.rs +++ b/src/controller/tigergraphql/hold.rs @@ -46,17 +46,17 @@ impl HoldRecord { /// When the transaction happened. May not be provided by upstream. async fn created_at(&self) -> Option { - self.created_at.map(|dt| dt.timestamp()) + self.created_at.map(|dt| dt.and_utc().timestamp()) } /// When this HODLâ„¢ relation is fetched by us RelationService. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } /// When the transaction happened. May not be provided by upstream. async fn expired_at(&self) -> Option { - self.expired_at.map(|dt| dt.timestamp()) + self.expired_at.map(|dt| dt.and_utc().timestamp()) } /// NFT Category. See `availableNftCategories` for all values available. diff --git a/src/controller/tigergraphql/identity.rs b/src/controller/tigergraphql/identity.rs index 187929c1..c7aec276 100644 --- a/src/controller/tigergraphql/identity.rs +++ b/src/controller/tigergraphql/identity.rs @@ -121,21 +121,21 @@ impl IdentityRecord { /// e.g. `Twitter` has a `created_at` in the user profile API. /// but `Ethereum` is obviously no such thing. async fn created_at(&self) -> Option { - self.created_at.map(|dt| dt.timestamp()) + self.created_at.map(|dt| dt.and_utc().timestamp()) } /// When this Identity is added into this database. /// Second-based unix timestamp. /// Generated by us. async fn added_at(&self) -> i64 { - self.added_at.timestamp() + self.added_at.and_utc().timestamp() } /// When it is updated (re-fetched) by us RelationService. /// Second-based unix timestamp. /// Managed by us. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } /// Neighbor identity from current. Flattened. @@ -234,7 +234,7 @@ impl IdentityRecord { if !vec![Platform::Dotbit, Platform::ENS].contains(&self.platform) { return None; } - self.expired_at.map(|dt| dt.timestamp()) + self.expired_at.map(|dt| dt.and_utc().timestamp()) } /// reverse flag can be used as a filtering for Identity which type is domain system. diff --git a/src/controller/tigergraphql/proof.rs b/src/controller/tigergraphql/proof.rs index 8e6ead7b..96296398 100644 --- a/src/controller/tigergraphql/proof.rs +++ b/src/controller/tigergraphql/proof.rs @@ -33,12 +33,12 @@ impl ProofRecord { /// When this connection is recorded in upstream platform (if platform gives such data). async fn created_at(&self) -> Option { - self.created_at.map(|ca| ca.timestamp()) + self.created_at.map(|ca| ca.and_utc().timestamp()) } /// When this connection is fetched by us RelationService. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } /// Who collects this data. diff --git a/src/controller/tigergraphql/resolve.rs b/src/controller/tigergraphql/resolve.rs index b0e84695..ab5a54b6 100644 --- a/src/controller/tigergraphql/resolve.rs +++ b/src/controller/tigergraphql/resolve.rs @@ -46,7 +46,7 @@ impl ResolveReverse { /// When this connection is fetched by us RelationService. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } /// `reverse`: Return `True` or `False`. Show domain is primary domain or not. @@ -86,7 +86,7 @@ impl ResolveEdge { /// When this connection is fetched by us RelationService. async fn updated_at(&self) -> i64 { - self.updated_at.timestamp() + self.updated_at.and_utc().timestamp() } /// `resolved`: Find an Ethereum wallet using ENS name or .bit alias. @@ -114,7 +114,7 @@ impl ResolveEdge { /// `expiredAt` Expiration time of this domain name async fn expired_at(&self) -> Option { - self.expired_at.map(|dt| dt.timestamp()) + self.expired_at.map(|dt| dt.and_utc().timestamp()) } } diff --git a/src/error/mod.rs b/src/error/mod.rs index 2adafd86..76001b66 100644 --- a/src/error/mod.rs +++ b/src/error/mod.rs @@ -33,6 +33,8 @@ pub enum Error { EnumParseError(#[from] strum::ParseError), #[error("Parse Int error: {0}")] ParseIntError(#[from] std::num::ParseIntError), + #[error("Parse Datetime error: {0}")] + DatetimeParseError(#[from] chrono::ParseError), #[error("GraphQL error: {0}")] GraphQLError(String), #[error("PoolError error: {0}")] @@ -60,6 +62,7 @@ impl Error { Error::EnumParseError(_) => StatusCode::BAD_REQUEST, Error::GraphQLError(_) => StatusCode::INTERNAL_SERVER_ERROR, Error::ParseIntError(_) => StatusCode::INTERNAL_SERVER_ERROR, + Error::DatetimeParseError(_) => StatusCode::INTERNAL_SERVER_ERROR, Error::UuidError(_) => StatusCode::BAD_REQUEST, Error::PoolError(_) => StatusCode::INTERNAL_SERVER_ERROR, Error::IsahcError(_) => StatusCode::INTERNAL_SERVER_ERROR, diff --git a/src/tigergraph/edge/hold.rs b/src/tigergraph/edge/hold.rs index 55935b8a..91d5a696 100644 --- a/src/tigergraph/edge/hold.rs +++ b/src/tigergraph/edge/hold.rs @@ -429,7 +429,7 @@ struct NftHolder { impl Hold { pub fn is_outdated(&self) -> bool { - let outdated_in = Duration::hours(8); + let outdated_in = Duration::try_hours(8).unwrap(); self.updated_at .checked_add_signed(outdated_in) .unwrap() diff --git a/src/tigergraph/edge/proof.rs b/src/tigergraph/edge/proof.rs index 67d8d220..ef9923a4 100644 --- a/src/tigergraph/edge/proof.rs +++ b/src/tigergraph/edge/proof.rs @@ -237,7 +237,7 @@ impl Wrapper for Proof { impl Proof { pub fn is_outdated(&self) -> bool { - let outdated_in = Duration::days(1); + let outdated_in = Duration::try_days(1).unwrap(); self.updated_at .checked_add_signed(outdated_in) .unwrap() diff --git a/src/tigergraph/edge/resolve.rs b/src/tigergraph/edge/resolve.rs index efb315e9..f51f36da 100644 --- a/src/tigergraph/edge/resolve.rs +++ b/src/tigergraph/edge/resolve.rs @@ -535,7 +535,7 @@ impl From for ResolveEdge { impl Resolve { pub fn is_outdated(&self) -> bool { - let outdated_in = Duration::days(1); + let outdated_in = Duration::try_days(1).unwrap(); self.updated_at .checked_add_signed(outdated_in) .unwrap() diff --git a/src/tigergraph/vertex/contract.rs b/src/tigergraph/vertex/contract.rs index 812718ae..50238e5b 100644 --- a/src/tigergraph/vertex/contract.rs +++ b/src/tigergraph/vertex/contract.rs @@ -215,7 +215,7 @@ impl Contract { /// Outdated in 1 hour #[allow(dead_code)] fn is_outdated(&self) -> bool { - let outdated_in = Duration::hours(1); + let outdated_in = Duration::try_hours(1).unwrap(); self.updated_at .checked_add_signed(outdated_in) .unwrap() diff --git a/src/tigergraph/vertex/identity.rs b/src/tigergraph/vertex/identity.rs index 3ba318a2..26b77720 100644 --- a/src/tigergraph/vertex/identity.rs +++ b/src/tigergraph/vertex/identity.rs @@ -518,7 +518,7 @@ impl Identity { /// Judge if this record is outdated and should be refetched. pub fn is_outdated(&self) -> bool { - let outdated_in = Duration::hours(1); + let outdated_in = Duration::try_hours(1).unwrap(); self.updated_at .checked_add_signed(outdated_in) .unwrap() diff --git a/src/upstream/aggregation/tests.rs b/src/upstream/aggregation/tests.rs index 97289e08..1f458d05 100644 --- a/src/upstream/aggregation/tests.rs +++ b/src/upstream/aggregation/tests.rs @@ -35,14 +35,11 @@ async fn test_parse_timestamp() -> Result<(), Error> { let ns_time: u32 = (ct_time.parse::().unwrap() % 1000).try_into().unwrap(); println!("nt_time {}", ns_time); - let created_at = timestamp_to_naive( - ct_time.parse::().unwrap() / 1000, - ns_time, - ); + let created_at = timestamp_to_naive(ct_time.parse::().unwrap() / 1000, ns_time); let updated_at = timestamp_to_naive(ct_time.parse::().unwrap() / 1000, ns_time).unwrap(); println!("{}", ct_time.parse::().unwrap()); println!("{:?}", created_at); - println!("{}", updated_at.timestamp()); + println!("{}", updated_at.and_utc().timestamp()); Ok(()) } diff --git a/src/upstream/dotbit/tests.rs b/src/upstream/dotbit/tests.rs index d18ff35a..d50e9df4 100644 --- a/src/upstream/dotbit/tests.rs +++ b/src/upstream/dotbit/tests.rs @@ -53,7 +53,10 @@ async fn test_dotbit_reverse_record() -> Result<(), Error> { .await? .expect("Record not found"); tracing::debug!("found {:?}", found); - assert_eq!(found.updated_at.timestamp(), naive_now().timestamp()); + assert_eq!( + found.updated_at.and_utc().timestamp(), + naive_now().and_utc().timestamp() + ); Ok(()) } diff --git a/src/upstream/proof_client/tests.rs b/src/upstream/proof_client/tests.rs index bb61d7a7..f6bf1afa 100644 --- a/src/upstream/proof_client/tests.rs +++ b/src/upstream/proof_client/tests.rs @@ -20,7 +20,10 @@ async fn test_smoke() -> Result<(), Error> { .await? .expect("Record not found"); - assert_eq!(found.updated_at.timestamp(), naive_now().timestamp()); + assert_eq!( + found.updated_at.and_utc().timestamp(), + naive_now().and_utc().timestamp() + ); Ok(()) } diff --git a/src/upstream/rss3/mod.rs b/src/upstream/rss3/mod.rs index 6abb61a7..41ea15df 100644 --- a/src/upstream/rss3/mod.rs +++ b/src/upstream/rss3/mod.rs @@ -9,9 +9,10 @@ use crate::tigergraph::vertex::{Contract, Identity}; use crate::upstream::{ Chain, ContractCategory, DataSource, Fetcher, Platform, Target, TargetProcessedList, }; -use crate::util::{make_client, make_http_client, naive_now, parse_body, request_with_timeout}; +use crate::util::{ + make_client, make_http_client, naive_now, parse_body, request_with_timeout, utc_to_naive, +}; use async_trait::async_trait; -use chrono::{DateTime, NaiveDateTime}; use futures::future::join_all; use http::uri::InvalidUri; use hyper::{Body, Method}; @@ -168,8 +169,15 @@ async fn fetch_nfts_by_account( } async fn save_item(p: ResultItem) -> Result { - let creataed_at = DateTime::parse_from_rfc3339(&p.timestamp).unwrap(); - let created_at_naive = NaiveDateTime::from_timestamp_opt(creataed_at.timestamp(), 0); + // let creataed_at = DateTime::parse_from_rfc3339(&p.timestamp).unwrap(); + // let created_at_naive = NaiveDateTime::from_timestamp_opt(creataed_at.timestamp(), 0); + let created_at_naive = match p.timestamp.as_ref() { + "" => None, + timestamp => match utc_to_naive(timestamp.to_string()) { + Ok(naive_dt) => Some(naive_dt), + Err(_) => None, // You may want to handle this error differently + }, + }; let cli = make_http_client(); let from: Identity = Identity { diff --git a/src/util/mod.rs b/src/util/mod.rs index 9b7e0f4d..9be4bb8f 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -14,7 +14,7 @@ const DEFAULT_TIMEOUT: std::time::Duration = std::time::Duration::from_secs(5); /// Returns current UNIX timestamp (unit: second). pub fn timestamp() -> i64 { - naive_now().timestamp() + naive_now().and_utc().timestamp() } /// Work as `NaiveDateTime::now()` @@ -35,17 +35,29 @@ pub fn parse_timestamp(timestamp: &str) -> Result { /// Convert timestamp into NaiveDateTime struct. pub fn timestamp_to_naive(ts: i64, ms: u32) -> Option { - NaiveDateTime::from_timestamp_opt(ts, ms * 1_000_000) + match DateTime::from_timestamp(ts, ms * 1_000_000) { + None => None, + Some(dt_utc) => Some(dt_utc.naive_utc()), + } } /// Convert timestamp into NaiveDateTime struct. pub fn option_timestamp_to_naive(opt_ts: Option, ms: u32) -> Option { match opt_ts { - Some(opt_ts) => NaiveDateTime::from_timestamp_opt(opt_ts, ms * 1_000_000), None => None, + Some(opt_ts) => match DateTime::from_timestamp(opt_ts, ms * 1_000_000) { + None => None, + Some(dt_utc) => Some(dt_utc.naive_utc()), + }, } } +pub fn utc_to_naive(s: String) -> Result { + // The format "%Y-%m-%dT%H:%M:%S%.3fZ" + let dt = DateTime::parse_from_rfc3339(&s).map_err(|err| Error::DatetimeParseError(err))?; + Ok(dt.naive_utc()) +} + pub fn make_client() -> Client> { let https = HttpsConnector::new(); // let mut http = HttpConnector::new(); @@ -136,7 +148,7 @@ pub fn option_naive_datetime_from_utc_string<'de, D>( where D: Deserializer<'de>, { - let opt_s = Option::::deserialize(deserializer)?; + let opt_s: Option = Option::::deserialize(deserializer)?; match opt_s { Some(s) => { @@ -185,11 +197,18 @@ where D: Deserializer<'de>, { let timestamp_ms: i64 = Deserialize::deserialize(deserializer)?; - NaiveDateTime::from_timestamp_opt( + // NaiveDateTime::from_timestamp_opt( + // timestamp_ms / 1000, // Convert milliseconds to seconds + // (timestamp_ms % 1000) as u32 * 1_000_000, // Convert remainder to nanoseconds + // ) + // .ok_or_else(|| serde::de::Error::custom("Invalid timestamp")) + match DateTime::from_timestamp( timestamp_ms / 1000, // Convert milliseconds to seconds (timestamp_ms % 1000) as u32 * 1_000_000, // Convert remainder to nanoseconds - ) - .ok_or_else(|| serde::de::Error::custom("Invalid timestamp")) + ) { + None => Err(serde::de::Error::custom("Invalid timestamp")), + Some(dt_utc) => Ok(dt_utc.naive_utc()), + } } pub fn naive_datetime_to_milliseconds( @@ -199,6 +218,7 @@ pub fn naive_datetime_to_milliseconds( where S: Serializer, { - let timestamp_ms = dt.timestamp() * 1000 + (dt.timestamp_subsec_millis() as i64); + let timestamp_ms = + dt.and_utc().timestamp() * 1000 + (dt.and_utc().timestamp_subsec_millis() as i64); Serialize::serialize(×tamp_ms, serializer) } From e11cfc5958d1670ac7901ea77a72da34f117007e Mon Sep 17 00:00:00 2001 From: ZhongFuze Date: Thu, 21 Mar 2024 20:17:53 +0800 Subject: [PATCH 3/6] [#] #122 lens-v2 fetching and saving --- src/upstream/lensv2/mod.rs | 170 ++++++++++++++++++++++++++++++----- src/upstream/lensv2/tests.rs | 33 +++++-- 2 files changed, 171 insertions(+), 32 deletions(-) diff --git a/src/upstream/lensv2/mod.rs b/src/upstream/lensv2/mod.rs index 2fd15811..4c498894 100644 --- a/src/upstream/lensv2/mod.rs +++ b/src/upstream/lensv2/mod.rs @@ -11,18 +11,12 @@ use crate::tigergraph::vertex::Identity; use crate::upstream::{ DataFetcher, DataSource, DomainNameSystem, Fetcher, Platform, Target, TargetProcessedList, }; -use crate::util::{ - make_client, make_http_client, naive_now, option_naive_datetime_from_utc_string, parse_body, -}; +use crate::util::{make_http_client, naive_now, utc_to_naive}; use async_trait::async_trait; -use cynic::QueryFragment; use cynic::{http::SurfExt, QueryBuilder}; -use http::uri::InvalidUri; -use hyper::body; -use hyper::Method; -use hyper::{client::HttpConnector, Body, Client}; -use serde::{Deserialize, Serialize}; -use tracing::{debug, info, warn}; +use hyper::{client::HttpConnector, Client}; +use tracing::{trace, warn}; +use uuid::Uuid; mod schema { cynic::use_schema!("src/upstream/lensv2/schema.graphql"); @@ -31,7 +25,11 @@ mod schema { // Query by Handles #[derive(cynic::QueryVariables, Debug, Default)] pub struct ProfilesRequestVariables { + #[cynic(skip_serializing_if = "Option::is_none")] pub handles: Option>, + #[cynic(skip_serializing_if = "Option::is_none")] + #[cynic(rename = "ownedBy")] + pub owned_by: Option>, } #[derive(cynic::QueryFragment, Debug)] @@ -41,7 +39,7 @@ pub struct ProfilesRequestVariables { variables = "ProfilesRequestVariables" )] pub struct ProfileQueryByHandles { - #[arguments(request: { where: { handles: $handles}} )] + #[arguments(request: { where: { handles: $handles, ownedBy: $owned_by}} )] pub profiles: PaginatedProfileResult, } @@ -51,7 +49,7 @@ pub struct PaginatedProfileResult { pub items: Vec, } -#[derive(cynic::QueryFragment, Debug)] +#[derive(cynic::QueryFragment, Debug, Clone)] #[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] pub struct Profile { pub id: ProfileId, @@ -62,20 +60,20 @@ pub struct Profile { pub tx_hash: TxHash, } -#[derive(cynic::QueryFragment, Debug)] +#[derive(cynic::QueryFragment, Debug, Clone)] #[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] pub struct ProfileMetadata { pub display_name: Option, } -#[derive(cynic::QueryFragment, Debug)] +#[derive(cynic::QueryFragment, Debug, Clone)] #[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] pub struct NetworkAddress { pub address: EvmAddress, pub chain_id: ChainId, } -#[derive(cynic::QueryFragment, Debug)] +#[derive(cynic::QueryFragment, Debug, Clone)] #[cynic(schema_path = "src/upstream/lensv2/schema.graphql")] pub struct HandleInfo { pub id: TokenId, @@ -86,7 +84,7 @@ pub struct HandleInfo { } #[derive(cynic::Scalar, Debug, Clone)] -pub struct ChainId(pub String); +pub struct ChainId(pub u32); #[derive(cynic::Scalar, Debug, Clone)] pub struct DateTime(pub String); @@ -129,12 +127,12 @@ impl Fetcher for LensV2 { async fn fetch_by_lens_handle(target: &Target) -> Result { let target_var = target.identity()?; - let handle = target_var.trim_end_matches(".lens"); - let full_handle = format!("lens/{}", handle); + let handle_name = target_var.trim_end_matches(".lens"); + let full_handle = format!("lens/{}", handle_name); let operation = ProfileQueryByHandles::build(ProfilesRequestVariables { - handles: Some(vec![Handle(full_handle)]), + handles: Some(vec![Handle(full_handle.clone())]), + owned_by: None, }); - println!("{}", operation.query); let response = surf::post(C.upstream.lens_api.url.clone()) .run_graphql(operation) .await; @@ -146,10 +144,136 @@ async fn fetch_by_lens_handle(target: &Target) -> Result = Vec::new(); + for profile in profiles.iter() { + let t = save_profile(&cli, profile).await?; + if let Some(t) = t { + next_targets.push(t); + } + } + + Ok(next_targets) } async fn fetch_by_wallet(target: &Target) -> Result { - todo!() + let target_var = target.identity()?; + let owned_by_evm = target_var.to_lowercase(); + let operation = ProfileQueryByHandles::build(ProfilesRequestVariables { + handles: None, + owned_by: Some(vec![EvmAddress(owned_by_evm.clone())]), + }); + let response = surf::post(C.upstream.lens_api.url.clone()) + .run_graphql(operation) + .await; + + if response.is_err() { + warn!( + "LensV2 target {} | Failed to fetch: {}", + target, + response.unwrap_err(), + ); + return Ok(vec![]); + } + let cli = make_http_client(); + let profiles = response + .unwrap() + .data + .map_or(vec![], |data| data.profiles.items); + let mut next_targets: Vec = Vec::new(); + for profile in profiles.iter() { + let t = save_profile(&cli, profile).await?; + if let Some(t) = t { + next_targets.push(t); + } + } + + Ok(next_targets) +} + +async fn save_profile( + client: &Client, + profile: &Profile, +) -> Result, Error> { + if profile.handle.clone().is_none() { + return Ok(None); + } + let handle_info = profile.handle.clone().unwrap(); + let owner = profile.owned_by.address.0.to_ascii_lowercase(); + let lens_handle = format!("{}.{}", handle_info.local_name, handle_info.namespace); + let lens_display_name = profile + .metadata + .clone() + .map_or(None, |metadata| metadata.display_name); + let created_at = utc_to_naive(profile.created_at.clone().0)?; + + let addr: Identity = Identity { + uuid: Some(Uuid::new_v4()), + platform: Platform::Ethereum, + identity: owner.clone(), + uid: None, + created_at: None, + display_name: None, + added_at: naive_now(), + avatar_url: None, + profile_url: None, + updated_at: naive_now(), + expired_at: None, + reverse: Some(false), + }; + + let lens: Identity = Identity { + uuid: Some(Uuid::new_v4()), + platform: Platform::Lens, + identity: lens_handle.clone(), + uid: Some(profile.id.clone().0.to_string()), + created_at: Some(created_at), + display_name: lens_display_name, + added_at: naive_now(), + avatar_url: None, + profile_url: Some("https://hey.xyz/u/".to_owned() + &handle_info.local_name), + updated_at: naive_now(), + expired_at: None, + reverse: Some(true), + }; + + let hold: Hold = Hold { + uuid: Uuid::new_v4(), + source: DataSource::Lens, + transaction: Some(profile.tx_hash.clone().0), + id: profile.id.clone().0.to_string(), + created_at: Some(created_at), + updated_at: naive_now(), + fetcher: DataFetcher::RelationService, + expired_at: None, + }; + + let resolve: Resolve = Resolve { + uuid: Uuid::new_v4(), + source: DataSource::Lens, + system: DomainNameSystem::Lens, + name: lens_handle.clone(), + fetcher: DataFetcher::RelationService, + updated_at: naive_now(), + }; + + // field `is_default` has been canceled in lens-v2-api + let reverse: Resolve = Resolve { + uuid: Uuid::new_v4(), + source: DataSource::Lens, + system: DomainNameSystem::Lens, + name: lens_handle.clone(), + fetcher: DataFetcher::RelationService, + updated_at: naive_now(), + }; + trace!("LensV2 Ethereum({}) handle: {}", owner, lens_handle); + create_identity_to_identity_hold_record(client, &addr, &lens, &hold).await?; + create_identity_domain_resolve_record(client, &lens, &addr, &resolve).await?; + create_identity_domain_reverse_resolve_record(client, &addr, &lens, &reverse).await?; + Ok(Some(Target::Identity(Platform::Ethereum, owner.clone()))) } diff --git a/src/upstream/lensv2/tests.rs b/src/upstream/lensv2/tests.rs index e9ee462d..3dd827ce 100644 --- a/src/upstream/lensv2/tests.rs +++ b/src/upstream/lensv2/tests.rs @@ -9,19 +9,34 @@ mod tests { util::make_http_client, }; + #[tokio::test] + async fn test_fetch_by_wallet() -> Result<(), Error> { + let target = Target::Identity( + Platform::Ethereum, + String::from("0x934B510D4C9103E6a87AEf13b816fb080286D649"), + ); + let _ = LensV2::fetch(&target).await?; + let client = make_http_client(); + let found = Identity::find_by_platform_identity(&client, &Platform::Lens, "sujiyan.lens") + .await? + .expect("Record not found"); + print!("found: {:?}", found); + Ok(()) + } + #[tokio::test] async fn test_fetch_by_lens_handle() -> Result<(), Error> { let target = Target::Identity(Platform::Lens, String::from("sujiyan.lens")); let _ = LensV2::fetch(&target).await?; - // let client = make_http_client(); - // let found = Identity::find_by_platform_identity( - // &client, - // &Platform::Ethereum, - // "0x0fefed77bb715e96f1c35c1a4e0d349563d6f6c0", - // ) - // .await? - // .expect("Record not found"); - // print!("found: {:?}", found); + let client = make_http_client(); + let found = Identity::find_by_platform_identity( + &client, + &Platform::Ethereum, + &String::from("0x934B510D4C9103E6a87AEf13b816fb080286D649").to_lowercase(), + ) + .await? + .expect("Record not found"); + print!("found: {:?}", found); Ok(()) } } From 4df3851d4dcadbb1aedf39748ac8b42102cb18b9 Mon Sep 17 00:00:00 2001 From: Nyk Ma Date: Thu, 21 Mar 2024 20:34:37 +0800 Subject: [PATCH 4/6] [#][WIP][Dep] update NOTE: will break build --- .envrc | 1 + .github/workflows/build_nix.yml | 13 ++ Cargo.lock | 263 +++++--------------------------- Cargo.toml | 8 +- flake.lock | 94 ++++++++++++ flake.nix | 21 +++ 6 files changed, 169 insertions(+), 231 deletions(-) create mode 100644 .envrc create mode 100644 .github/workflows/build_nix.yml create mode 100644 flake.lock create mode 100644 flake.nix diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..3550a30f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.github/workflows/build_nix.yml b/.github/workflows/build_nix.yml new file mode 100644 index 00000000..2f684e11 --- /dev/null +++ b/.github/workflows/build_nix.yml @@ -0,0 +1,13 @@ +name: "Build legacy Nix package on Ubuntu" + +on: + push: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: cachix/install-nix-action@v12 + - name: Building package + run: nix-build . -A defaultPackage.x86_64-linux diff --git a/Cargo.lock b/Cargo.lock index b0d5c85e..97156ef7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -199,58 +199,26 @@ dependencies = [ "once_cell", ] -[[package]] -name = "async-graphql" -version = "5.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b35ef8f9be23ee30fe1eb1cf175c689bc33517c6c6d0fd0669dade611e5ced7f" -dependencies = [ - "async-graphql-derive 5.0.10", - "async-graphql-parser 5.0.10", - "async-graphql-value 5.0.10", - "async-stream", - "async-trait", - "base64 0.13.1", - "bytes 1.5.0", - "chrono", - "fast_chemail", - "fnv", - "futures-util", - "handlebars", - "http 0.2.12", - "indexmap 1.9.3", - "mime", - "multer 2.1.0", - "num-traits", - "once_cell", - "pin-project-lite", - "regex", - "serde", - "serde_json", - "serde_urlencoded", - "static_assertions", - "tempfile", - "thiserror", - "uuid", -] - [[package]] name = "async-graphql" version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "261fa27d5bff5afdf7beff291b3bc73f99d1529804c70e51b0fbc51e70b1c6a9" dependencies = [ - "async-graphql-derive 7.0.3", - "async-graphql-parser 7.0.3", - "async-graphql-value 7.0.3", + "async-graphql-derive", + "async-graphql-parser", + "async-graphql-value", "async-stream", "async-trait", "base64 0.21.7", "bytes 1.5.0", + "chrono", + "fast_chemail", "fnv", "futures-util", + "handlebars", "http 1.1.0", - "indexmap 2.2.5", + "indexmap", "mime", "multer 3.0.0", "num-traits", @@ -261,23 +229,9 @@ dependencies = [ "serde_json", "serde_urlencoded", "static_assertions_next", + "tempfile", "thiserror", -] - -[[package]] -name = "async-graphql-derive" -version = "5.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1a0f6ceed3640b4825424da70a5107e79d48d9b2bc6318dfc666b2fc4777f8c4" -dependencies = [ - "Inflector", - "async-graphql-parser 5.0.10", - "darling 0.14.4", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 1.0.109", - "thiserror", + "uuid", ] [[package]] @@ -287,8 +241,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3188809947798ea6db736715a60cf645ba3b87ea031c710130e1476b48e45967" dependencies = [ "Inflector", - "async-graphql-parser 7.0.3", - "darling 0.20.8", + "async-graphql-parser", + "darling", "proc-macro-crate", "proc-macro2", "quote", @@ -297,42 +251,18 @@ dependencies = [ "thiserror", ] -[[package]] -name = "async-graphql-parser" -version = "5.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ecc308cd3bc611ee86c9cf19182d2b5ee583da40761970e41207f088be3db18f" -dependencies = [ - "async-graphql-value 5.0.10", - "pest", - "serde", - "serde_json", -] - [[package]] name = "async-graphql-parser" version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d4e65a0b83027f35b2a5d9728a098bc66ac394caa8191d2c65ed9eb2985cf3d8" dependencies = [ - "async-graphql-value 7.0.3", + "async-graphql-value", "pest", "serde", "serde_json", ] -[[package]] -name = "async-graphql-value" -version = "5.0.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d461325bfb04058070712296601dfe5e5bd6cdff84780a0a8c569ffb15c87eb3" -dependencies = [ - "bytes 1.5.0", - "indexmap 1.9.3", - "serde", - "serde_json", -] - [[package]] name = "async-graphql-value" version = "7.0.3" @@ -340,7 +270,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "68e40849c29a39012d38bff87bfed431f1ed6c53fbec493294c1045d61a7ae75" dependencies = [ "bytes 1.5.0", - "indexmap 2.2.5", + "indexmap", "serde", "serde_json", ] @@ -351,7 +281,7 @@ version = "7.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e901ea60bac5613a1c824da04c8e72906cf79efde5c56f657e3a4ac89624b0a5" dependencies = [ - "async-graphql 7.0.3", + "async-graphql", "futures-util", "http 0.2.12", "serde_json", @@ -520,7 +450,7 @@ dependencies = [ "base64 0.21.7", "bytes 1.5.0", "http 0.2.12", - "http-body 0.4.6", + "http-body", "http-serde", "query_map", "serde", @@ -895,7 +825,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a11d6119f9f0f55c9d7cff5189a7b318f35a7d2d6faa4872441ee521f65420b6" dependencies = [ "counter", - "darling 0.20.8", + "darling", "graphql-parser", "once_cell", "ouroboros", @@ -913,43 +843,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb81a5872a7774daf11caefb2ebe7166d9da12b1b69cf35661130b3c3fccbd61" dependencies = [ "cynic-codegen", - "darling 0.20.8", + "darling", "quote", "syn 2.0.53", ] -[[package]] -name = "darling" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" -dependencies = [ - "darling_core 0.14.4", - "darling_macro 0.14.4", -] - [[package]] name = "darling" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54e36fcd13ed84ffdfda6f5be89b31287cbb80c439841fe69e04841435464391" dependencies = [ - "darling_core 0.20.8", - "darling_macro 0.20.8", -] - -[[package]] -name = "darling_core" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" -dependencies = [ - "fnv", - "ident_case", - "proc-macro2", - "quote", - "strsim", - "syn 1.0.109", + "darling_core", + "darling_macro", ] [[package]] @@ -966,24 +872,13 @@ dependencies = [ "syn 2.0.53", ] -[[package]] -name = "darling_macro" -version = "0.14.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" -dependencies = [ - "darling_core 0.14.4", - "quote", - "syn 1.0.109", -] - [[package]] name = "darling_macro" version = "0.20.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a668eda54683121533a393014d8692171709ff57a7d61f187b6e782719f8933f" dependencies = [ - "darling_core 0.20.8", + "darling_core", "quote", "syn 2.0.53", ] @@ -1442,7 +1337,7 @@ dependencies = [ "futures-sink", "futures-util", "http 0.2.12", - "indexmap 2.2.5", + "indexmap", "slab", "tokio", "tokio-util", @@ -1567,29 +1462,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-body" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" -dependencies = [ - "bytes 1.5.0", - "http 1.1.0", -] - -[[package]] -name = "http-body-util" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0475f8b2ac86659c21b64320d5d653f9efe42acd2a4e560073ec61a155a34f1d" -dependencies = [ - "bytes 1.5.0", - "futures-core", - "http 1.1.0", - "http-body 1.0.0", - "pin-project-lite", -] - [[package]] name = "http-client" version = "6.5.3" @@ -1660,7 +1532,7 @@ dependencies = [ "futures-util", "h2", "http 0.2.12", - "http-body 0.4.6", + "http-body", "httparse", "httpdate", "itoa", @@ -1672,21 +1544,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "186548d73ac615b32a73aafe38fb4f56c0d340e110e5a200bcadbaf2e199263a" -dependencies = [ - "bytes 1.5.0", - "http 1.1.0", - "http-body 1.0.0", - "pin-project-lite", - "smallvec", - "tokio", - "want", -] - [[package]] name = "hyper-tls" version = "0.5.0" @@ -1694,46 +1551,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d6183ddfa99b85da61a140bea0efc93fdf56ceaa041b37d553518030827f9905" dependencies = [ "bytes 1.5.0", - "hyper 0.14.28", - "native-tls", - "tokio", - "tokio-native-tls", -] - -[[package]] -name = "hyper-tls" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" -dependencies = [ - "bytes 1.5.0", - "http-body-util", - "hyper 1.2.0", - "hyper-util", + "hyper", "native-tls", "tokio", "tokio-native-tls", - "tower-service", -] - -[[package]] -name = "hyper-util" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca38ef113da30126bbff9cd1705f9273e15d45498615d138b0c20279ac7a76aa" -dependencies = [ - "bytes 1.5.0", - "futures-channel", - "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.2.0", - "pin-project-lite", - "socket2 0.5.6", - "tokio", - "tower", - "tower-service", - "tracing", ] [[package]] @@ -1775,17 +1596,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "indexmap" -version = "1.9.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99" -dependencies = [ - "autocfg", - "hashbrown 0.12.3", - "serde", -] - [[package]] name = "indexmap" version = "2.2.5" @@ -1954,8 +1764,8 @@ dependencies = [ "encoding_rs", "futures", "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", + "http-body", + "hyper", "lambda_runtime", "mime", "percent-encoding", @@ -1977,9 +1787,9 @@ dependencies = [ "bytes 1.5.0", "futures", "http 0.2.12", - "http-body 0.4.6", + "http-body", "http-serde", - "hyper 0.14.28", + "hyper", "lambda_runtime_api_client", "serde", "serde_json", @@ -1997,7 +1807,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "690c5ae01f3acac8c9c3348b556fc443054e9b7f1deaf53e9ebab716282bf0ed" dependencies = [ "http 0.2.12", - "hyper 0.14.28", + "hyper", "tokio", "tower-service", ] @@ -2739,7 +2549,7 @@ name = "relation_server" version = "0.1.0" dependencies = [ "array_tool", - "async-graphql 5.0.10", + "async-graphql", "async-graphql-warp", "async-recursion", "async-trait", @@ -2753,8 +2563,8 @@ dependencies = [ "futures", "gql_client", "http 0.2.12", - "hyper 0.14.28", - "hyper-tls 0.6.0", + "hyper", + "hyper-tls", "insta", "isahc 1.7.2", "lambda_http", @@ -2796,9 +2606,9 @@ dependencies = [ "futures-util", "h2", "http 0.2.12", - "http-body 0.4.6", - "hyper 0.14.28", - "hyper-tls 0.5.0", + "http-body", + "hyper", + "hyper-tls", "ipnet", "js-sys", "log", @@ -3551,7 +3361,7 @@ version = "0.19.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421" dependencies = [ - "indexmap 2.2.5", + "indexmap", "toml_datetime", "winnow", ] @@ -3566,7 +3376,6 @@ dependencies = [ "futures-util", "pin-project", "pin-project-lite", - "tokio", "tower-layer", "tower-service", "tracing", @@ -3859,7 +3668,7 @@ dependencies = [ "futures-util", "headers", "http 0.2.12", - "hyper 0.14.28", + "hyper", "log", "mime", "mime_guess", diff --git a/Cargo.toml b/Cargo.toml index ed014913..ed20c09f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -31,8 +31,8 @@ http = "0.2.6" url = "2.2" lambda_runtime = "0.8.0" lambda_http = "0.8.0" -hyper = { version = "0.14.17", features = ["full"] } -hyper-tls = "*" +hyper = { version = "0.14.*", features = ["full", "backports", "deprecated"] } +hyper-tls = "0.5" warp = { version = "0.3" } typetag = "0.2" @@ -51,8 +51,8 @@ strum_macros = "*" strum = "*" # GraphQL -async-graphql = { version = "5", features = ["uuid", "chrono"] } -async-graphql-warp = "*" +async-graphql = { version = "7", features = ["uuid", "chrono"] } +async-graphql-warp = "7" dataloader = "0.16.0" deadpool = { version = "0.9.5", features = ["managed"] } num_cpus = "1.13.0" diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..6bd636f1 --- /dev/null +++ b/flake.lock @@ -0,0 +1,94 @@ +{ + "nodes": { + "naersk": { + "inputs": { + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1698420672, + "narHash": "sha256-/TdeHMPRjjdJub7p7+w55vyABrsJlt5QkznPYy55vKA=", + "owner": "nix-community", + "repo": "naersk", + "rev": "aeb58d5e8faead8980a807c840232697982d47b9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "naersk", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1710889954, + "narHash": "sha256-Pr6F5Pmd7JnNEMHHmspZ0qVqIBVxyZ13ik1pJtm2QXk=", + "path": "/nix/store/bv68i4l7g6s5sixxm0c9lcjdxhlkg0n5-source", + "rev": "7872526e9c5332274ea5932a0c3270d6e4724f3b", + "type": "path" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1710889954, + "narHash": "sha256-Pr6F5Pmd7JnNEMHHmspZ0qVqIBVxyZ13ik1pJtm2QXk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7872526e9c5332274ea5932a0c3270d6e4724f3b", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "naersk": "naersk", + "nixpkgs": "nixpkgs_2", + "utils": "utils" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "utils": { + "inputs": { + "systems": "systems" + }, + "locked": { + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..0e0817d2 --- /dev/null +++ b/flake.nix @@ -0,0 +1,21 @@ +{ + inputs = { + naersk.url = "github:nix-community/naersk/master"; + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + utils.url = "github:numtide/flake-utils"; + }; + + outputs = { self, nixpkgs, utils, naersk }: + utils.lib.eachDefaultSystem (system: + let + pkgs = import nixpkgs { inherit system; }; + naersk-lib = pkgs.callPackage naersk { }; + in + { + defaultPackage = naersk-lib.buildPackage ./.; + devShell = with pkgs; mkShell { + buildInputs = [ cargo rustc rustfmt rust-analyzer pre-commit rustPackages.clippy pkg-config openssl ]; + RUST_SRC_PATH = rustPlatform.rustLibSrc; + }; + }); +} From 0633f991adbaccdb692fdb51dc714fa8a4d1b562 Mon Sep 17 00:00:00 2001 From: Nyk Ma Date: Fri, 22 Mar 2024 00:47:52 +0800 Subject: [PATCH 5/6] [#][CI] nix build w/ cache --- .github/workflows/build_nix.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_nix.yml b/.github/workflows/build_nix.yml index 2f684e11..c7ebe33b 100644 --- a/.github/workflows/build_nix.yml +++ b/.github/workflows/build_nix.yml @@ -8,6 +8,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - uses: cachix/install-nix-action@v12 + - uses: cachix/install-nix-action@v26 + with: + github_access_token: ${{ secrets.GITHUB_TOKEN }} + - uses: cachix/cachix-action@v14 + with: + name: nextid-relation-service + authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}' - name: Building package - run: nix-build . -A defaultPackage.x86_64-linux + run: nix build From 2092442d0f27c4cd8094c6028c3a503c031d5b03 Mon Sep 17 00:00:00 2001 From: Nyk Ma Date: Fri, 22 Mar 2024 00:53:19 +0800 Subject: [PATCH 6/6] [#][CI] nix: build dep --- .github/workflows/build_nix.yml | 4 ++-- flake.nix | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build_nix.yml b/.github/workflows/build_nix.yml index c7ebe33b..0fbb8683 100644 --- a/.github/workflows/build_nix.yml +++ b/.github/workflows/build_nix.yml @@ -4,10 +4,10 @@ on: push: jobs: - build: + nix-build: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - uses: cachix/install-nix-action@v26 with: github_access_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/flake.nix b/flake.nix index 0e0817d2..3d1d1f53 100644 --- a/flake.nix +++ b/flake.nix @@ -12,7 +12,10 @@ naersk-lib = pkgs.callPackage naersk { }; in { - defaultPackage = naersk-lib.buildPackage ./.; + defaultPackage = naersk-lib.buildPackage { + src = ./.; + buildInputs = with pkgs; [ pkg-config openssl ]; + }; devShell = with pkgs; mkShell { buildInputs = [ cargo rustc rustfmt rust-analyzer pre-commit rustPackages.clippy pkg-config openssl ]; RUST_SRC_PATH = rustPlatform.rustLibSrc;