From 45a28ce2d5e3481a0e1933e6174391f330acd328 Mon Sep 17 00:00:00 2001 From: tompro Date: Mon, 24 Feb 2025 16:58:57 +0100 Subject: [PATCH] Offset store, db migration --- Cargo.lock | 2496 +++-------------- Cargo.toml | 8 +- payday_core/src/api/on_chain_api.rs | 2 +- payday_core/src/persistence/block_height.rs | 16 - payday_core/src/persistence/mod.rs | 2 +- payday_core/src/persistence/offset.rs | 16 + .../src/processor/on_chain_processor.rs | 16 +- payday_postgres/Cargo.toml | 4 + payday_postgres/db/migrations/init.sql | 30 + payday_postgres/src/block_height.rs | 65 - payday_postgres/src/db/migrations/setup.sql | 34 + payday_postgres/src/lib.rs | 62 +- payday_postgres/src/offset.rs | 100 + payday_surrealdb/Cargo.toml | 14 - payday_surrealdb/src/block_height.rs | 63 - payday_surrealdb/src/event_stream.rs | 59 - payday_surrealdb/src/lib.rs | 49 - payday_surrealdb/src/task.rs | 345 --- 18 files changed, 668 insertions(+), 2713 deletions(-) delete mode 100644 payday_core/src/persistence/block_height.rs create mode 100644 payday_core/src/persistence/offset.rs create mode 100644 payday_postgres/db/migrations/init.sql delete mode 100644 payday_postgres/src/block_height.rs create mode 100644 payday_postgres/src/db/migrations/setup.sql create mode 100644 payday_postgres/src/offset.rs delete mode 100644 payday_surrealdb/Cargo.toml delete mode 100644 payday_surrealdb/src/block_height.rs delete mode 100644 payday_surrealdb/src/event_stream.rs delete mode 100644 payday_surrealdb/src/lib.rs delete mode 100644 payday_surrealdb/src/task.rs diff --git a/Cargo.lock b/Cargo.lock index 83089d7..2e7e11c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,15 +2,6 @@ # It is not intended for manual editing. version = 4 -[[package]] -name = "addr" -version = "0.15.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a93b8a41dbe230ad5087cc721f8d41611de654542180586b315d9f4cf6b72bef" -dependencies = [ - "psl-types", -] - [[package]] name = "addr2line" version = "0.24.2" @@ -26,30 +17,6 @@ version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" -[[package]] -name = "ahash" -version = "0.7.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" -dependencies = [ - "getrandom 0.2.15", - "once_cell", - "version_check", -] - -[[package]] -name = "ahash" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" -dependencies = [ - "cfg-if", - "getrandom 0.2.15", - "once_cell", - "version_check", - "zerocopy 0.7.35", -] - [[package]] name = "aho-corasick" version = "1.1.3" @@ -80,95 +47,18 @@ dependencies = [ "libc", ] -[[package]] -name = "any_ascii" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea50b14b7a4b9343f8c627a7a53c52076482bd4bdad0a24fd3ec533ed616cc2c" - [[package]] name = "anyhow" version = "1.0.95" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34ac096ce696dc2fcabef30516bb13c0a68a11d30131d3df6f04711467681b04" -[[package]] -name = "approx" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab112f0a86d568ea0e627cc1d6be74a1e9cd55214684db5561995f6dad897c6" -dependencies = [ - "num-traits", -] - -[[package]] -name = "arbitrary" -version = "1.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dde20b3d026af13f561bdd0f15edf01fc734f0dafcedbaf42bba506a9517f223" - -[[package]] -name = "argon2" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" -dependencies = [ - "base64ct", - "blake2", - "cpufeatures", - "password-hash", -] - [[package]] name = "arrayvec" version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" -[[package]] -name = "ascii-canvas" -version = "3.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8824ecca2e851cec16968d54a01dd372ef8f95b244fb84b84e70128be347c3c6" -dependencies = [ - "term", -] - -[[package]] -name = "async-channel" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" -dependencies = [ - "concurrent-queue", - "event-listener 2.5.3", - "futures-core", -] - -[[package]] -name = "async-executor" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" -dependencies = [ - "async-task", - "concurrent-queue", - "fastrand", - "futures-lite", - "slab", -] - -[[package]] -name = "async-recursion" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b43422f69d8ff38f95f1b2bb76517c91589a924d1559a0e935d7c8ce0274c11" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "async-stream" version = "0.3.6" @@ -188,15 +78,9 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] -[[package]] -name = "async-task" -version = "4.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" - [[package]] name = "async-trait" version = "0.1.86" @@ -205,18 +89,7 @@ checksum = "644dd749086bf3771a2fbc5f256fdb982d53f011c7d5d560304eafeecebce79d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", -] - -[[package]] -name = "async_io_stream" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6d7b9decdf35d8908a7e3ef02f64c5e9b1695e230154c0e8de3969142d9b94c" -dependencies = [ - "futures", - "pharos", - "rustc_version", + "syn", ] [[package]] @@ -228,15 +101,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "atomic-polyfill" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8cf2bce30dfe09ef0bfaef228b9d414faaf7e563035494d7fe092dba54b300f4" -dependencies = [ - "critical-section", -] - [[package]] name = "autocfg" version = "1.4.0" @@ -254,9 +118,9 @@ dependencies = [ "bitflags 1.3.2", "bytes", "futures-util", - "http", - "http-body", - "hyper", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", "itoa", "matchit", "memchr", @@ -280,8 +144,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http", - "http-body", + "http 0.2.12", + "http-body 0.4.6", "mime", "rustversion", "tower-layer", @@ -331,49 +195,12 @@ version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" -[[package]] -name = "bcrypt" -version = "0.15.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e65938ed058ef47d92cf8b346cc76ef48984572ade631927e9937b5ffc7662c7" -dependencies = [ - "base64 0.22.1", - "blowfish", - "getrandom 0.2.15", - "subtle", - "zeroize", -] - [[package]] name = "bech32" version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d965446196e3b7decd44aa7ee49e31d630118f90ef12f97900f262eb915c951d" -[[package]] -name = "bincode" -version = "1.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" -dependencies = [ - "serde", -] - -[[package]] -name = "bit-set" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" -dependencies = [ - "bit-vec", -] - -[[package]] -name = "bit-vec" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" - [[package]] name = "bitcoin" version = "0.32.5" @@ -437,27 +264,6 @@ dependencies = [ "serde", ] -[[package]] -name = "bitvec" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - -[[package]] -name = "blake2" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" -dependencies = [ - "digest", -] - [[package]] name = "block-buffer" version = "0.10.4" @@ -468,36 +274,53 @@ dependencies = [ ] [[package]] -name = "blowfish" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e412e2cd0f2b2d93e02543ceae7917b3c70331573df19ee046bcbc35e45e87d7" -dependencies = [ - "byteorder", - "cipher", -] - -[[package]] -name = "borsh" -version = "1.5.5" +name = "bollard" +version = "0.18.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5430e3be710b68d984d1391c854eb431a9d548640711faa54eecb1df93db91cc" +checksum = "97ccca1260af6a459d75994ad5acc1651bcabcbdbc41467cc9786519ab854c30" dependencies = [ - "borsh-derive", - "cfg_aliases", + "base64 0.22.1", + "bollard-stubs", + "bytes", + "futures-core", + "futures-util", + "hex", + "home", + "http 1.2.0", + "http-body-util", + "hyper 1.6.0", + "hyper-named-pipe", + "hyper-rustls 0.27.5", + "hyper-util", + "hyperlocal", + "log", + "pin-project-lite", + "rustls 0.23.23", + "rustls-native-certs", + "rustls-pemfile 2.2.0", + "rustls-pki-types", + "serde", + "serde_derive", + "serde_json", + "serde_repr", + "serde_urlencoded", + "thiserror 2.0.11", + "tokio", + "tokio-util", + "tower-service", + "url", + "winapi", ] [[package]] -name = "borsh-derive" -version = "1.5.5" +name = "bollard-stubs" +version = "1.47.1-rc.27.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8b668d39970baad5356d7c83a86fee3a539e6f93bf6764c97368243e17a0487" +checksum = "3f179cfbddb6e77a5472703d4b30436bff32929c0aa8a9008ecf23d1d3cdd0da" dependencies = [ - "once_cell", - "proc-macro-crate", - "proc-macro2", - "quote", - "syn 2.0.98", + "serde", + "serde_repr", + "serde_with", ] [[package]] @@ -506,34 +329,6 @@ version = "3.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" -[[package]] -name = "bytecheck" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" -dependencies = [ - "bytecheck_derive", - "ptr_meta", - "simdutf8", -] - -[[package]] -name = "bytecheck_derive" -version = "0.6.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "bytemuck" -version = "1.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ef657dfab802224e671f5818e9a4935f9b1957ed18e58292690cc39e7a4092a3" - [[package]] name = "byteorder" version = "1.5.0" @@ -555,75 +350,12 @@ dependencies = [ "shlex", ] -[[package]] -name = "cedar-policy" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d91e3b10a0f7f2911774d5e49713c4d25753466f9e11d1cd2ec627f8a2dc857" -dependencies = [ - "cedar-policy-core", - "cedar-policy-validator", - "itertools 0.10.5", - "lalrpop-util", - "ref-cast", - "serde", - "serde_json", - "smol_str", - "thiserror 1.0.69", -] - -[[package]] -name = "cedar-policy-core" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd2315591c6b7e18f8038f0a0529f254235fd902b6c217aabc04f2459b0d9995" -dependencies = [ - "either", - "ipnet", - "itertools 0.10.5", - "lalrpop", - "lalrpop-util", - "lazy_static", - "miette", - "regex", - "rustc_lexer", - "serde", - "serde_json", - "serde_with", - "smol_str", - "stacker", - "thiserror 1.0.69", -] - -[[package]] -name = "cedar-policy-validator" -version = "2.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e756e1b2a5da742ed97e65199ad6d0893e9aa4bd6b34be1de9e70bd1e6adc7df" -dependencies = [ - "cedar-policy-core", - "itertools 0.10.5", - "serde", - "serde_json", - "serde_with", - "smol_str", - "stacker", - "thiserror 1.0.69", - "unicode-security", -] - [[package]] name = "cfg-if" version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" -[[package]] -name = "cfg_aliases" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" - [[package]] name = "chrono" version = "0.4.39" @@ -639,16 +371,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "cipher" -version = "0.4.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "concurrent-queue" version = "2.5.0" @@ -664,21 +386,11 @@ version = "0.9.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" -[[package]] -name = "cordyceps" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec10f0a762d93c4498d2e97a333805cb6250d60bead623f71d8034f9a4152ba3" -dependencies = [ - "loom", - "tracing", -] - [[package]] name = "core-foundation" -version = "0.9.4" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +checksum = "b55271e5c8c478ad3f38ad24ef34923091e0548492a266d19b3c0b4d82574c63" dependencies = [ "core-foundation-sys", "libc", @@ -727,12 +439,6 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" -[[package]] -name = "critical-section" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "790eea4361631c5e7d22598ecd5723ff611904e3344ce8720784c93e3d83d40b" - [[package]] name = "crossbeam-queue" version = "0.3.12" @@ -748,12 +454,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crunchy" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" - [[package]] name = "crypto-common" version = "0.1.6" @@ -785,7 +485,7 @@ dependencies = [ "proc-macro2", "quote", "strsim", - "syn 2.0.98", + "syn", ] [[package]] @@ -796,15 +496,9 @@ checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" dependencies = [ "darling_core", "quote", - "syn 2.0.98", + "syn", ] -[[package]] -name = "data-encoding" -version = "2.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "575f75dfd25738df5b91b8e43e14d44bda14637a58fae779fd2b064f8bf3e010" - [[package]] name = "der" version = "0.7.9" @@ -826,18 +520,6 @@ dependencies = [ "serde", ] -[[package]] -name = "deunicode" -version = "1.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" - -[[package]] -name = "diatomic-waker" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab03c107fafeb3ee9f5925686dbb7a73bc76e3932abb0d2b365cb64b169cf04c" - [[package]] name = "digest" version = "0.10.7" @@ -850,27 +532,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "dirs-next" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" -dependencies = [ - "cfg-if", - "dirs-sys-next", -] - -[[package]] -name = "dirs-sys-next" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" -dependencies = [ - "libc", - "redox_users", - "winapi", -] - [[package]] name = "displaydoc" version = "0.2.5" @@ -879,40 +540,26 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] -name = "dmp" -version = "0.2.0" +name = "docker_credential" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfaa1135a34d26e5cc5b4927a8935af887d4f30a5653a797c33b9a4222beb6d9" +checksum = "31951f49556e34d90ed28342e1df7e1cb7a229c4cab0aecc627b5d91edd41d07" dependencies = [ - "urlencoding", + "base64 0.21.7", + "serde", + "serde_json", ] -[[package]] -name = "doc-comment" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" - [[package]] name = "dotenvy" version = "0.15.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" -[[package]] -name = "earcutr" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79127ed59a85d7687c409e9978547cffb7dc79675355ed22da6b66fd5f6ead01" -dependencies = [ - "itertools 0.11.0", - "num-traits", -] - [[package]] name = "either" version = "1.13.0" @@ -922,30 +569,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ena" -version = "0.14.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d248bdd43ce613d87415282f69b9bb99d947d290b10962dd6c56233312c2ad5" -dependencies = [ - "log", -] - -[[package]] -name = "encoding_rs" -version = "0.8.35" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "endian-type" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c34f04666d835ff5d62e058c3995147c06f42fe86ff053337632bca83e42702d" - [[package]] name = "equivalent" version = "1.0.2" @@ -973,12 +596,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "event-listener" -version = "2.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" - [[package]] name = "event-listener" version = "5.4.0" @@ -1003,9 +620,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df03ca33b5116de3051c1e233fe341e23b04c4913c7b16042497924559bc2a2e" dependencies = [ "hex", - "http-body", - "hyper", - "hyper-rustls", + "http-body 0.4.6", + "hyper 0.14.32", + "hyper-rustls 0.24.2", "prost", "rustls 0.21.12", "rustls-pemfile 1.0.4", @@ -1017,22 +634,22 @@ dependencies = [ ] [[package]] -name = "fixedbitset" -version = "0.4.2" +name = "filetime" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" +dependencies = [ + "cfg-if", + "libc", + "libredox", + "windows-sys 0.59.0", +] [[package]] name = "fixedbitset" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" - -[[package]] -name = "float_next_after" -version = "1.0.0" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf7cc16383c4b8d58b9905a8509f02926ce3058053c056376248d958c9df1e8" +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "flume" @@ -1042,8 +659,7 @@ checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" dependencies = [ "futures-core", "futures-sink", - "nanorand", - "spin 0.9.8", + "spin", ] [[package]] @@ -1067,18 +683,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fst" -version = "0.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" - -[[package]] -name = "funty" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" - [[package]] name = "futures" version = "0.3.31" @@ -1094,18 +698,6 @@ dependencies = [ "futures-util", ] -[[package]] -name = "futures-buffered" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34acda8ae8b63fbe0b2195c998b180cff89a8212fb2622a78b572a9f1c6f7684" -dependencies = [ - "cordyceps", - "diatomic-waker", - "futures-core", - "pin-project-lite", -] - [[package]] name = "futures-channel" version = "0.3.31" @@ -1116,21 +708,6 @@ dependencies = [ "futures-sink", ] -[[package]] -name = "futures-concurrency" -version = "7.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0eb68017df91f2e477ed4bea586c59eaecaa47ed885a770d0444e21e62572cd2" -dependencies = [ - "fixedbitset 0.5.7", - "futures-buffered", - "futures-core", - "futures-lite", - "pin-project", - "slab", - "smallvec", -] - [[package]] name = "futures-core" version = "0.3.31" @@ -1165,19 +742,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" -[[package]] -name = "futures-lite" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" -dependencies = [ - "fastrand", - "futures-core", - "futures-io", - "parking", - "pin-project-lite", -] - [[package]] name = "futures-macro" version = "0.3.31" @@ -1186,7 +750,7 @@ checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -1219,28 +783,6 @@ dependencies = [ "slab", ] -[[package]] -name = "fuzzy-matcher" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54614a3312934d066701a80f20f15fa3b56d67ac7722b39eea5b4c9dd1d66c94" -dependencies = [ - "thread_local", -] - -[[package]] -name = "generator" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5cc16584ff22b460a382b7feec54b23d2908d858152e5739a120b949293bd74e" -dependencies = [ - "cc", - "libc", - "log", - "rustversion", - "windows", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -1251,63 +793,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "geo" -version = "0.26.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1645cf1d7fea7dac1a66f7357f3df2677ada708b8d9db8e9b043878930095a96" -dependencies = [ - "earcutr", - "float_next_after", - "geo-types", - "geographiclib-rs", - "log", - "num-traits", - "robust", - "rstar", - "serde", -] - -[[package]] -name = "geo" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4841b40fdbccd4b7042bd6195e4de91da54af34c50632e371bcbfcdfb558b873" -dependencies = [ - "earcutr", - "float_next_after", - "geo-types", - "geographiclib-rs", - "log", - "num-traits", - "robust", - "rstar", - "serde", - "spade", -] - -[[package]] -name = "geo-types" -version = "0.7.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3bd1157f0f936bf0cd68dec91e8f7c311afe60295574d62b70d4861a1bfdf2d9" -dependencies = [ - "approx", - "arbitrary", - "num-traits", - "rstar", - "serde", -] - -[[package]] -name = "geographiclib-rs" -version = "0.2.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e6e5ed84f8089c70234b0a8e0aedb6dc733671612ddc0d37c6066052f9781960" -dependencies = [ - "libm", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -1315,10 +800,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" dependencies = [ "cfg-if", - "js-sys", "libc", "wasi 0.11.0+wasi-snapshot-preview1", - "wasm-bindgen", ] [[package]] @@ -1350,7 +833,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http", + "http 0.2.12", "indexmap 2.7.1", "slab", "tokio", @@ -1358,33 +841,11 @@ dependencies = [ "tracing", ] -[[package]] -name = "hash32" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0c35f58762feb77d74ebe43bdbc3210f09be9fe6742234d573bacc26ed92b67" -dependencies = [ - "byteorder", -] - [[package]] name = "hashbrown" version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" -dependencies = [ - "ahash 0.7.8", -] - -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.11", - "allocator-api2", -] [[package]] name = "hashbrown" @@ -1406,37 +867,12 @@ dependencies = [ "hashbrown 0.15.2", ] -[[package]] -name = "heapless" -version = "0.7.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cdc6457c0eb62c71aac4bc17216026d8410337c4126773b9c5daba343f17964f" -dependencies = [ - "atomic-polyfill", - "hash32", - "rustc_version", - "spin 0.9.8", - "stable_deref_trait", -] - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - [[package]] name = "heck" version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "hermit-abi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" - [[package]] name = "hex" version = "0.4.3" @@ -1496,6 +932,17 @@ dependencies = [ "itoa", ] +[[package]] +name = "http" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + [[package]] name = "http-body" version = "0.4.6" @@ -1503,7 +950,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" dependencies = [ "bytes", - "http", + "http 0.2.12", + "pin-project-lite", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.2.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", "pin-project-lite", ] @@ -1519,12 +989,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "hyper" version = "0.14.32" @@ -1536,8 +1000,8 @@ dependencies = [ "futures-core", "futures-util", "h2", - "http", - "http-body", + "http 0.2.12", + "http-body 0.4.6", "httparse", "httpdate", "itoa", @@ -1549,6 +1013,41 @@ dependencies = [ "want", ] +[[package]] +name = "hyper" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-named-pipe" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73b7d8abf35697b81a825e386fc151e0d503e8cb5fcb93cc8669c376dfd6f278" +dependencies = [ + "hex", + "hyper 1.6.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", + "winapi", +] + [[package]] name = "hyper-rustls" version = "0.24.2" @@ -1556,11 +1055,28 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ec3efd23720e2049821a693cbc7e65ea87c72f1c58ff2f9522ff332b1491e590" dependencies = [ "futures-util", - "http", - "hyper", + "http 0.2.12", + "hyper 0.14.32", "rustls 0.21.12", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", +] + +[[package]] +name = "hyper-rustls" +version = "0.27.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" +dependencies = [ + "futures-util", + "http 1.2.0", + "hyper 1.6.0", + "hyper-util", + "rustls 0.23.23", + "rustls-pki-types", + "tokio", + "tokio-rustls 0.26.1", + "tower-service", ] [[package]] @@ -1569,12 +1085,46 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1" dependencies = [ - "hyper", + "hyper 0.14.32", "pin-project-lite", "tokio", "tokio-io-timeout", ] +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.2.0", + "http-body 1.0.1", + "hyper 1.6.0", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "hyperlocal" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "986c5ce3b994526b3cd75578e62554abd09f0899d6206de48b3e96ab34ccc8c7" +dependencies = [ + "hex", + "http-body-util", + "hyper 1.6.0", + "hyper-util", + "pin-project-lite", + "tokio", + "tower-service", +] + [[package]] name = "iana-time-zone" version = "0.1.61" @@ -1713,7 +1263,7 @@ checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -1766,56 +1316,23 @@ dependencies = [ ] [[package]] -name = "inout" -version = "0.1.3" +name = "itertools" +version = "0.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" dependencies = [ - "generic-array", + "either", ] [[package]] -name = "ipnet" -version = "2.11.0" +name = "itoa" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" [[package]] -name = "itertools" -version = "0.10.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1c173a5686ce8bfa551b3563d0c2170bf24ca44da99c7ca4bfdab5418c3fe57" -dependencies = [ - "either", -] - -[[package]] -name = "itertools" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" -dependencies = [ - "either", -] - -[[package]] -name = "itoa" -version = "1.0.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" - -[[package]] -name = "js-sys" -version = "0.3.77" +name = "js-sys" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ @@ -1823,53 +1340,13 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "lalrpop" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55cb077ad656299f160924eb2912aa147d7339ea7d69e1b5517326fdcec3c1ca" -dependencies = [ - "ascii-canvas", - "bit-set", - "ena", - "itertools 0.11.0", - "lalrpop-util", - "petgraph", - "pico-args", - "regex", - "regex-syntax 0.8.5", - "string_cache", - "term", - "tiny-keccak", - "unicode-xid", - "walkdir", -] - -[[package]] -name = "lalrpop-util" -version = "0.20.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "507460a910eb7b32ee961886ff48539633b788a36b65692b95f225b844c82553" -dependencies = [ - "regex-automata 0.4.9", -] - [[package]] name = "lazy_static" version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" dependencies = [ - "spin 0.9.8", -] - -[[package]] -name = "lexicmp" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7378d131ddf24063b32cbd7e91668d183140c4b3906270635a4d633d1068ea5d" -dependencies = [ - "any_ascii", + "spin", ] [[package]] @@ -1892,6 +1369,7 @@ checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" dependencies = [ "bitflags 2.8.0", "libc", + "redox_syscall 0.5.8", ] [[package]] @@ -1953,28 +1431,6 @@ version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" -[[package]] -name = "loom" -version = "0.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff50ecb28bb86013e935fb6683ab1f6d3a20016f123c76fd4c27470076ac30f5" -dependencies = [ - "cfg-if", - "generator", - "scoped-tls", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "matchers" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" -dependencies = [ - "regex-automata 0.1.10", -] - [[package]] name = "matchit" version = "0.7.3" @@ -1997,51 +1453,12 @@ version = "2.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" -[[package]] -name = "miette" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59bb584eaeeab6bd0226ccf3509a69d7936d148cf3d036ad350abe35e8c6856e" -dependencies = [ - "miette-derive", - "once_cell", - "thiserror 1.0.69", - "unicode-width", -] - -[[package]] -name = "miette-derive" -version = "5.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "49e7bc1560b95a3c4a25d03de42fe76ca718ab92d1a22a55b9b4cf67b3ae635c" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "mime" version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "miniz_oxide" version = "0.8.4" @@ -2068,69 +1485,6 @@ version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "defc4c55412d89136f966bbb339008b474350e5e6e78d2714439c386b3137a03" -[[package]] -name = "nanoid" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" -dependencies = [ - "rand 0.8.5", -] - -[[package]] -name = "nanorand" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a51313c5820b0b02bd422f4b44776fbf47961755c74ce64afc73bfad10226c3" -dependencies = [ - "getrandom 0.2.15", -] - -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "nibble_vec" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a5d83df9f36fe23f0c3648c6bbb8b0298bb5f1939c8f2704431371f4b84d43" -dependencies = [ - "smallvec", -] - -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - -[[package]] -name = "nu-ansi-term" -version = "0.46.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" -dependencies = [ - "overload", - "winapi", -] - -[[package]] -name = "num-bigint" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" -dependencies = [ - "num-integer", - "num-traits", -] - [[package]] name = "num-bigint-dig" version = "0.8.4" @@ -2143,7 +1497,7 @@ dependencies = [ "num-integer", "num-iter", "num-traits", - "rand 0.8.5", + "rand", "smallvec", "zeroize", ] @@ -2184,16 +1538,6 @@ dependencies = [ "libm", ] -[[package]] -name = "num_cpus" -version = "1.16.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" -dependencies = [ - "hermit-abi", - "libc", -] - [[package]] name = "object" version = "0.36.7" @@ -2203,27 +1547,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "object_store" -version = "0.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2524735495ea1268be33d200e1ee97455096a0846295a21548cd2f3541de7050" -dependencies = [ - "async-trait", - "bytes", - "chrono", - "futures", - "humantime", - "itertools 0.11.0", - "parking_lot", - "percent-encoding", - "snafu", - "tokio", - "tracing", - "url", - "walkdir", -] - [[package]] name = "once_cell" version = "1.20.3" @@ -2231,10 +1554,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e" [[package]] -name = "overload" -version = "0.1.1" +name = "openssl-probe" +version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +checksum = "d05e27ee213611ffe7d6348b942e8f942b37114c00cc03cec254295a4a17852e" [[package]] name = "parking" @@ -2260,27 +1583,35 @@ checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" dependencies = [ "cfg-if", "libc", - "redox_syscall", + "redox_syscall 0.5.8", "smallvec", "windows-targets 0.52.6", ] [[package]] -name = "password-hash" -version = "0.5.0" +name = "parse-display" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +checksum = "914a1c2265c98e2446911282c6ac86d8524f495792c38c5bd884f80499c7538a" dependencies = [ - "base64ct", - "rand_core 0.6.4", - "subtle", + "parse-display-derive", + "regex", + "regex-syntax", ] [[package]] -name = "path-clean" -version = "1.0.1" +name = "parse-display-derive" +version = "0.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17359afc20d7ab31fdb42bb844c8b3bb1dabd7dcf7e68428492da7f16966fcef" +checksum = "2ae7800a4c974efd12df917266338e79a7a74415173caf7e70aa0a0707345281" +dependencies = [ + "proc-macro2", + "quote", + "regex", + "regex-syntax", + "structmeta", + "syn", +] [[package]] name = "payday_core" @@ -2322,6 +1653,8 @@ dependencies = [ "serde", "serde_json", "sqlx", + "testcontainers", + "testcontainers-modules", "tokio", ] @@ -2333,49 +1666,12 @@ dependencies = [ "payday_core", "payday_node_lnd", "payday_postgres", - "payday_surrealdb", - "serde", - "serde_json", - "tokio", - "tokio-stream", -] - -[[package]] -name = "payday_surrealdb" -version = "0.1.0" -dependencies = [ - "async-trait", - "chrono", - "payday_core", "serde", "serde_json", - "surrealdb", "tokio", "tokio-stream", ] -[[package]] -name = "pbkdf2" -version = "0.12.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8ed6a7761f76e3b9f92dfb0a60a6a6477c61024b775147ff0973a02653abaf2" -dependencies = [ - "digest", - "hmac", - "password-hash", - "sha2", -] - -[[package]] -name = "pem" -version = "2.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b13fe415cdf3c8e44518e18a7c95a13431d9bdf6d15367d82b23c377fdd441a" -dependencies = [ - "base64 0.21.7", - "serde", -] - [[package]] name = "pem-rfc7468" version = "0.7.0" @@ -2397,35 +1693,10 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset 0.4.2", + "fixedbitset", "indexmap 2.7.1", ] -[[package]] -name = "pharos" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9567389417feee6ce15dd6527a8a1ecac205ef62c2932bcf3d9f6fc5b78b414" -dependencies = [ - "futures", - "rustc_version", -] - -[[package]] -name = "phf_shared" -version = "0.11.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pico-args" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" - [[package]] name = "pin-project" version = "1.1.9" @@ -2443,7 +1714,7 @@ checksum = "f6e859e6e5bd50440ab63c47e3ebabc90f26251f7c73c3d3e837b74a1cc3fa67" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -2512,15 +1783,9 @@ version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.7.35", + "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "prettyplease" version = "0.2.29" @@ -2528,40 +1793,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6924ced06e1f7dfe3fa48d57b9f74f55d8915f5036121bef647ef4b204895fac" dependencies = [ "proc-macro2", - "syn 2.0.98", -] - -[[package]] -name = "proc-macro-crate" -version = "3.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" -dependencies = [ - "toml_edit", -] - -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", + "syn", ] [[package]] @@ -2590,8 +1822,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4" dependencies = [ "bytes", - "heck 0.5.0", - "itertools 0.12.1", + "heck", + "itertools", "log", "multimap", "once_cell", @@ -2600,7 +1832,7 @@ dependencies = [ "prost", "prost-types", "regex", - "syn 2.0.98", + "syn", "tempfile", ] @@ -2611,10 +1843,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "81bddcdb20abf9501610992b6759a4c888aef7d1a7247ef75e2404275ac24af1" dependencies = [ "anyhow", - "itertools 0.12.1", + "itertools", "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -2626,53 +1858,6 @@ dependencies = [ "prost", ] -[[package]] -name = "psl-types" -version = "2.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac" - -[[package]] -name = "psm" -version = "0.1.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f58e5423e24c18cc840e1c98370b3993c6649cd1678b4d24318bcf0a083cbe88" -dependencies = [ - "cc", -] - -[[package]] -name = "ptr_meta" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" -dependencies = [ - "ptr_meta_derive", -] - -[[package]] -name = "ptr_meta_derive" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "quick_cache" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a4b807ec70346b4fac3c13ae967634237847d49871f623fe0d455403346bad4" -dependencies = [ - "ahash 0.8.11", - "equivalent", - "hashbrown 0.14.5", - "parking_lot", -] - [[package]] name = "quote" version = "1.0.38" @@ -2682,23 +1867,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" - -[[package]] -name = "radix_trie" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c069c179fcdc6a2fe24d8d18305cf085fdbd4f922c041943e203685d6a1c58fd" -dependencies = [ - "endian-type", - "nibble_vec", - "serde", -] - [[package]] name = "rand" version = "0.8.5" @@ -2706,19 +1874,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" dependencies = [ "libc", - "rand_chacha 0.3.1", - "rand_core 0.6.4", -] - -[[package]] -name = "rand" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94" -dependencies = [ - "rand_chacha 0.9.0", - "rand_core 0.9.1", - "zerocopy 0.8.18", + "rand_chacha", + "rand_core", ] [[package]] @@ -2728,17 +1885,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" dependencies = [ "ppv-lite86", - "rand_core 0.6.4", -] - -[[package]] -name = "rand_chacha" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3022b5f1df60f26e1ffddd6c66e8aa15de382ae63b3a0c1bfc0e4d3e3f325cb" -dependencies = [ - "ppv-lite86", - "rand_core 0.9.1", + "rand_core", ] [[package]] @@ -2751,13 +1898,12 @@ dependencies = [ ] [[package]] -name = "rand_core" -version = "0.9.1" +name = "redox_syscall" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a88e0da7a2c97baa202165137c158d0a2e824ac465d13d81046727b34cb247d3" +checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29" dependencies = [ - "getrandom 0.3.1", - "zerocopy 0.8.18", + "bitflags 1.3.2", ] [[package]] @@ -2769,37 +1915,6 @@ dependencies = [ "bitflags 2.8.0", ] -[[package]] -name = "redox_users" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" -dependencies = [ - "getrandom 0.2.15", - "libredox", - "thiserror 1.0.69", -] - -[[package]] -name = "ref-cast" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ccf0a6f84d5f1d581da8b41b47ec8600871962f2a528115b542b362d4b744931" -dependencies = [ - "ref-cast-impl", -] - -[[package]] -name = "ref-cast-impl" -version = "1.0.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bcc303e793d3734489387d205e9b186fac9c6cfacedd98cbb2e8a5943595f3e6" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", -] - [[package]] name = "regex" version = "1.11.1" @@ -2808,17 +1923,8 @@ checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" dependencies = [ "aho-corasick", "memchr", - "regex-automata 0.4.9", - "regex-syntax 0.8.5", -] - -[[package]] -name = "regex-automata" -version = "0.1.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" -dependencies = [ - "regex-syntax 0.6.29", + "regex-automata", + "regex-syntax", ] [[package]] @@ -2829,120 +1935,15 @@ checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" dependencies = [ "aho-corasick", "memchr", - "regex-syntax 0.8.5", + "regex-syntax", ] -[[package]] -name = "regex-syntax" -version = "0.6.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" - [[package]] name = "regex-syntax" version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" -[[package]] -name = "rend" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" -dependencies = [ - "bytecheck", -] - -[[package]] -name = "reqwest" -version = "0.11.27" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd67538700a17451e7cba03ac727fb961abb7607553461627b97de0b89cf4a62" -dependencies = [ - "base64 0.21.7", - "bytes", - "encoding_rs", - "futures-core", - "futures-util", - "h2", - "http", - "http-body", - "hyper", - "hyper-rustls", - "ipnet", - "js-sys", - "log", - "mime", - "mime_guess", - "once_cell", - "percent-encoding", - "pin-project-lite", - "rustls 0.21.12", - "rustls-pemfile 1.0.4", - "serde", - "serde_json", - "serde_urlencoded", - "sync_wrapper", - "system-configuration", - "tokio", - "tokio-rustls", - "tokio-util", - "tower-service", - "url", - "wasm-bindgen", - "wasm-bindgen-futures", - "wasm-streams", - "web-sys", - "webpki-roots 0.25.4", - "winreg", -] - -[[package]] -name = "revision" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4df61cfb2522f24fd6aa90ce3489c2c8660a181075e7bac3ae7bdf22287d238f" -dependencies = [ - "bincode", - "chrono", - "geo 0.26.0", - "regex", - "revision-derive", - "roaring", - "rust_decimal", - "serde", - "thiserror 1.0.69", - "uuid", -] - -[[package]] -name = "revision-derive" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854ff0b6794d4e0aab5e4486870941caefe9f258e63cad2f21b49a6302377c85" -dependencies = [ - "darling", - "proc-macro-error", - "proc-macro2", - "quote", - "syn 2.0.98", -] - -[[package]] -name = "ring" -version = "0.16.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3053cf52e236a3ed746dfc745aa9cacf1b791d846bdaf412f60a8d7d6e17c8fc" -dependencies = [ - "cc", - "libc", - "once_cell", - "spin 0.5.2", - "untrusted 0.7.1", - "web-sys", - "winapi", -] - [[package]] name = "ring" version = "0.17.9" @@ -2953,55 +1954,9 @@ dependencies = [ "cfg-if", "getrandom 0.2.15", "libc", - "untrusted 0.9.0", - "windows-sys 0.52.0", -] - -[[package]] -name = "rkyv" -version = "0.7.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" -dependencies = [ - "bitvec", - "bytecheck", - "bytes", - "hashbrown 0.12.3", - "ptr_meta", - "rend", - "rkyv_derive", - "seahash", - "tinyvec", - "uuid", -] - -[[package]] -name = "rkyv_derive" -version = "0.7.45" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" -dependencies = [ - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "roaring" -version = "0.10.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a652edd001c53df0b3f96a36a8dc93fce6866988efc16808235653c6bcac8bf2" -dependencies = [ - "bytemuck", - "byteorder", - "serde", -] - -[[package]] -name = "robust" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cbf4a6aa5f6d6888f39e980649f3ad6b666acdce1d78e95b8a2cb076e687ae30" + "untrusted", + "windows-sys 0.52.0", +] [[package]] name = "rsa" @@ -3016,74 +1971,19 @@ dependencies = [ "num-traits", "pkcs1", "pkcs8", - "rand_core 0.6.4", + "rand_core", "signature", "spki", "subtle", "zeroize", ] -[[package]] -name = "rstar" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73111312eb7a2287d229f06c00ff35b51ddee180f017ab6dec1f69d62ac098d6" -dependencies = [ - "heapless", - "num-traits", - "smallvec", -] - -[[package]] -name = "rust-stemmers" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e46a2036019fdb888131db7a4c847a1063a7493f971ed94ea82c67eada63ca54" -dependencies = [ - "serde", - "serde_derive", -] - -[[package]] -name = "rust_decimal" -version = "1.36.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" -dependencies = [ - "arrayvec", - "borsh", - "bytes", - "num-traits", - "rand 0.8.5", - "rkyv", - "serde", - "serde_json", -] - [[package]] name = "rustc-demangle" version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" -[[package]] -name = "rustc_lexer" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c86aae0c77166108c01305ee1a36a1e77289d7dc6ca0a3cd91ff4992de2d16a5" -dependencies = [ - "unicode-xid", -] - -[[package]] -name = "rustc_version" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" -dependencies = [ - "semver", -] - [[package]] name = "rustix" version = "0.38.44" @@ -3104,7 +2004,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e" dependencies = [ "log", - "ring 0.17.9", + "ring", "rustls-webpki 0.101.7", "sct", ] @@ -3116,13 +2016,25 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "47796c98c480fce5406ef69d1c76378375492c3b0a0de587be0c1d9feb12f395" dependencies = [ "once_cell", - "ring 0.17.9", + "ring", "rustls-pki-types", "rustls-webpki 0.102.8", "subtle", "zeroize", ] +[[package]] +name = "rustls-native-certs" +version = "0.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3" +dependencies = [ + "openssl-probe", + "rustls-pki-types", + "schannel", + "security-framework", +] + [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -3153,8 +2065,8 @@ version = "0.101.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765" dependencies = [ - "ring 0.17.9", - "untrusted 0.9.0", + "ring", + "untrusted", ] [[package]] @@ -3163,9 +2075,9 @@ version = "0.102.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" dependencies = [ - "ring 0.17.9", + "ring", "rustls-pki-types", - "untrusted 0.9.0", + "untrusted", ] [[package]] @@ -3181,63 +2093,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" [[package]] -name = "salsa20" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97a22f5af31f73a954c10289c93e8a50cc23d971e80ee446f1f6f7137a088213" -dependencies = [ - "cipher", -] - -[[package]] -name = "same-file" -version = "1.0.6" +name = "schannel" +version = "0.1.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +checksum = "1f29ebaa345f945cec9fbbc532eb307f0fdad8161f281b6369539c8d84876b3d" dependencies = [ - "winapi-util", + "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" -[[package]] -name = "scrypt" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0516a385866c09368f0b5bcd1caff3366aace790fcd46e2bb032697bb172fd1f" -dependencies = [ - "password-hash", - "pbkdf2", - "salsa20", - "sha2", -] - [[package]] name = "sct" version = "0.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414" dependencies = [ - "ring 0.17.9", - "untrusted 0.9.0", + "ring", + "untrusted", ] -[[package]] -name = "seahash" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" - [[package]] name = "secp256k1" version = "0.29.1" @@ -3258,19 +2137,27 @@ dependencies = [ ] [[package]] -name = "semver" -version = "1.0.25" +name = "security-framework" +version = "3.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" +checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ - "serde", + "bitflags 2.8.0", + "core-foundation", + "core-foundation-sys", + "libc", + "security-framework-sys", ] [[package]] -name = "send_wrapper" -version = "0.6.0" +name = "security-framework-sys" +version = "2.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd0b0ec5f1c1ca621c432a25813d8d60c88abe6d3e08a3eb9cf37d97a0fe3d73" +checksum = "49db231d56a190491cb4aeda9527f1ad45345af50b0851622a7adb8c03b01c32" +dependencies = [ + "core-foundation-sys", + "libc", +] [[package]] name = "serde" @@ -3289,7 +2176,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -3298,13 +2185,23 @@ version = "1.0.138" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" dependencies = [ - "indexmap 2.7.1", "itoa", "memchr", "ryu", "serde", ] +[[package]] +name = "serde_repr" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c64451ba24fc7a6a2d60fc75dd9c83c90903b19028d4eff35e88fc1e86564e9" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3344,7 +2241,7 @@ dependencies = [ "darling", "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -3369,15 +2266,6 @@ dependencies = [ "digest", ] -[[package]] -name = "sharded-slab" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" -dependencies = [ - "lazy_static", -] - [[package]] name = "shlex" version = "1.3.0" @@ -3400,33 +2288,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" dependencies = [ "digest", - "rand_core 0.6.4", -] - -[[package]] -name = "simdutf8" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" - -[[package]] -name = "simple_asn1" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "297f631f50729c8c99b84667867963997ec0b50f32b2a7dbcab828ef0541e8bb" -dependencies = [ - "num-bigint", - "num-traits", - "thiserror 2.0.11", - "time", + "rand_core", ] -[[package]] -name = "siphasher" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" - [[package]] name = "slab" version = "0.4.9" @@ -3445,43 +2309,6 @@ dependencies = [ "serde", ] -[[package]] -name = "smol_str" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dd538fb6910ac1099850255cf94a94df6551fbdd602454387d0adb2d1ca6dead" -dependencies = [ - "serde", -] - -[[package]] -name = "snafu" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" -dependencies = [ - "doc-comment", - "snafu-derive", -] - -[[package]] -name = "snafu-derive" -version = "0.7.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" -dependencies = [ - "heck 0.4.1", - "proc-macro2", - "quote", - "syn 1.0.109", -] - -[[package]] -name = "snap" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b6b67fb9a61334225b5b790716f609cd58395f895b3fe8b328786812a40bc3b" - [[package]] name = "socket2" version = "0.5.8" @@ -3492,24 +2319,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "spade" -version = "2.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93f5ef1f863aca7d1d7dda7ccfc36a0a4279bd6d3c375176e5e0712e25cb4889" -dependencies = [ - "hashbrown 0.14.5", - "num-traits", - "robust", - "smallvec", -] - -[[package]] -name = "spin" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" - [[package]] name = "spin" version = "0.9.8" @@ -3552,7 +2361,7 @@ dependencies = [ "crc", "crossbeam-queue", "either", - "event-listener 5.4.0", + "event-listener", "futures-core", "futures-intrusive", "futures-io", @@ -3575,7 +2384,7 @@ dependencies = [ "tokio-stream", "tracing", "url", - "webpki-roots 0.26.8", + "webpki-roots", ] [[package]] @@ -3588,7 +2397,7 @@ dependencies = [ "quote", "sqlx-core", "sqlx-macros-core", - "syn 2.0.98", + "syn", ] [[package]] @@ -3599,7 +2408,7 @@ checksum = "4e9f90acc5ab146a99bf5061a7eb4976b573f560bc898ef3bf8435448dd5e7ad" dependencies = [ "dotenvy", "either", - "heck 0.5.0", + "heck", "hex", "once_cell", "proc-macro2", @@ -3611,7 +2420,7 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 2.0.98", + "syn", "tempfile", "tokio", "url", @@ -3646,7 +2455,7 @@ dependencies = [ "memchr", "once_cell", "percent-encoding", - "rand 0.8.5", + "rand", "rsa", "serde", "sha1", @@ -3684,7 +2493,7 @@ dependencies = [ "md-5", "memchr", "once_cell", - "rand 0.8.5", + "rand", "serde", "serde_json", "sha2", @@ -3725,43 +2534,6 @@ version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" -[[package]] -name = "stacker" -version = "0.1.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d08feb8f695b465baed819b03c128dc23f57a694510ab1f06c77f763975685e" -dependencies = [ - "cc", - "cfg-if", - "libc", - "psm", - "windows-sys 0.59.0", -] - -[[package]] -name = "storekey" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43c42833834a5d23b344f71d87114e0cc9994766a5c42938f4b50e7b2aef85b2" -dependencies = [ - "byteorder", - "memchr", - "serde", - "thiserror 1.0.69", -] - -[[package]] -name = "string_cache" -version = "0.8.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "938d512196766101d333398efde81bc1f37b00cb42c2f8350e5df639f040bbbe" -dependencies = [ - "new_debug_unreachable", - "parking_lot", - "phf_shared", - "precomputed-hash", -] - [[package]] name = "stringprep" version = "0.1.5" @@ -3780,157 +2552,33 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] -name = "subtle" -version = "2.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" - -[[package]] -name = "surrealdb" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dac5a27c63a05414c1c623e0a5e75969142c4fa157bbe59fa259c620df83d252" -dependencies = [ - "async-channel", - "bincode", - "chrono", - "dmp", - "flume", - "futures", - "futures-concurrency", - "geo 0.27.0", - "indexmap 2.7.1", - "once_cell", - "path-clean", - "pharos", - "reqwest", - "revision", - "ring 0.17.9", - "rust_decimal", - "rustls 0.21.12", - "semver", - "serde", - "serde_json", - "surrealdb-core", - "thiserror 1.0.69", - "tokio", - "tokio-tungstenite", - "tracing", - "trice", - "url", - "uuid", - "wasm-bindgen-futures", - "wasmtimer", - "ws_stream_wasm", -] - -[[package]] -name = "surrealdb-core" -version = "1.5.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cd916d013234ff20ea94196a98a0f9d1f1cd85501a5b01c199cd24fa8168afb7" -dependencies = [ - "addr", - "any_ascii", - "argon2", - "async-channel", - "async-executor", - "async-recursion", - "base64 0.21.7", - "bcrypt", - "bincode", - "bytes", - "cedar-policy", - "chrono", - "deunicode", - "dmp", - "fst", - "futures", - "fuzzy-matcher", - "geo 0.27.0", - "geo-types", - "hex", - "ipnet", - "lexicmp", - "md-5", - "nanoid", - "nom", - "num_cpus", - "object_store", - "once_cell", - "pbkdf2", - "pharos", - "pin-project-lite", - "quick_cache", - "radix_trie", - "rand 0.8.5", - "regex", - "revision", - "ring 0.17.9", - "roaring", - "rust-stemmers", - "rust_decimal", - "scrypt", - "semver", - "serde", - "serde_json", - "sha1", - "sha2", - "snap", - "storekey", - "surrealdb-derive", - "surrealdb-jsonwebtoken", - "thiserror 1.0.69", - "tokio", - "tracing", - "trice", - "ulid", - "url", - "uuid", - "wasm-bindgen-futures", - "wasmtimer", - "ws_stream_wasm", -] - -[[package]] -name = "surrealdb-derive" -version = "0.12.0" +name = "structmeta" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aacdb4c58b9ebef0291310afcd63af0012d85610d361f3785952c61b6f1dddf4" +checksum = "2e1575d8d40908d70f6fd05537266b90ae71b15dbbe7a8b7dffa2b759306d329" dependencies = [ + "proc-macro2", "quote", - "syn 1.0.109", + "structmeta-derive", + "syn", ] [[package]] -name = "surrealdb-jsonwebtoken" -version = "8.3.0-surreal.1" +name = "structmeta-derive" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02d4f759c65df8a8cf2d83c99db7fdd3ae5b8fff05fa7fe69a8612f29dd5f99b" +checksum = "152a0b65a590ff6c3da95cabe2353ee04e6167c896b28e3b14478c2636c922fc" dependencies = [ - "base64 0.21.7", - "getrandom 0.2.15", - "hmac", - "pem", - "rand 0.8.5", - "ring 0.16.20", - "rsa", - "serde", - "serde_json", - "sha2", - "simple_asn1", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "syn" -version = "1.0.109" +name = "subtle" +version = "2.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] +checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" @@ -3957,36 +2605,9 @@ checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", -] - -[[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", + "syn", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "tempfile" version = "3.17.0" @@ -4002,14 +2623,41 @@ dependencies = [ ] [[package]] -name = "term" -version = "0.7.0" +name = "testcontainers" +version = "0.23.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "59a4f01f39bb10fc2a5ab23eb0d888b1e2bb168c157f61a1b98e6c501c639c74" +dependencies = [ + "async-trait", + "bollard", + "bollard-stubs", + "bytes", + "docker_credential", + "either", + "etcetera", + "futures", + "log", + "memchr", + "parse-display", + "pin-project-lite", + "serde", + "serde_json", + "serde_with", + "thiserror 2.0.11", + "tokio", + "tokio-stream", + "tokio-tar", + "tokio-util", + "url", +] + +[[package]] +name = "testcontainers-modules" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +checksum = "4d43ed4e8f58424c3a2c6c56dbea6643c3c23e8666a34df13c54f0a184e6c707" dependencies = [ - "dirs-next", - "rustversion", - "winapi", + "testcontainers", ] [[package]] @@ -4038,7 +2686,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -4049,17 +2697,7 @@ checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", -] - -[[package]] -name = "thread_local" -version = "1.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" -dependencies = [ - "cfg-if", - "once_cell", + "syn", ] [[package]] @@ -4093,15 +2731,6 @@ dependencies = [ "time-core", ] -[[package]] -name = "tiny-keccak" -version = "2.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2c9d3793400a45f954c52e73d068316d76b6f4e36977e3fcebb13a2721e80237" -dependencies = [ - "crunchy", -] - [[package]] name = "tinystr" version = "0.7.6" @@ -4163,7 +2792,7 @@ checksum = "6e06d43f1345a3bcd39f6a56dbb7dcab2ba47e68e8ac134855e7e2bdbaf8cab8" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -4176,6 +2805,16 @@ dependencies = [ "tokio", ] +[[package]] +name = "tokio-rustls" +version = "0.26.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" +dependencies = [ + "rustls 0.23.23", + "tokio", +] + [[package]] name = "tokio-stream" version = "0.1.17" @@ -4188,18 +2827,18 @@ dependencies = [ ] [[package]] -name = "tokio-tungstenite" -version = "0.20.1" +name = "tokio-tar" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d5dcb2a1ce06d81107c3d0ffa3121fe974b73f068c8282cb1c32328113b6c" +checksum = "9d5714c010ca3e5c27114c1cdeb9d14641ace49874aa5626d7149e47aedace75" dependencies = [ - "futures-util", - "log", - "rustls 0.21.12", + "filetime", + "futures-core", + "libc", + "redox_syscall 0.3.5", "tokio", - "tokio-rustls", - "tungstenite", - "webpki-roots 0.25.4", + "tokio-stream", + "xattr", ] [[package]] @@ -4215,23 +2854,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml_datetime" -version = "0.6.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" - -[[package]] -name = "toml_edit" -version = "0.22.24" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "17b4795ff5edd201c7cd6dca065ae59972ce77d1b80fa0a84d94950ece7d1474" -dependencies = [ - "indexmap 2.7.1", - "toml_datetime", - "winnow", -] - [[package]] name = "tonic" version = "0.10.2" @@ -4244,9 +2866,9 @@ dependencies = [ "base64 0.21.7", "bytes", "h2", - "http", - "http-body", - "hyper", + "http 0.2.12", + "http-body 0.4.6", + "hyper 0.14.32", "hyper-timeout", "percent-encoding", "pin-project", @@ -4254,7 +2876,7 @@ dependencies = [ "rustls 0.21.12", "rustls-pemfile 1.0.4", "tokio", - "tokio-rustls", + "tokio-rustls 0.24.1", "tokio-stream", "tower", "tower-layer", @@ -4272,7 +2894,7 @@ dependencies = [ "proc-macro2", "prost-build", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -4286,7 +2908,7 @@ dependencies = [ "indexmap 1.9.3", "pin-project", "pin-project-lite", - "rand 0.8.5", + "rand", "slab", "tokio", "tokio-util", @@ -4327,7 +2949,7 @@ checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -4337,47 +2959,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" dependencies = [ "once_cell", - "valuable", -] - -[[package]] -name = "tracing-log" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" -dependencies = [ - "log", - "once_cell", - "tracing-core", -] - -[[package]] -name = "tracing-subscriber" -version = "0.3.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008" -dependencies = [ - "matchers", - "nu-ansi-term", - "once_cell", - "regex", - "sharded-slab", - "smallvec", - "thread_local", - "tracing", - "tracing-core", - "tracing-log", -] - -[[package]] -name = "trice" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3aaab10ae9fac0b10f392752bf56f0fd20845f39037fec931e8537b105b515a" -dependencies = [ - "js-sys", - "wasm-bindgen", - "web-sys", ] [[package]] @@ -4386,49 +2967,12 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.20.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e3dac10fd62eaf6617d3a904ae222845979aec67c615d1c842b4002c7666fb9" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http", - "httparse", - "log", - "rand 0.8.5", - "rustls 0.21.12", - "sha1", - "thiserror 1.0.69", - "url", - "utf-8", -] - [[package]] name = "typenum" version = "1.17.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" -[[package]] -name = "ulid" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab82fc73182c29b02e2926a6df32f2241dbadb5cfc111fd595515b3598f46bb3" -dependencies = [ - "rand 0.9.0", - "serde", - "web-time", -] - -[[package]] -name = "unicase" -version = "2.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" - [[package]] name = "unicode-bidi" version = "0.3.18" @@ -4456,40 +3000,6 @@ version = "0.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" -[[package]] -name = "unicode-script" -version = "0.5.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" - -[[package]] -name = "unicode-security" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e4ddba1535dd35ed8b61c52166b7155d7f4e4b8847cec6f48e71dc66d8b5e50" -dependencies = [ - "unicode-normalization", - "unicode-script", -] - -[[package]] -name = "unicode-width" -version = "0.1.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" - -[[package]] -name = "unicode-xid" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" - -[[package]] -name = "untrusted" -version = "0.7.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" - [[package]] name = "untrusted" version = "0.9.0" @@ -4505,20 +3015,9 @@ dependencies = [ "form_urlencoded", "idna", "percent-encoding", + "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf16_iter" version = "1.0.5" @@ -4531,24 +3030,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" -[[package]] -name = "uuid" -version = "1.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced87ca4be083373936a67f8de945faa23b6b42384bd5b64434850802c6dccd0" -dependencies = [ - "getrandom 0.3.1", - "js-sys", - "serde", - "wasm-bindgen", -] - -[[package]] -name = "valuable" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ba73ea9cf16a25df0c8caa16c51acb937d5712a8429db78a3ee29d5dcacd3a65" - [[package]] name = "vcpkg" version = "0.2.15" @@ -4561,16 +3042,6 @@ version = "0.9.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -4623,23 +3094,10 @@ dependencies = [ "log", "proc-macro2", "quote", - "syn 2.0.98", + "syn", "wasm-bindgen-shared", ] -[[package]] -name = "wasm-bindgen-futures" -version = "0.4.50" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" -dependencies = [ - "cfg-if", - "js-sys", - "once_cell", - "wasm-bindgen", - "web-sys", -] - [[package]] name = "wasm-bindgen-macro" version = "0.2.100" @@ -4658,7 +3116,7 @@ checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", "wasm-bindgen-backend", "wasm-bindgen-shared", ] @@ -4672,58 +3130,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "wasm-streams" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" -dependencies = [ - "futures-util", - "js-sys", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wasmtimer" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7ed9d8b15c7fb594d72bfb4b5a276f3d2029333cd93a932f376f5937f6f80ee" -dependencies = [ - "futures", - "js-sys", - "parking_lot", - "pin-utils", - "wasm-bindgen", -] - -[[package]] -name = "web-sys" -version = "0.3.77" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "web-time" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" -dependencies = [ - "js-sys", - "wasm-bindgen", -] - -[[package]] -name = "webpki-roots" -version = "0.25.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" - [[package]] name = "webpki-roots" version = "0.26.8" @@ -4739,7 +3145,7 @@ version = "1.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" dependencies = [ - "redox_syscall", + "redox_syscall 0.5.8", "wasite", ] @@ -4759,30 +3165,12 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" 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.5", -] - [[package]] name = "windows-core" version = "0.52.0" @@ -4940,25 +3328,6 @@ version = "0.52.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" -[[package]] -name = "winnow" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59690dea168f2198d1a3b0cac23b8063efcd11012f10ae4698f284808c8ef603" -dependencies = [ - "memchr", -] - -[[package]] -name = "winreg" -version = "0.50.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "524e57b2c537c0f9b1e69f1965311ec12182b4122e45035b1508cd24d2adadb1" -dependencies = [ - "cfg-if", - "windows-sys 0.48.0", -] - [[package]] name = "wit-bindgen-rt" version = "0.33.0" @@ -4981,31 +3350,14 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" [[package]] -name = "ws_stream_wasm" -version = "0.7.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7999f5f4217fe3818726b66257a4475f71e74ffd190776ad053fa159e50737f5" -dependencies = [ - "async_io_stream", - "futures", - "js-sys", - "log", - "pharos", - "rustc_version", - "send_wrapper", - "thiserror 1.0.69", - "wasm-bindgen", - "wasm-bindgen-futures", - "web-sys", -] - -[[package]] -name = "wyz" -version = "0.5.1" +name = "xattr" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +checksum = "e105d177a3871454f754b33bb0ee637ecaaac997446375fd3e5d43a2ed00c909" dependencies = [ - "tap", + "libc", + "linux-raw-sys", + "rustix", ] [[package]] @@ -5028,7 +3380,7 @@ checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", "synstructure", ] @@ -5039,16 +3391,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ "byteorder", - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy" -version = "0.8.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79386d31a42a4996e3336b0919ddb90f81112af416270cff95b5f5af22b839c2" -dependencies = [ - "zerocopy-derive 0.8.18", + "zerocopy-derive", ] [[package]] @@ -5059,18 +3402,7 @@ checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", -] - -[[package]] -name = "zerocopy-derive" -version = "0.8.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76331675d372f91bf8d17e13afbd5fe639200b73d01f0fc748bb059f9cca2db7" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.98", + "syn", ] [[package]] @@ -5090,7 +3422,7 @@ checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", "synstructure", ] @@ -5119,5 +3451,5 @@ checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.98", + "syn", ] diff --git a/Cargo.toml b/Cargo.toml index 87fb3a6..933ae20 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,6 @@ edition = "2021" [dependencies] payday_core = { path = "./payday_core" } payday_node_lnd = { path = "./payday_node_lnd" } -payday_surrealdb = { path = "./payday_surrealdb" } payday_postgres = { path = "./payday_postgres" } tokio.workspace = true bitcoin.workspace = true @@ -15,12 +14,7 @@ serde_json.workspace = true tokio-stream.workspace = true [workspace] -members = [ - "payday_core", - "payday_node_lnd", - "payday_postgres", - "payday_surrealdb", -] +members = ["payday_core", "payday_node_lnd", "payday_postgres"] [workspace.dependencies] async-trait = "0.1.86" diff --git a/payday_core/src/api/on_chain_api.rs b/payday_core/src/api/on_chain_api.rs index 0148d75..ebc8623 100644 --- a/payday_core/src/api/on_chain_api.rs +++ b/payday_core/src/api/on_chain_api.rs @@ -59,7 +59,7 @@ pub trait OnChainTransactionApi: Send + Sync { #[async_trait] pub trait OnChainTransactionEventProcessorApi: Send + Sync { fn node_id(&self) -> String; - async fn get_block_height(&self) -> Result; + async fn get_offset(&self) -> Result; async fn set_block_height(&self, block_height: i32) -> Result<()>; async fn process_event(&self, event: OnChainTransactionEvent) -> Result<()>; } diff --git a/payday_core/src/persistence/block_height.rs b/payday_core/src/persistence/block_height.rs deleted file mode 100644 index d25da51..0000000 --- a/payday_core/src/persistence/block_height.rs +++ /dev/null @@ -1,16 +0,0 @@ -use async_trait::async_trait; -use serde::{Deserialize, Serialize}; - -use crate::Result; - -#[async_trait] -pub trait BlockHeightStoreApi: Send + Sync { - async fn get_block_height(&self, node_id: &str) -> Result; - async fn set_block_height(&self, node_id: &str, block_height: u64) -> Result<()>; -} - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct BlockHeight { - pub node_id: String, - pub block_height: u64, -} diff --git a/payday_core/src/persistence/mod.rs b/payday_core/src/persistence/mod.rs index cdf3ee5..3c3115f 100644 --- a/payday_core/src/persistence/mod.rs +++ b/payday_core/src/persistence/mod.rs @@ -1,2 +1,2 @@ -pub mod block_height; pub mod cqrs; +pub mod offset; diff --git a/payday_core/src/persistence/offset.rs b/payday_core/src/persistence/offset.rs new file mode 100644 index 0000000..03277c4 --- /dev/null +++ b/payday_core/src/persistence/offset.rs @@ -0,0 +1,16 @@ +use async_trait::async_trait; +use serde::{Deserialize, Serialize}; + +use crate::Result; + +#[async_trait] +pub trait OffsetStoreApi: Send + Sync { + async fn get_offset(&self) -> Result; + async fn set_offset(&self, offset: u64) -> Result<()>; +} + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Offset { + pub id: String, + pub offset: u64, +} diff --git a/payday_core/src/processor/on_chain_processor.rs b/payday_core/src/processor/on_chain_processor.rs index c212148..8b31f85 100644 --- a/payday_core/src/processor/on_chain_processor.rs +++ b/payday_core/src/processor/on_chain_processor.rs @@ -5,7 +5,7 @@ use crate::{ OnChainTransactionEvent, OnChainTransactionEventHandler, OnChainTransactionEventProcessorApi, }, - persistence::block_height::BlockHeightStoreApi, + persistence::offset::OffsetStoreApi, Result, }; use async_trait::async_trait; @@ -13,7 +13,7 @@ use tokio::sync::Mutex; pub struct OnChainTransactionProcessor { node_id: String, - block_height_store: Box, + block_height_store: Box, handler: Box, current_block_height: Arc>, } @@ -21,7 +21,7 @@ pub struct OnChainTransactionProcessor { impl OnChainTransactionProcessor { pub fn new( node_id: &str, - block_height_store: Box, + block_height_store: Box, handler: Box, ) -> Self { Self { @@ -38,14 +38,10 @@ impl OnChainTransactionEventProcessorApi for OnChainTransactionProcessor { fn node_id(&self) -> String { self.node_id.to_string() } - async fn get_block_height(&self) -> Result { + async fn get_offset(&self) -> Result { let mut current_block_height = self.current_block_height.lock().await; if *current_block_height < 0 { - *current_block_height = self - .block_height_store - .get_block_height(&self.node_id) - .await? - .block_height as i32; + *current_block_height = self.block_height_store.get_offset().await?.offset as i32; } Ok(*current_block_height) } @@ -53,7 +49,7 @@ impl OnChainTransactionEventProcessorApi for OnChainTransactionProcessor { let mut current_block_height = self.current_block_height.lock().await; if *current_block_height < block_height { self.block_height_store - .set_block_height(&self.node_id, block_height as u64) + .set_offset(block_height as u64) .await?; *current_block_height = block_height; } diff --git a/payday_postgres/Cargo.toml b/payday_postgres/Cargo.toml index 0bd9bcb..eb046bd 100644 --- a/payday_postgres/Cargo.toml +++ b/payday_postgres/Cargo.toml @@ -12,3 +12,7 @@ serde = { workspace = true } serde_json = { workspace = true } tokio = { workspace = true } postgres-es = { version = "0.4.11" } + +[dev-dependencies] +testcontainers = { version = "0.23" } +testcontainers-modules = { version = "0.11.5", features = ["postgres"] } diff --git a/payday_postgres/db/migrations/init.sql b/payday_postgres/db/migrations/init.sql new file mode 100644 index 0000000..23e7502 --- /dev/null +++ b/payday_postgres/db/migrations/init.sql @@ -0,0 +1,30 @@ +-- a single table is used for all events in the cqrs system +CREATE TABLE IF NOT EXISTS events +( + aggregate_type text NOT NULL, + aggregate_id text NOT NULL, + sequence bigint CHECK (sequence >= 0) NOT NULL, + event_type text NOT NULL, + event_version text NOT NULL, + payload json NOT NULL, + metadata json NOT NULL, + PRIMARY KEY (aggregate_type, aggregate_id, sequence) +); + +-- this table is only needed if snapshotting is employed +CREATE TABLE IF NOT EXISTS snapshots +( + aggregate_type text NOT NULL, + aggregate_id text NOT NULL, + last_sequence bigint CHECK (last_sequence >= 0) NOT NULL, + current_snapshot bigint CHECK (current_snapshot >= 0) NOT NULL, + payload json NOT NULL, + PRIMARY KEY (aggregate_type, aggregate_id, last_sequence) +); + +-- stores offset of different event streams +CREATE TABLE IF NOT EXISTS offsets +( + id text NOT NULL PRIMARY KEY, + current_offset bigint NOT NULL +); diff --git a/payday_postgres/src/block_height.rs b/payday_postgres/src/block_height.rs deleted file mode 100644 index 090a6a0..0000000 --- a/payday_postgres/src/block_height.rs +++ /dev/null @@ -1,65 +0,0 @@ -use async_trait::async_trait; -use payday_core::{ - persistence::block_height::{BlockHeight, BlockHeightStoreApi}, - Error, Result, -}; -use sqlx::{Pool, Postgres, Row}; - -pub struct BlockHeightStore { - db: Pool, -} - -impl BlockHeightStore { - pub fn new(db: Pool) -> Self { - Self { db } - } - - async fn get_block_height_internal(&self, node_id: &str) -> Result> { - let res: Option = - sqlx::query("SELECT block_height FROM block_height WHERE node_id = $1") - .bind(node_id) - .fetch_optional(&self.db) - .await - .map_err(|e| Error::DbError(e.to_string()))? - .map(|r| r.get("block_height")); - Ok(res.and_then(|r| u64::try_from(r).ok())) - } -} - -#[async_trait] -impl BlockHeightStoreApi for BlockHeightStore { - async fn get_block_height(&self, node_id: &str) -> Result { - let height: Option = self.get_block_height_internal(node_id).await?; - match height { - Some(height) => Ok(BlockHeight { - node_id: node_id.to_string(), - block_height: height, - }), - None => Ok(BlockHeight { - node_id: node_id.to_string(), - block_height: 0, - }), - } - } - - async fn set_block_height(&self, node_id: &str, block_height: u64) -> Result<()> { - let existing: Option = self.get_block_height_internal(node_id).await?; - if existing.is_some() { - sqlx::query("UPDATE block_height SET block_height = $1 WHERE node_id = $2") - .bind(block_height as i64) - .bind(node_id) - .execute(&self.db) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - } else { - sqlx::query("INSERT INTO block_height (node_id, block_height) VALUES ($1, $2)") - .bind(node_id) - .bind(block_height as i64) - .execute(&self.db) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - } - - Ok(()) - } -} diff --git a/payday_postgres/src/db/migrations/setup.sql b/payday_postgres/src/db/migrations/setup.sql new file mode 100644 index 0000000..6fdf08a --- /dev/null +++ b/payday_postgres/src/db/migrations/setup.sql @@ -0,0 +1,34 @@ +-- This is just the basic schema. To put this into production you should +-- provide this within some sanitized migration script or process. Here it is +-- mainly used to bootstrap tables for test runs. + +-- a single table is used for all events in the cqrs system +CREATE TABLE IF NOT EXISTS events +( + aggregate_type text NOT NULL, + aggregate_id text NOT NULL, + sequence bigint CHECK (sequence >= 0) NOT NULL, + event_type text NOT NULL, + event_version text NOT NULL, + payload json NOT NULL, + metadata json NOT NULL, + PRIMARY KEY (aggregate_type, aggregate_id, sequence) +); + +-- this table is only needed if snapshotting is employed +CREATE TABLE IF NOT EXISTS snapshots +( + aggregate_type text NOT NULL, + aggregate_id text NOT NULL, + last_sequence bigint CHECK (last_sequence >= 0) NOT NULL, + current_snapshot bigint CHECK (current_snapshot >= 0) NOT NULL, + payload json NOT NULL, + PRIMARY KEY (aggregate_type, aggregate_id, last_sequence) +); + +-- stores offset of different event streams +CREATE TABLE IF NOT EXISTS offsets +( + id text NOT NULL PRIMARY KEY, + current_offset bigint NOT NULL +); diff --git a/payday_postgres/src/lib.rs b/payday_postgres/src/lib.rs index 028a119..e90191c 100644 --- a/payday_postgres/src/lib.rs +++ b/payday_postgres/src/lib.rs @@ -1,5 +1,5 @@ -pub mod block_height; pub mod btc_onchain; +pub mod offset; use cqrs_es::{Aggregate, Query}; use payday_core::{persistence::cqrs::Cqrs, Error, Result}; @@ -13,6 +13,15 @@ pub async fn create_postgres_pool(connection_string: &str) -> Result) -> Result<()> { + let sql = include_str!("../db/migrations/init.sql"); + sqlx::raw_sql(sql) + .execute(&pool) + .await + .map_err(|e| Error::DbError(e.to_string()))?; + Ok(()) +} + pub async fn create_cqrs( pool: Pool, queries: Vec>>, @@ -24,3 +33,54 @@ where let cqrs = postgres_cqrs(pool, queries, services); Ok(cqrs) } + +#[cfg(test)] +mod test_utils { + use sqlx::{Pool, Postgres}; + use testcontainers::ContainerAsync; + use testcontainers_modules::testcontainers::runners::AsyncRunner; + use tokio::sync::OnceCell; + + static POSTGRES_CONTAINER: OnceCell< + ContainerAsync, + > = OnceCell::const_new(); + + async fn get_postgres_container( + ) -> &'static ContainerAsync { + POSTGRES_CONTAINER + .get_or_init(|| async { + testcontainers_modules::postgres::Postgres::default() + .start() + .await + .expect("unable to start postgres container") + }) + .await + } + + static POSTGRES_POOL: OnceCell> = OnceCell::const_new(); + + /// crates a static postgres that will be the same for all tests. So when testing + /// keep in mind that the database might have state from other tests. + pub async fn get_postgres_pool() -> Pool { + let pool = POSTGRES_POOL + .get_or_init(|| async { + let container = get_postgres_container().await; + let connection_string = format!( + "postgres://postgres:postgres@127.0.0.1:{}/postgres", + container + .get_host_port_ipv4(5432) + .await + .expect("unable to get postgres test port") + ); + let pool = super::create_postgres_pool(&connection_string) + .await + .expect("unable to create postgres pool"); + super::init_tables(pool.clone()) + .await + .expect("unable to init tables"); + pool + }) + .await; + pool.clone() + } +} diff --git a/payday_postgres/src/offset.rs b/payday_postgres/src/offset.rs new file mode 100644 index 0000000..ce14b61 --- /dev/null +++ b/payday_postgres/src/offset.rs @@ -0,0 +1,100 @@ +use async_trait::async_trait; +use payday_core::{ + persistence::offset::{Offset, OffsetStoreApi}, + Error, Result, +}; +use sqlx::{Pool, Postgres, Row}; + +pub struct OffsetStore { + db: Pool, + id: String, +} + +impl OffsetStore { + pub fn new(db: Pool, id: &str) -> Self { + Self { + db, + id: id.to_string(), + } + } + + async fn get_offset_internal(&self) -> Result> { + let res: Option = sqlx::query("SELECT current_offset FROM offsets WHERE id = $1") + .bind(&self.id) + .fetch_optional(&self.db) + .await + .map_err(|e| Error::DbError(e.to_string()))? + .map(|r| r.get("current_offset")); + Ok(res.and_then(|r| u64::try_from(r).ok())) + } +} + +#[async_trait] +impl OffsetStoreApi for OffsetStore { + async fn get_offset(&self) -> Result { + let offset: Option = self.get_offset_internal().await?; + match offset { + Some(offset) => Ok(Offset { + id: self.id.to_owned(), + offset, + }), + None => Ok(Offset { + id: self.id.to_owned(), + offset: 0, + }), + } + } + + async fn set_offset(&self, offset: u64) -> Result<()> { + let existing: Option = self.get_offset_internal().await?; + if existing.is_some() { + sqlx::query("UPDATE offsets SET current_offset = $1 WHERE id = $2") + .bind(offset as i64) + .bind(&self.id) + .execute(&self.db) + .await + .map_err(|e| Error::DbError(e.to_string()))?; + } else { + sqlx::query("INSERT INTO offsets (id, current_offset) VALUES ($1, $2)") + .bind(&self.id) + .bind(offset as i64) + .execute(&self.db) + .await + .map_err(|e| Error::DbError(e.to_string()))?; + } + + Ok(()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::test_utils::get_postgres_pool; + + #[tokio::test] + async fn test_get_set_offset_non_existant() { + let db = get_postgres_pool().await; + let store = OffsetStore::new(db, "test_get_set_offset_non_existant"); + let result = store + .get_offset() + .await + .expect("Query executed successfully"); + assert!(result.offset == 0); + } + + #[tokio::test] + async fn test_get_set_offset() { + let db = get_postgres_pool().await; + let store = OffsetStore::new(db, "test_get_set_offset"); + store + .set_offset(10) + .await + .expect("Query executed successfully"); + let result = store + .get_offset() + .await + .expect("Query executed successfully"); + assert!(result.offset == 10); + } +} diff --git a/payday_surrealdb/Cargo.toml b/payday_surrealdb/Cargo.toml deleted file mode 100644 index 37b4a4c..0000000 --- a/payday_surrealdb/Cargo.toml +++ /dev/null @@ -1,14 +0,0 @@ -[package] -name = "payday_surrealdb" -version = "0.1.0" -edition = "2021" - -[dependencies] -payday_core = { path = "../payday_core" } -serde = { workspace = true } -serde_json = { workspace = true } -tokio = { workspace = true } -tokio-stream = { workspace = true } -async-trait = { workspace = true } -chrono = { workspace = true } -surrealdb = { version = "1.5.3" } diff --git a/payday_surrealdb/src/block_height.rs b/payday_surrealdb/src/block_height.rs deleted file mode 100644 index f5865bd..0000000 --- a/payday_surrealdb/src/block_height.rs +++ /dev/null @@ -1,63 +0,0 @@ -use async_trait::async_trait; -use payday_core::{ - persistence::block_height::{BlockHeight, BlockHeightStoreApi}, - Error, Result, -}; -use surrealdb::{engine::any::Any, Surreal}; - -pub struct BlockHeightStore { - db: Surreal, -} - -impl BlockHeightStore { - pub fn new(db: Surreal) -> Self { - Self { db } - } -} - -#[async_trait] -impl BlockHeightStoreApi for BlockHeightStore { - async fn get_block_height(&self, node_id: &str) -> Result { - let height: Option = self - .db - .select(("block_height", node_id)) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - match height { - Some(height) => Ok(height), - None => Ok(BlockHeight { - node_id: node_id.to_string(), - block_height: 0, - }), - } - } - - async fn set_block_height(&self, node_id: &str, block_height: u64) -> Result<()> { - let data = BlockHeight { - node_id: node_id.to_string(), - block_height, - }; - let existing: Option = self - .db - .select(("block_height", node_id)) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - - if existing.is_some() { - let _: Option = self - .db - .update(("block_height", node_id)) - .content(data) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - } else { - let _: Option = self - .db - .create(("block_height", node_id)) - .content(data) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - }; - Ok(()) - } -} diff --git a/payday_surrealdb/src/event_stream.rs b/payday_surrealdb/src/event_stream.rs deleted file mode 100644 index ade3481..0000000 --- a/payday_surrealdb/src/event_stream.rs +++ /dev/null @@ -1,59 +0,0 @@ -use async_trait::async_trait; -use payday_core::events::{publisher::Publisher, Message, MessageError, Result}; -use surrealdb::{engine::any::Any, Notification, Surreal}; -use tokio::task::JoinHandle; -use tokio_stream::StreamExt; - -use crate::task::SurrealTask; - -pub struct EventStream { - db: Surreal, - event_table: String, -} - -impl EventStream { - pub fn new(db: Surreal, event_table: &str) -> Self { - Self { - db, - event_table: event_table.to_string(), - } - } - - pub async fn subscribe(&self) -> Result> { - let table = self.event_table.to_string(); - let db = self.db.clone(); - let handle = tokio::spawn(async move { - let mut stream = db.select(&table).live().await.unwrap(); - while let Some(event) = stream.next().await { - print_event(event); - } - }); - Ok(handle) - } -} - -fn print_event(event: surrealdb::Result>) { - println!("Event: {:?}", event); -} - -#[async_trait] -impl Publisher for EventStream { - async fn publish(&self, event: E) -> Result<()> - where - E: 'async_trait, - { - let res: Vec = self - .db - .create(&self.event_table) - .content(event) - .await - .map_err(|e| MessageError::PublishError(e.to_string()))?; - if res.is_empty() { - Err(MessageError::PublishError( - "event was not inserted".to_string(), - )) - } else { - Ok(()) - } - } -} diff --git a/payday_surrealdb/src/lib.rs b/payday_surrealdb/src/lib.rs deleted file mode 100644 index 6fe5c22..0000000 --- a/payday_surrealdb/src/lib.rs +++ /dev/null @@ -1,49 +0,0 @@ -use chrono::Utc; -use payday_core::{Error, Result}; -use serde::{Serialize, Serializer}; -use surrealdb::{ - engine::any::{self, Any}, - Surreal, -}; - -pub mod block_height; -pub mod event_stream; -pub mod task; - -pub async fn create_surreal_db( - path: &str, - namespace: &str, - database: &str, -) -> Result> { - let db = any::connect(path) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - db.use_ns(namespace) - .use_db(database) - .await - .map_err(|e| Error::DbError(e.to_string()))?; - Ok(db) -} - -pub fn serialize_chrono_as_sql_datetime( - x: &chrono::DateTime, - s: S, -) -> std::result::Result -where - S: Serializer, -{ - Into::::into(*x).serialize(s) -} - -pub fn serialize_chrono_as_sql_datetime_option( - x: &Option>, - s: S, -) -> std::result::Result -where - S: Serializer, -{ - match x { - Some(x) => Into::::into(*x).serialize(s), - None => s.serialize_none(), - } -} diff --git a/payday_surrealdb/src/task.rs b/payday_surrealdb/src/task.rs deleted file mode 100644 index 4a8f653..0000000 --- a/payday_surrealdb/src/task.rs +++ /dev/null @@ -1,345 +0,0 @@ -use crate::serialize_chrono_as_sql_datetime; -use crate::serialize_chrono_as_sql_datetime_option; -use std::{sync::Arc, time::Duration}; - -use async_trait::async_trait; -use payday_core::events::task::TaskResult; -use payday_core::{ - date::{now, DateTime}, - events::{ - handler::{MessageProcessorApi, TaskHandler}, - publisher::{Publisher, TaskPublisher}, - task::{RetryType, Task, TaskStatus, TaskType}, - Message, MessageError, MessageType, Result, - }, -}; -use serde::{Deserialize, Serialize}; -use serde_json::Value; -use surrealdb::{engine::any::Any, sql::Thing, Surreal}; -use tokio::{sync::Mutex, task::JoinHandle}; - -/// A task stored in SurrealDB. -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct SurrealTask { - pub id: Option, - pub message_type: TaskType, - pub task_type: TaskType, - pub payload: Task, - pub status: TaskStatus, - pub processed: bool, - pub retry_type: RetryType, - pub max_retry: Option, - pub num_retry: u32, - #[serde(serialize_with = "serialize_chrono_as_sql_datetime_option")] - pub next_retry: Option, - #[serde(serialize_with = "serialize_chrono_as_sql_datetime")] - pub received_at: DateTime, - #[serde(serialize_with = "serialize_chrono_as_sql_datetime_option")] - pub started_at: Option, - #[serde(serialize_with = "serialize_chrono_as_sql_datetime_option")] - pub completed_at: Option, - pub recover_after: Option, -} - -impl SurrealTask { - pub fn new(payload: Task, retry_type: RetryType) -> Self { - let max_retry = match retry_type { - RetryType::Fixed(r, ..) => Some(r), - RetryType::Exponential(r, ..) => Some(r), - _ => None, - }; - - Self { - id: None, - message_type: "task".to_string(), - task_type: payload.task_type.to_owned(), - retry_type, - max_retry, - payload, - status: TaskStatus::Pending, - processed: false, - num_retry: 0, - next_retry: None, - received_at: now(), - started_at: None, - completed_at: None, - recover_after: None, - } - } - - pub fn task_type(&self) -> TaskType { - self.payload.task_type.to_owned() - } - - pub fn should_retry(&self) -> bool { - self.max_retry.is_some() - && self.max_retry.unwrap() > 0 - && self.num_retry < self.max_retry.unwrap() - && (self.retry_type.is_retry()) - } - - pub fn update_status(&self, result: TaskResult) -> SurrealTask { - let mut updated = self.clone(); - match result { - TaskResult::Success => { - updated.status = TaskStatus::Succeeded; - updated.completed_at = Some(now()); - updated.processed = true; - } - TaskResult::Retry => { - if updated.should_retry() { - updated.status = TaskStatus::Retrying; - updated.next_retry = updated.retry_type.next_retry(); - updated.num_retry += 1; - } else { - updated.status = TaskStatus::Failed; - updated.completed_at = Some(now()); - updated.processed = true; - } - } - TaskResult::Failed => { - updated.status = TaskStatus::Failed; - updated.completed_at = Some(now()); - updated.processed = true; - } - }; - updated - } -} - -impl Message for SurrealTask { - fn message_type(&self) -> MessageType { - self.task_type.to_string() - } - - fn payload(&self) -> Value { - serde_json::to_value(self.payload.to_owned()).expect("could not serialize task") - } -} - -pub struct SurrealTaskQueue { - db: Surreal, - task_table: String, -} - -impl SurrealTaskQueue { - pub fn new(db: Surreal, task_table: &str) -> Self { - Self { - db, - task_table: task_table.to_string(), - } - } - - async fn publish_task(&self, task: SurrealTask) -> Result<()> { - let res: Vec = self - .db - .create(&self.task_table) - .content(task) - .await - .map_err(|e| MessageError::PublishError(e.to_string()))?; - if res.is_empty() { - Err(MessageError::PublishError( - "event was not inserted".to_string(), - )) - } else { - Ok(()) - } - } -} - -#[async_trait] -impl Publisher for SurrealTaskQueue { - async fn publish(&self, event: E) -> Result<()> - where - E: 'async_trait, - { - let task = SurrealTask::new( - Task::new(event.message_type(), event.payload()), - RetryType::Ignore, - ); - self.publish_task(task).await - } -} - -#[async_trait] -impl TaskPublisher for SurrealTaskQueue { - async fn once(&self, task: Task) -> Result<()> { - let task = SurrealTask::new(task, RetryType::Never); - self.publish_task(task).await?; - Ok(()) - } - - async fn retry(&self, task: Task, params: RetryType) -> Result<()> { - let task = SurrealTask::new(task, params); - self.publish_task(task).await?; - Ok(()) - } -} - -pub struct SurrealTaskProcessor { - db: Surreal, - task_table: String, - handlers: Vec>>, - poll_interval: Duration, - batch_size: usize, - task_types: Option>, -} - -impl SurrealTaskProcessor { - pub fn new( - db: Surreal, - task_table: &str, - handlers: Vec>>, - ) -> Self { - Self { - db, - task_table: task_table.to_string(), - handlers, - poll_interval: Duration::from_secs(1), - batch_size: 5, - task_types: None, - } - } - - pub fn add_handler(&mut self, handler: Arc>) { - self.handlers.push(handler); - } - - #[allow(dead_code)] - async fn query_batch(&self) -> Result> { - let mut response = self - .db - .query(task_query( - &self.task_table, - self.batch_size, - self.task_types.clone(), - )) - .await - .map_err(|e| MessageError::SubscribeError(e.to_string()))?; - response - .take(0) - .map_err(|e| MessageError::SubscribeError(e.to_string())) - } -} - -#[async_trait] -impl MessageProcessorApi for SurrealTaskProcessor { - async fn process(&self) -> Result>> { - let db = self.db.clone(); - let table = self.task_table.to_string(); - let batch_size = self.batch_size; - let task_types = self.task_types.clone(); - let handlers = self.handlers.clone(); - let interval = self.poll_interval; - - let handle = tokio::spawn(async move { - loop { - let _ = cleanup_batch(db.clone(), &table, task_types.clone()).await?; - let tasks = query_batch(db.clone(), &table, batch_size, task_types.clone()).await?; - for task in tasks { - for handler in handlers.iter() { - let h = handler.lock().await; - if h.handles(&task.task_type) { - let updated = match h.handle(task.payload.clone()).await { - Ok(res) => task.update_status(res), - Err(_) if task.should_retry() => { - task.update_status(TaskResult::Retry) - } - _ => task.update_status(TaskResult::Failed), - }; - - let _: Option = db - .clone() - .update((&table, task.id.clone().unwrap().id)) - .content(updated) - .await - .map_err(|e| MessageError::ConfirmError(e.to_string()))?; - } - } - } - tokio::time::sleep(interval).await; - } - }); - Ok(handle) - } -} - -async fn query_batch( - db: Surreal, - table: &str, - limit: usize, - task_types: Option>, -) -> Result> { - let query = task_query(table, limit, task_types.clone()); - let mut response = db - .query(query) - .await - .map_err(|e| MessageError::SubscribeError(e.to_string()))?; - let result = response - .take(0) - .map_err(|e| MessageError::SubscribeError(e.to_string()))?; - Ok(result) -} - -async fn cleanup_batch( - db: Surreal, - table: &str, - task_types: Option>, -) -> Result<()> { - let max_execution = Duration::from_secs(1800); - let _ = db - .query(task_cleanup_query(table, task_types.clone(), max_execution)) - .await - .map_err(|e| MessageError::SubscribeError(e.to_string()))?; - Ok(()) -} - -fn task_query(table: &str, limit: usize, task_types: Option>) -> String { - format!( - "BEGIN TRANSACTION; \ - let $batch = SELECT * FROM {} \ - WHERE processed = false \ - AND status INSIDE ['Pending', 'Retrying'] \ - AND (next_retry = NONE OR next_retry < time::now()) \ - {} \ - LIMIT {}; \ - UPDATE $batch SET status = 'Processing', started_at = time::now(); \ - RETURN $batch; \ - COMMIT TRANSACTION; \ - ", - table, - task_type_query_fragment(task_types), - limit - ) -} - -fn task_cleanup_query( - table: &str, - task_types: Option>, - max_execution: Duration, -) -> String { - format!( - "BEGIN TRANSACTION; \ - let $failed = SELECT * FROM {} \ - WHERE processed = false \ - AND status = 'Processing' \ - AND started_at + (retry_after OR {}s) < time::now() \ - {}; \ - UPDATE $failed SET status = 'Failed', processed = true; \ - COMMIT TRANSACTION; \ - ", - table, - max_execution.as_secs(), - task_type_query_fragment(task_types) - ) -} - -fn task_type_query_fragment(task_types: Option>) -> String { - match task_types { - Some(types) if !types.is_empty() => { - let task_type_string = format!("\"{}\"", types.join("\",\"")); - format!("AND task_type INSIDE [{}]", task_type_string) - } - _ => "".to_string(), - } -}