diff --git a/Cargo.lock b/Cargo.lock index 11b6a30..5ca9d6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,32 +2,17 @@ # It is not intended for manual editing. version = 3 -[[package]] -name = "adler" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" - -[[package]] -name = "aho-corasick" -version = "0.7.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f" -dependencies = [ - "memchr", -] - [[package]] name = "anyhow" -version = "1.0.53" +version = "1.0.65" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94a45b455c14666b85fc40a019e8ab9eb75e3a124e05494f5397122bc9eb06e0" +checksum = "98161a4e3e2184da77bb14f02184cdd111e83bbbcc9979dfee3c44b9a85f5602" [[package]] name = "async-stream" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" +checksum = "dad5c83079eae9969be7fadefe640a1c566901f05ff91ab221de4b6f68d9507e" dependencies = [ "async-stream-impl", "futures-core", @@ -35,9 +20,9 @@ dependencies = [ [[package]] name = "async-stream-impl" -version = "0.3.2" +version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" +checksum = "10f203db73a71dfa2fb6dd22763990fa26f3d2625a6da2da900d23b87d26be27" dependencies = [ "proc-macro2", "quote", @@ -46,9 +31,9 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.52" +version = "0.1.57" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "061a7acccaa286c011ddc30970520b98fa40e00c9d644633fb26b5fc63a265e3" +checksum = "76464446b8bc32758d7e88ee1a804d9914cd9b1cb264c029899680b0be29826f" dependencies = [ "proc-macro2", "quote", @@ -61,6 +46,51 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" +[[package]] +name = "axum" +version = "0.5.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9e3356844c4d6a6d6467b8da2cffb4a2820be256f50a3a386c9d152bab31043" +dependencies = [ + "async-trait", + "axum-core", + "bitflags", + "bytes", + "futures-util", + "http", + "http-body", + "hyper", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "serde", + "sync_wrapper", + "tokio", + "tower", + "tower-http", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-core" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9f0c0a60006f2a293d82d571f635042a72edf927539b7685bd62d361963839b" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http", + "http-body", + "mime", + "tower-layer", + "tower-service", +] + [[package]] name = "base64" version = "0.13.0" @@ -75,21 +105,21 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bumpalo" -version = "3.9.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a45a46ab1f2412e53d3a0ade76ffad2025804294569aae387231a0cd6e0899" +checksum = "c1ad822118d20d2c234f427000d5acc36eabe1e29a348c89b63dd60b13f28e5d" [[package]] name = "bytes" -version = "1.1.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" +checksum = "ec8a7b6a70fde80372154c65702f00a0f56f3e1c36abbc6c440484be248856db" [[package]] name = "cc" -version = "1.0.72" +version = "1.0.73" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22a9137b95ea06864e018375b72adfb7db6e6f68cfc8df5a04d00288050485ee" +checksum = "2fff2a6927b3bb87f9595d67196a70493f627687a71d87a0d692242c33f58c11" [[package]] name = "cfg-if" @@ -113,47 +143,26 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc" -[[package]] -name = "crc32fast" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b540bd8bc810d3885c6ea91e2018302f68baba2129ab3e88f32389ee9370880d" -dependencies = [ - "cfg-if", -] - [[package]] name = "either" -version = "1.6.1" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" +checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" [[package]] name = "fastrand" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3fcf0cee53519c866c09b5de1f6c56ff9d647101f81c1964fa632e148896cdf" +checksum = "a7a407cfaa3385c4ae6b23e84623d48c2798d06e3e6a1878f7f59f17b3f86499" dependencies = [ "instant", ] [[package]] name = "fixedbitset" -version = "0.4.1" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "279fb028e20b3c4c320317955b77c5e0c9701f05a1d309905d6fc702cdc5053e" - -[[package]] -name = "flate2" -version = "1.0.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e6988e897c1c9c485f43b47a529cef42fde0547f9d8d41a7062518f1d8fc53f" -dependencies = [ - "cfg-if", - "crc32fast", - "libc", - "miniz_oxide", -] +checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" [[package]] name = "fnv" @@ -163,9 +172,9 @@ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" [[package]] name = "futures" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f73fe65f54d1e12b726f517d3e2135ca3125a437b6d998caf1962961f7172d9e" +checksum = "7f21eda599937fba36daeb58a22e8f5cee2d14c4a17b5b7739c7c8e5e3b8230c" dependencies = [ "futures-channel", "futures-core", @@ -177,9 +186,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3083ce4b914124575708913bca19bfe887522d6e2e6d0952943f5eac4a74010" +checksum = "30bdd20c28fadd505d0fd6712cdfcb0d4b5648baf45faef7f852afb2399bb050" dependencies = [ "futures-core", "futures-sink", @@ -187,21 +196,21 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c09fd04b7e4073ac7156a9539b57a484a8ea920f79c7c675d05d289ab6110d3" +checksum = "4e5aa3de05362c3fb88de6531e6296e85cde7739cccad4b9dfeeb7f6ebce56bf" [[package]] name = "futures-io" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc4045962a5a5e935ee2fdedaa4e08284547402885ab326734432bed5d12966b" +checksum = "bbf4d2a7a308fd4578637c0b17c7e1c7ba127b8f6ba00b29f717e9655d85eb68" [[package]] name = "futures-macro" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33c1e13800337f4d4d7a316bf45a567dbcb6ffe087f16424852d97e97a91f512" +checksum = "42cd15d1c7456c04dbdf7e88bcd69760d74f3a798d6444e16974b505b0e62f17" dependencies = [ "proc-macro2", "quote", @@ -210,21 +219,21 @@ dependencies = [ [[package]] name = "futures-sink" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21163e139fa306126e6eedaf49ecdb4588f939600f0b1e770f4205ee4b7fa868" +checksum = "21b20ba5a92e727ba30e72834706623d94ac93a725410b6a6b6fbc1b07f7ba56" [[package]] name = "futures-task" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c66a976bf5909d801bbef33416c41372779507e7a6b3a5e25e4749c58f776a" +checksum = "a6508c467c73851293f390476d4491cf4d227dbabcd4170f3bb6044959b294f1" [[package]] name = "futures-util" -version = "0.3.21" +version = "0.3.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8b7abd5d659d9b90c8cba917f6ec750a74e2dc23902ef9cd4cc8c8b22e6036a" +checksum = "44fb6cb1be61cc1d2e43b262516aafcf63b241cffdb1d3fa115f91d9c7b09c90" dependencies = [ "futures-core", "futures-macro", @@ -237,9 +246,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.4" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "418d37c8b1d42553c93648be529cb70f920d3baf8ef469b74b9638df426e0b4c" +checksum = "4eb1a864a501629691edf6c15a593b7a51eebaa1e8468e9ddc623de7c9b58ec6" dependencies = [ "cfg-if", "libc", @@ -248,9 +257,9 @@ dependencies = [ [[package]] name = "h2" -version = "0.3.11" +version = "0.3.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d9f1f717ddc7b2ba36df7e871fd88db79326551d3d6f1fc406fbfd28b582ff8e" +checksum = "5ca32592cf21ac7ccab1825cd87f6c9b3d9022c44d086172ed0966bec8af30be" dependencies = [ "bytes", "fnv", @@ -267,18 +276,15 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.11.2" +version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab5ef0d4909ef3724cc8cce6ccc8572c5c817592e9285f5464f8e86f8bd3726e" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" [[package]] name = "heck" -version = "0.3.3" +version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d621efb26863f0e9924c6ac577e8275e5e6b77455db64ffa6c65c904e9e132c" -dependencies = [ - "unicode-segmentation", -] +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" [[package]] name = "hermit-abi" @@ -291,9 +297,9 @@ dependencies = [ [[package]] name = "http" -version = "0.2.6" +version = "0.2.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "31f4c6746584866f0feabcc69893c5b51beef3831656a968ed7ae254cdc4fd03" +checksum = "75f43d41e26995c17e71ee126451dd3941010b0514a81a9d11f3b341debc2399" dependencies = [ "bytes", "fnv", @@ -302,20 +308,26 @@ dependencies = [ [[package]] name = "http-body" -version = "0.4.4" +version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" +checksum = "d5f38f16d184e36f2408a55281cd658ecbd3ca05cce6d6510a176eca393e26d1" dependencies = [ "bytes", "http", "pin-project-lite", ] +[[package]] +name = "http-range-header" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29" + [[package]] name = "httparse" -version = "1.6.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9100414882e15fb7feccb4897e5f0ff0ff1ca7d1a86a23208ada4d7a18e6c6c4" +checksum = "d897f394bad6a705d5f4104762e116a75639e470d80901eed05a860a95cb1904" [[package]] name = "httpdate" @@ -325,9 +337,9 @@ checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] name = "hyper" -version = "0.14.17" +version = "0.14.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "043f0e083e9901b6cc658a77d1eb86f4fc650bbb977a4337dd63192826aa85dd" +checksum = "02c929dc5c39e335a03c405292728118860721b10190d98c2a0f0efd5baafbac" dependencies = [ "bytes", "futures-channel", @@ -361,9 +373,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "1.8.0" +version = "1.9.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "282a6247722caba404c065016bbfa522806e51714c34f5dfc3e4a3a46fcb4223" +checksum = "10a35a97730320ffe8e2d410b5d3b69279b98d2c14bdb8b70ea89ecf7888d41e" dependencies = [ "autocfg", "hashbrown", @@ -380,24 +392,24 @@ dependencies = [ [[package]] name = "itertools" -version = "0.10.3" +version = "0.10.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a9a9d19fa1e79b6215ff29b9d6880b706147f16e9b1dbb1e4e5947b5b02bc5e3" +checksum = "b0fd2260e829bddf4cb6ea802289de2f86d6a7a690192fbe91b3f46e0f2c8473" dependencies = [ "either", ] [[package]] name = "itoa" -version = "1.0.1" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1aab8fc367588b89dcee83ab0fd66b72b50b72fa1904d7095045ace2b0c81c35" +checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754" [[package]] name = "js-sys" -version = "0.3.56" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a38fc24e30fd564ce974c02bf1d337caddff65be6cc4735a1f7eab22a7440f04" +checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47" dependencies = [ "wasm-bindgen", ] @@ -410,55 +422,47 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.117" +version = "0.2.134" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e74d72e0f9b65b5b4ca49a346af3976df0f9c61d550727f349ecd559f251a26c" +checksum = "329c933548736bc49fd575ee68c89e8be4d260064184389a5b77517cddd99ffb" [[package]] name = "log" -version = "0.4.14" +version = "0.4.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" +checksum = "abb12e687cfb44aa40f41fc3978ef76448f9b6038cad6aef4259d3c095a2382e" dependencies = [ "cfg-if", ] +[[package]] +name = "matchit" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73cbba799671b762df5a175adf59ce145165747bb891505c43d09aefbbf38beb" + [[package]] name = "memchr" -version = "2.4.1" +version = "2.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" [[package]] -name = "miniz_oxide" -version = "0.4.4" +name = "mime" +version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a92518e98c078586bc6c934028adcca4c92a53d6a958196de835170a01d84e4b" -dependencies = [ - "adler", - "autocfg", -] +checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mio" -version = "0.7.14" +version = "0.8.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" +checksum = "57ee1c23c7c63b0c9250c339ffdc69255f110b298b901b9f6c82547b7b87caaf" dependencies = [ "libc", "log", - "miow", - "ntapi", - "winapi", -] - -[[package]] -name = "miow" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" -dependencies = [ - "winapi", + "wasi", + "windows-sys", ] [[package]] @@ -467,15 +471,6 @@ version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5ce46fe64a9d73be07dcbe690a38ce1b293be448fd8ce1e6c1b8062c9f72c6a" -[[package]] -name = "ntapi" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c28774a7fd2fbb4f0babd8237ce554b73af68021b5f695a3cebd6c59bac0980f" -dependencies = [ - "winapi", -] - [[package]] name = "num_cpus" version = "1.13.1" @@ -488,9 +483,9 @@ dependencies = [ [[package]] name = "once_cell" -version = "1.9.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da32515d9f6e6e489d7bc9d84c71b060db7247dc035bbe44eac88cf87486d8d5" +checksum = "e82dad04139b71a90c080c8463fe0dc7902db5192d939bd0950f074d014339e1" [[package]] name = "openssl-probe" @@ -500,15 +495,15 @@ checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf" [[package]] name = "percent-encoding" -version = "2.1.0" +version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e" +checksum = "478c572c3d73181ff3c2539045f6eb99e5491218eae919370993b890cdbdd98e" [[package]] name = "petgraph" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4a13a2fa9d0b63e5f22328828741e523766fff0ee9e779316902290dff3f824f" +checksum = "e6d5014253a1331579ce62aa67443b4a658c5e7dd03d4bc6d302b94474888143" dependencies = [ "fixedbitset", "indexmap", @@ -516,18 +511,18 @@ dependencies = [ [[package]] name = "pin-project" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58ad3879ad3baf4e44784bc6a718a8698867bb991f8ce24d1bcbe2cfb4c3a75e" +checksum = "ad29a609b6bcd67fee905812e544992d216af9d755757c05ed2d0e15a74c6ecc" dependencies = [ "pin-project-internal", ] [[package]] name = "pin-project-internal" -version = "1.0.10" +version = "1.0.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "744b6f092ba29c3650faf274db506afd39944f48420f6c86b17cfe0ee1cb36bb" +checksum = "069bdb1e05adc7a8990dce9cc75370895fbe4e3d58b9b73bf1aee56359344a55" dependencies = [ "proc-macro2", "quote", @@ -536,9 +531,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.8" +version = "0.2.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e280fbe77cc62c91527259e9442153f4688736748d24660126286329742b4c6c" +checksum = "e0a7ae3ac2f1173085d398531c705756c94a4c56843785df85a60c1a0afac116" [[package]] name = "pin-utils" @@ -552,20 +547,30 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "eb9f9e6e233e5c4a35559a617bf40a4ec447db2e84c20b55a6f83167b7e57872" +[[package]] +name = "prettyplease" +version = "0.1.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a49e86d2c26a24059894a3afa13fd17d063419b05dfb83f06d9c3566060c3f5a" +dependencies = [ + "proc-macro2", + "syn", +] + [[package]] name = "proc-macro2" -version = "1.0.36" +version = "1.0.46" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" +checksum = "94e2ef8dbfc347b10c094890f778ee2e36ca9bb4262e86dc99cd217e35f3470b" dependencies = [ - "unicode-xid", + "unicode-ident", ] [[package]] name = "prost" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "444879275cb4fd84958b1a1d5420d15e6fcf7c235fe47f053c9c2a80aceb6001" +checksum = "399c3c31cdec40583bb68f0b18403400d01ec4289c383aa047560439952c4dd7" dependencies = [ "bytes", "prost-derive", @@ -573,9 +578,9 @@ dependencies = [ [[package]] name = "prost-build" -version = "0.9.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62941722fb675d463659e49c4f3fe1fe792ff24fe5bbaa9c08cd3b98a1c354f5" +checksum = "7f835c582e6bd972ba8347313300219fed5bfa52caf175298d860b61ff6069bb" dependencies = [ "bytes", "heck", @@ -593,9 +598,9 @@ dependencies = [ [[package]] name = "prost-derive" -version = "0.9.0" +version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f9cc1a3263e07e0bf68e96268f37665207b49560d98739662cdfaae215c720fe" +checksum = "7345d5f0e08c0536d7ac7229952590239e77abf0a0100a1b1d890add6ea96364" dependencies = [ "anyhow", "itertools", @@ -606,19 +611,29 @@ dependencies = [ [[package]] name = "prost-types" -version = "0.9.0" +version = "0.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "534b7a0e836e3c482d2693070f982e39e7611da9695d4d1f5a4b186b51faef0a" +checksum = "4dfaa718ad76a44b3415e6c4d53b17c8f99160dcb3a99b10470fce8ad43f6e3e" dependencies = [ "bytes", "prost", ] +[[package]] +name = "protoc" +version = "2.28.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a0218039c514f9e14a5060742ecd50427f8ac4f85a6dc58f2ddb806e318c55ee" +dependencies = [ + "log", + "which", +] + [[package]] name = "quote" -version = "1.0.15" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "864d3e96a899863136fc6e99f3d7cae289dafe43bf2c5ac19b70df7210c0a145" +checksum = "bbe448f377a7d6961e30f5955f9b8d106c3f5e449d493ee1b125c1d43c2b5179" dependencies = [ "proc-macro2", ] @@ -646,38 +661,36 @@ dependencies = [ [[package]] name = "rand_core" -version = "0.6.3" +version = "0.6.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" dependencies = [ "getrandom", ] [[package]] name = "redox_syscall" -version = "0.2.10" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" +checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.5.4" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" +checksum = "4c4eb3267174b8c6c2f654116623910a0fef09c4753f8dd83db29c48a0df988b" dependencies = [ - "aho-corasick", - "memchr", "regex-syntax", ] [[package]] name = "regex-syntax" -version = "0.6.25" +version = "0.6.27" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" +checksum = "a3f87b73ce11b1619a3c6332f45341e0047173771e8b8b73f87bfeefb7b56244" [[package]] name = "remove_dir_all" @@ -705,9 +718,9 @@ dependencies = [ [[package]] name = "rustls" -version = "0.20.3" +version = "0.20.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b323592e3164322f5b193dc4302e4e36cd8d37158a712d664efae1a5c2791700" +checksum = "5aab8ee6c7097ed6057f43c187a62418d0c05a4bd5f18b3571db50ee0f9ce033" dependencies = [ "log", "ring", @@ -717,9 +730,9 @@ dependencies = [ [[package]] name = "rustls-native-certs" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca9ebdfa27d3fc180e42879037b5338ab1c040c06affd00d8338598e7800943" +checksum = "0167bac7a9f490495f3c33013e7722b53cb087ecbe082fb0c6387c96f634ea50" dependencies = [ "openssl-probe", "rustls-pemfile", @@ -729,21 +742,21 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "0.2.1" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eebeaeb360c87bfb72e84abdb3447159c0eaececf1bef2aecd65a8be949d1c9" +checksum = "0864aeff53f8c05aa08d86e5ef839d3dfcf07aeba2db32f12db0ef716e87bd55" dependencies = [ "base64", ] [[package]] name = "schannel" -version = "0.1.19" +version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75" +checksum = "88d6731146462ea25d9244b2ed5fd1d716d25c52e4d54aa4fb0f3c4e9854dbe2" dependencies = [ "lazy_static", - "winapi", + "windows-sys", ] [[package]] @@ -758,9 +771,9 @@ dependencies = [ [[package]] name = "security-framework" -version = "2.6.1" +version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2dc14f172faf8a0194a3aded622712b0de276821addc574fa54fc0a1167e10dc" +checksum = "2bc1bb97804af6631813c55739f771071e0f2ed33ee20b68c86ec505d906356c" dependencies = [ "bitflags", "core-foundation", @@ -779,17 +792,26 @@ dependencies = [ "libc", ] +[[package]] +name = "serde" +version = "1.0.145" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b" + [[package]] name = "slab" -version = "0.4.5" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9def91fd1e018fe007022791f865d0ccc9b3a0d5001e01aabb8b40e46000afb5" +checksum = "4614a76b2a8be0058caa9dbbaf66d988527d86d003c11a94fbd335d7661edcef" +dependencies = [ + "autocfg", +] [[package]] name = "socket2" -version = "0.4.4" +version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "66d72b759436ae32898a2af0a14218dbf55efde3feeb170eb623637db85ee1e0" +checksum = "02e2d2db9033d13a1567121ddd7a095ee144db4e1ca1b1bda3419bc0da294ebd" dependencies = [ "libc", "winapi", @@ -803,15 +825,21 @@ checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" [[package]] name = "syn" -version = "1.0.86" +version = "1.0.101" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8a65b3f4ffa0092e9887669db0eae07941f023991ab58ea44da8fe8e2d511c6b" +checksum = "e90cde112c4b9690b8cbe810cba9ddd8bc1d7472e2cae317b69e9438c1cba7d2" dependencies = [ "proc-macro2", "quote", - "unicode-xid", + "unicode-ident", ] +[[package]] +name = "sync_wrapper" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8" + [[package]] name = "tempfile" version = "3.3.0" @@ -828,13 +856,15 @@ dependencies = [ [[package]] name = "tinkoff-invest-api" -version = "0.1.1" +version = "0.1.2" dependencies = [ "async-stream", "futures", "futures-util", "prost", + "prost-build", "prost-types", + "protoc", "tokio", "tokio-stream", "tonic", @@ -844,16 +874,18 @@ dependencies = [ [[package]] name = "tokio" -version = "1.16.1" +version = "1.21.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c27a64b625de6d309e8c57716ba93021dccf1b3b5c97edd6d3dd2d2135afc0a" +checksum = "a9e03c497dc955702ba729190dc4aac6f2a0ce97f913e5b1b5912fc5039d9099" dependencies = [ + "autocfg", "bytes", "libc", "memchr", "mio", "num_cpus", "pin-project-lite", + "socket2", "tokio-macros", "winapi", ] @@ -870,9 +902,9 @@ dependencies = [ [[package]] name = "tokio-macros" -version = "1.7.0" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b557f72f448c511a979e2564e55d74e6c4432fc96ff4f6241bc6bded342643b7" +checksum = "9724f9a975fb987ef7a3cd9be0350edcbe130698af5b8f7a631e23d42d052484" dependencies = [ "proc-macro2", "quote", @@ -881,9 +913,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.23.2" +version = "0.23.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a27d5f2b839802bd8267fa19b0530f5a08b9c08cd417976be2a65d130fe1c11b" +checksum = "c43ee83903113e03984cb9e5cebe6c04a5116269e900e3ddba8f068a62adda59" dependencies = [ "rustls", "tokio", @@ -892,9 +924,9 @@ dependencies = [ [[package]] name = "tokio-stream" -version = "0.1.8" +version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" +checksum = "f6edf2d6bc038a43d31353570e27270603f4648d18f5ed10c0e179abe43255af" dependencies = [ "futures-core", "pin-project-lite", @@ -903,28 +935,29 @@ dependencies = [ [[package]] name = "tokio-util" -version = "0.6.9" +version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0" +checksum = "0bb2e075f03b3d66d8d8785356224ba688d2906a371015e225beeb65ca92c740" dependencies = [ "bytes", "futures-core", "futures-sink", - "log", "pin-project-lite", "tokio", + "tracing", ] [[package]] name = "tonic" -version = "0.6.2" -source = "git+https://github.com/hyperium/tonic?rev=d6c0fc112b2288a080fd0a727453b24d666e3d79#d6c0fc112b2288a080fd0a727453b24d666e3d79" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55b9af819e54b8f33d453655bef9b9acc171568fb49523078d0cc4e7484200ec" dependencies = [ "async-stream", "async-trait", + "axum", "base64", "bytes", - "flate2", "futures-core", "futures-util", "h2", @@ -951,10 +984,11 @@ dependencies = [ [[package]] name = "tonic-build" -version = "0.6.2" +version = "0.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9403f1bafde247186684b230dc6f38b5cd514584e8bec1dd32514be4745fa757" +checksum = "48c6fd7c2581e36d63388a9e04c350c21beb7a8b059580b2e93993c526899ddc" dependencies = [ + "prettyplease", "proc-macro2", "prost-build", "quote", @@ -963,9 +997,9 @@ dependencies = [ [[package]] name = "tower" -version = "0.4.11" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5651b5f6860a99bd1adb59dbfe1db8beb433e73709d9032b413a77e2fb7c066a" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" dependencies = [ "futures-core", "futures-util", @@ -975,13 +1009,31 @@ dependencies = [ "rand", "slab", "tokio", - "tokio-stream", "tokio-util", "tower-layer", "tower-service", "tracing", ] +[[package]] +name = "tower-http" +version = "0.3.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c530c8675c1dbf98facee631536fa116b5fb6382d7dd6dc1b118d970eafe3ba" +dependencies = [ + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http", + "http-body", + "http-range-header", + "pin-project-lite", + "tower", + "tower-layer", + "tower-service", +] + [[package]] name = "tower-layer" version = "0.3.1" @@ -990,15 +1042,15 @@ checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62" [[package]] name = "tower-service" -version = "0.3.1" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" +checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52" [[package]] name = "tracing" -version = "0.1.30" +version = "0.1.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d8d93354fe2a8e50d5953f5ae2e47a3fc2ef03292e7ea46e3cc38f549525fb9" +checksum = "2fce9567bd60a67d08a16488756721ba392f24f29006402881e43b19aac64307" dependencies = [ "cfg-if", "log", @@ -1009,9 +1061,9 @@ dependencies = [ [[package]] name = "tracing-attributes" -version = "0.1.19" +version = "0.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8276d9a4a3a558d7b7ad5303ad50b53d58264641b82914b7ada36bd762e7a716" +checksum = "11c75893af559bc8e10716548bdef5cb2b983f8e637db9d0e15126b61b484ee2" dependencies = [ "proc-macro2", "quote", @@ -1020,11 +1072,11 @@ dependencies = [ [[package]] name = "tracing-core" -version = "0.1.22" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "03cfcb51380632a72d3111cb8d3447a8d908e577d31beeac006f836383d29a23" +checksum = "5aeea4303076558a00714b823f9ad67d58a3bbda1df83d8827d21193156e22f7" dependencies = [ - "lazy_static", + "once_cell", ] [[package]] @@ -1044,16 +1096,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" [[package]] -name = "unicode-segmentation" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8820f5d777f6224dc4be3632222971ac30164d4a258d595640799554ebfd99" - -[[package]] -name = "unicode-xid" -version = "0.2.2" +name = "unicode-ident" +version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" +checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd" [[package]] name = "untrusted" @@ -1063,9 +1109,9 @@ checksum = "a156c684c91ea7d62626509bce3cb4e1d9ed5c4d978f7b4352658f96a4c26b4a" [[package]] name = "uuid" -version = "0.8.2" +version = "1.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7" +checksum = "dd6469f4314d5f1ffec476e05f17cc9a78bc7a27a6a857842170bdf8d6f98d2f" dependencies = [ "getrandom", ] @@ -1082,15 +1128,15 @@ dependencies = [ [[package]] name = "wasi" -version = "0.10.2+wasi-snapshot-preview1" +version = "0.11.0+wasi-snapshot-preview1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.79" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25f1af7423d8588a3d840681122e72e6a24ddbcb3f0ec385cac0d12d24256c06" +checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -1098,13 +1144,13 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.79" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8b21c0df030f5a177f3cba22e9bc4322695ec43e7257d865302900290bcdedca" +checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142" dependencies = [ "bumpalo", - "lazy_static", "log", + "once_cell", "proc-macro2", "quote", "syn", @@ -1113,9 +1159,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.79" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f4203d69e40a52ee523b2529a773d5ffc1dc0071801c87b3d270b471b80ed01" +checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1123,9 +1169,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.79" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfa8a30d46208db204854cadbb5d4baf5fcf8071ba5bf48190c3e59937962ebc" +checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c" dependencies = [ "proc-macro2", "quote", @@ -1136,15 +1182,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.79" +version = "0.2.83" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d958d035c4438e28c70e4321a2911302f10135ce78a9c7834c0cab4123d06a2" +checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f" [[package]] name = "web-sys" -version = "0.3.56" +version = "0.3.60" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c060b319f29dd25724f09a2ba1418f142f539b2be99fbf4d2d5a8f7330afb8eb" +checksum = "bcda906d8be16e728fd5adc5b729afad4e444e106ab28cd1c7256e54fa61510f" dependencies = [ "js-sys", "wasm-bindgen", @@ -1162,13 +1208,13 @@ dependencies = [ [[package]] name = "which" -version = "4.2.4" +version = "4.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2a5a7e487e921cf220206864a94a89b6c6905bfc19f1057fa26a4cb360e5c1d2" +checksum = "1c831fbbee9e129a8cf93e7747a82da9d95ba8e16621cae60ec2cdc849bacb7b" dependencies = [ "either", - "lazy_static", "libc", + "once_cell", ] [[package]] @@ -1192,3 +1238,46 @@ 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-sys" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea04155a16a59f9eab786fe12a4a450e75cdb175f9e0d80da1e17db09f55b8d2" +dependencies = [ + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9bb8c3fd39ade2d67e9874ac4f3db21f0d710bee00fe7cab16949ec184eeaa47" + +[[package]] +name = "windows_i686_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "180e6ccf01daf4c426b846dfc66db1fc518f074baa793aa7d9b9aaeffad6a3b6" + +[[package]] +name = "windows_i686_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2e7917148b2812d1eeafaeb22a97e4813dfa60a3f8f78ebe204bcc88f12f024" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4dcd171b8776c41b97521e5da127a2d86ad280114807d0b2ab1e462bc764d9e1" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.36.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c811ca4a8c853ef420abd8592ba53ddbbac90410fab6903b3e79972a631f7680" diff --git a/Cargo.toml b/Cargo.toml index 82428bc..4769fb2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,10 +7,12 @@ license = "MIT" repository = "https://github.com/ovr/tinkoff-invest-rust" [dependencies] -prost = "0.9" -prost-types = "0.9.0" -uuid = { version = "0.8", features = ["v4"] } -tonic = { version = "0.6.2", features = ["tls", "compression", "tls-roots"]} +prost = "0.11" +prost-types = "0.11" +prost-build = "0.11" +protoc = "2" +uuid = { version = "1", features = ["v4"] } +tonic = { version = "0.8", features = ["tls", "tls-roots", "codegen", "channel"]} [dev-dependencies] async-stream = "0.3" @@ -20,8 +22,8 @@ tokio-stream = {version = "0.1", features = ["net"]} futures-util = {version = "0.3.21"} [build-dependencies] -tonic-build = { version = "0.6.2", features = ["rustfmt"] } +tonic-build = { version = "0.8" } [patch.crates-io] # Awaiting release with https://github.com/hyperium/tonic/commit/468e4221f0c496d9ffb4de24d3658b9267e884b1 -tonic = { git = "https://github.com/hyperium/tonic", rev = "d6c0fc112b2288a080fd0a727453b24d666e3d79" } +# tonic = { git = "https://github.com/hyperium/tonic", rev = "d6c0fc112b2288a080fd0a727453b24d666e3d79" } diff --git a/build.rs b/build.rs index 39ef2a2..ea5aa39 100644 --- a/build.rs +++ b/build.rs @@ -3,7 +3,6 @@ fn main() -> Result<(), Box> { .build_client(true) .build_server(false) .out_dir("src") - .format(true) .compile( &[ "contracts/instruments.proto", diff --git a/contracts/.DS_Store b/contracts/.DS_Store new file mode 100644 index 0000000..5008ddf Binary files /dev/null and b/contracts/.DS_Store differ diff --git a/contracts/instruments.proto b/contracts/instruments.proto index a9b4c36..d8dc55a 100644 --- a/contracts/instruments.proto +++ b/contracts/instruments.proto @@ -26,6 +26,9 @@ service InstrumentsService {/*Сервис предназначен для по //Метод получения списка облигаций. rpc Bonds (InstrumentsRequest) returns (BondsResponse); + //Метод получения графика выплат купонов по облигации. + rpc GetBondCoupons (GetBondCouponsRequest) returns (GetBondCouponsResponse); + //Метод получения валюты по её идентификатору. rpc CurrencyBy (InstrumentRequest) returns (CurrencyResponse); @@ -44,6 +47,12 @@ service InstrumentsService {/*Сервис предназначен для по //Метод получения списка фьючерсов. rpc Futures (InstrumentsRequest) returns (FuturesResponse); + //Метод получения опциона по его идентификатору. + rpc OptionBy (InstrumentRequest) returns (OptionResponse); + + //Метод получения списка опционов. + rpc Options (InstrumentsRequest) returns (OptionsResponse); + //Метод получения акции по её идентификатору. rpc ShareBy (InstrumentRequest) returns (ShareResponse); @@ -61,16 +70,40 @@ service InstrumentsService {/*Сервис предназначен для по //Метод для получения событий выплаты дивидендов по инструменту. rpc GetDividends (GetDividendsRequest) returns (GetDividendsResponse); + + //Метод получения актива по его идентификатору. + rpc GetAssetBy (AssetRequest) returns (AssetResponse); + + //Метод получения списка активов. + rpc GetAssets (AssetsRequest) returns (AssetsResponse); + + //Метод получения списка избранных инструментов. + rpc GetFavorites (GetFavoritesRequest) returns (GetFavoritesResponse); + + //Метод редактирования списка избранных инструментов. + rpc EditFavorites (EditFavoritesRequest) returns (EditFavoritesResponse); + + //Метод получения списка стран. + rpc GetCountries (GetCountriesRequest) returns (GetCountriesResponse); + + //Метод поиска инструмента. + rpc FindInstrument (FindInstrumentRequest) returns (FindInstrumentResponse); + + //Метод получения списка брендов. + rpc GetBrands(GetBrandsRequest) returns (GetBrandsResponse); + + //Метод получения бренда по его идентификатору. + rpc GetBrandBy(GetBrandRequest) returns (Brand); } -//Запрос расписания торгов +//Запрос расписания торгов. message TradingSchedulesRequest { string exchange = 1; //Наименование биржи или расчетного календаря.
Если не передаётся, возвращается информация по всем доступным торговым площадкам. google.protobuf.Timestamp from = 2; //Начало периода по часовому поясу UTC. google.protobuf.Timestamp to = 3; //Окончание периода по часовому поясу UTC. } -//Список торговых площадок +//Список торговых площадок. message TradingSchedulesResponse { repeated TradingSchedule exchanges = 1; // Список торговых площадок и режимов торгов. } @@ -83,12 +116,20 @@ message TradingSchedule { //Информация о времени торгов. message TradingDay { + reserved 5, 6; google.protobuf.Timestamp date = 1; // Дата. bool is_trading_day = 2; // Признак торгового дня на бирже. google.protobuf.Timestamp start_time = 3; // Время начала торгов по часовому поясу UTC. google.protobuf.Timestamp end_time = 4; // Время окончания торгов по часовому поясу UTC. - google.protobuf.Timestamp market_order_start_time = 5; // Время начала подачи заявки по часовому поясу UTC. - google.protobuf.Timestamp market_order_end_time = 6; // Время окончания подачи заявки по часовому поясу UTC. + google.protobuf.Timestamp opening_auction_start_time = 7; // Время начала аукциона открытия в часовом поясе UTC. + google.protobuf.Timestamp closing_auction_end_time = 8; // Время окончания аукциона закрытия в часовом поясе UTC. + google.protobuf.Timestamp evening_opening_auction_start_time = 9; // Время начала аукциона открытия вечерней сессии в часовом поясе UTC. + google.protobuf.Timestamp evening_start_time = 10; // Время начала вечерней сессии в часовом поясе UTC. + google.protobuf.Timestamp evening_end_time = 11; // Время окончания вечерней сессии в часовом поясе UTC. + google.protobuf.Timestamp clearing_start_time = 12; // Время начала основного клиринга в часовом поясе UTC. + google.protobuf.Timestamp clearing_end_time = 13; // Время окончания основного клиринга в часовом поясе UTC. + google.protobuf.Timestamp premarket_start_time = 14; // Время начала премаркета в часовом поясе UTC. + google.protobuf.Timestamp premarket_end_time = 15; // Время окончания премаркета в часовом поясе UTC. } //Запрос получения инструмента по идентификатору. @@ -113,6 +154,43 @@ message BondsResponse { repeated Bond instruments = 1; //Массив облигаций. } +//Запрос купонов по облигации. +message GetBondCouponsRequest { + string figi = 1; //Figi-идентификатор инструмента. + google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) + google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) +} + +//Купоны по облигации. +message GetBondCouponsResponse { + repeated Coupon events = 1; +} + +//Объект передачи информации о купоне облигации. +message Coupon { + string figi = 1; //Figi-идентификатор инструмента. + google.protobuf.Timestamp coupon_date = 2; //Дата выплаты купона. + int64 coupon_number = 3; //Номер купона. + google.protobuf.Timestamp fix_date = 4; //(Опционально) Дата фиксации реестра для выплаты купона. + MoneyValue pay_one_bond = 5; //Выплата на одну облигацию. + CouponType coupon_type = 6; //Тип купона. + google.protobuf.Timestamp coupon_start_date = 7; //Начало купонного периода. + google.protobuf.Timestamp coupon_end_date = 8; //Окончание купонного периода. + int32 coupon_period = 9; //Купонный период в днях. +} + +//Тип купонов. +enum CouponType { + COUPON_TYPE_UNSPECIFIED = 0; //Неопределенное значение + COUPON_TYPE_CONSTANT = 1; //Постоянный + COUPON_TYPE_FLOATING = 2; //Плавающий + COUPON_TYPE_DISCOUNT = 3; //Дисконт + COUPON_TYPE_MORTGAGE = 4; //Ипотечный + COUPON_TYPE_FIX = 5; //Фиксированный + COUPON_TYPE_VARIABLE = 6; //Переменный + COUPON_TYPE_OTHER = 7; //Прочее +} + //Данные по валюте. message CurrencyResponse { Currency instrument = 1; // Информация о валюте. @@ -143,6 +221,94 @@ message FuturesResponse { repeated Future instruments = 1; //Массив фьючерсов. } +//Данные по опциону. +message OptionResponse { + Option instrument = 1; // Информация по опциону. +} + +//Данные по опционам. +message OptionsResponse { + repeated Option instruments = 1; //Массив данных по опциону. +} + +//Опцион. +message Option { + string uid = 1; //Уникальный идентификатор инструмента. + string position_uid = 2; //Уникальный идентификатор позиции. + string ticker = 3; //Тикер инструмента. + string class_code = 4; //Класс-код. + string basic_asset_position_uid = 5; //Уникальный идентификатор позиции основного инструмента. + + SecurityTradingStatus trading_status = 21; //Текущий режим торгов инструмента. + RealExchange real_exchange = 31; //Реальная площадка исполнения расчётов. Допустимые значения: [REAL_EXCHANGE_MOEX, REAL_EXCHANGE_RTS] + OptionDirection direction = 41; //Направление опциона. + OptionPaymentType payment_type = 42; //Тип расчетов по опциону. + OptionStyle style = 43; //Стиль опциона. + OptionSettlementType settlement_type = 44; //Способ исполнения опциона. + + string name = 101; //Название инструмента. + string currency = 111; //Валюта. + string settlement_currency = 112; //Валюта, в которой оценивается контракт. + string asset_type = 131; //Тип актива. + string basic_asset = 132; //Основной актив. + string exchange = 141; //Биржа. + string country_of_risk = 151; //Код страны рисков. + string country_of_risk_name = 152; //Наименование страны рисков. + string sector = 161; //Сектор экономики. + + int32 lot = 201; //Количество бумаг в лоте. + Quotation basic_asset_size = 211; //Размер основного актива. + Quotation klong = 221; //Коэффициент ставки риска длинной позиции по клиенту. + Quotation kshort = 222; //Коэффициент ставки риска короткой позиции по клиенту. + Quotation dlong = 223; //Ставка риска минимальной маржи лонг. + Quotation dshort = 224; //Ставка риска минимальной маржи шорт. + Quotation dlong_min = 225; //Ставка риска начальной маржи лонг. + Quotation dshort_min = 226; //Ставка риска начальной маржи шорт. + Quotation min_price_increment = 231; //Минимальный шаг цены. + MoneyValue strike_price = 241; //Цена страйка. + + google.protobuf.Timestamp expiration_date = 301; //Дата истечения срока в формате UTC. + google.protobuf.Timestamp first_trade_date = 311; //Дата начала обращения контракта в формате UTC. + google.protobuf.Timestamp last_trade_date = 312; //Дата исполнения в формате UTC. + google.protobuf.Timestamp first_1min_candle_date = 321; //Дата первой минутной свечи в формате UTC. + google.protobuf.Timestamp first_1day_candle_date = 322; //Дата первой дневной свечи в формате UTC. + + bool short_enabled_flag = 401; //Признак доступности для операций шорт. + bool for_iis_flag = 402; //Возможность покупки/продажи на ИИС. + bool otc_flag = 403; //Признак внебиржевой ценной бумаги. + bool buy_available_flag = 404; //Признак доступности для покупки. + bool sell_available_flag = 405; //Признак доступности для продажи. + bool for_qual_investor_flag = 406; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. +} + +//Тип опциона по направлению сделки. +enum OptionDirection { + OPTION_DIRECTION_UNSPECIFIED = 0; + OPTION_DIRECTION_PUT = 1; + OPTION_DIRECTION_CALL = 2; +} + +//Тип расчетов по опциону. +enum OptionPaymentType { + OPTION_PAYMENT_TYPE_UNSPECIFIED = 0; + OPTION_PAYMENT_TYPE_PREMIUM = 1; + OPTION_PAYMENT_TYPE_MARGINAL = 2; +} + +//Тип опциона по стилю. +enum OptionStyle { + OPTION_STYLE_UNSPECIFIED = 0; + OPTION_STYLE_AMERICAN = 1; + OPTION_STYLE_EUROPEAN = 2; +} + +//Тип опциона по способу исполнения. +enum OptionSettlementType { + OPTION_EXECUTION_TYPE_UNSPECIFIED = 0; + OPTION_EXECUTION_TYPE_PHYSICAL_DELIVERY = 1; + OPTION_EXECUTION_TYPE_CASH_SETTLEMENT = 2; +} + //Данные по акции. message ShareResponse { Share instrument = 1; // Информация об акции. @@ -175,6 +341,8 @@ message Bond { int32 coupon_quantity_per_year = 17; //Количество выплат по купонам в год. google.protobuf.Timestamp maturity_date = 18; //Дата погашения облигации в часовом поясе UTC. MoneyValue nominal = 19; //Номинал облигации. + MoneyValue initial_nominal = 20; //Первоначальный номинал облигации. + google.protobuf.Timestamp state_reg_date = 21; //Дата выпуска облигации в часовом поясе UTC. google.protobuf.Timestamp placement_date = 22; //Дата размещения в часовом поясе UTC. MoneyValue placement_price = 23; //Цена размещения. @@ -196,6 +364,15 @@ message Bond { bool amortization_flag = 37; //Признак облигации с амортизацией долга. Quotation min_price_increment = 38; //Шаг цены. bool api_trade_available_flag = 39; //Признак доступности торгов через API. + + string uid = 40; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 41; //Реальная площадка исполнения расчётов. + string position_uid = 42; //Уникальный идентификатор позиции инструмента. + + bool for_iis_flag = 51; //Признак доступности для ИИС. + bool for_qual_investor_flag = 52; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + google.protobuf.Timestamp first_1min_candle_date = 61; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 62; //Дата первой дневной свечи. } //Объект передачи информации о валюте. @@ -229,6 +406,15 @@ message Currency { string iso_currency_name = 24; //Строковый ISO-код валюты. Quotation min_price_increment = 25; //Шаг цены. bool api_trade_available_flag = 26; //Признак доступности торгов через API. + + string uid = 27; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 28; //Реальная площадка исполнения расчётов. + string position_uid = 29; //Уникальный идентификатор позиции инструмента. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 52; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. } //Объект передачи информации об инвестиционном фонде. @@ -266,6 +452,15 @@ message Etf { bool sell_available_flag = 28; //Признак доступности для продажи. Quotation min_price_increment = 29; //Шаг цены. bool api_trade_available_flag = 30; //Признак доступности торгов через API. + + string uid = 31; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 32; //Реальная площадка исполнения расчётов. + string position_uid = 33; //Уникальный идентификатор позиции инструмента. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 42; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. } //Объект передачи информации о фьючерсе. @@ -304,6 +499,16 @@ message Future { bool sell_available_flag = 28; //Признак доступности для продажи. Quotation min_price_increment = 29; //Шаг цены. bool api_trade_available_flag = 30; //Признак доступности торгов через API. + + string uid = 31; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 32; //Реальная площадка исполнения расчётов. + string position_uid = 33; //Уникальный идентификатор позиции инструмента. + string basic_asset_position_uid = 34; //Уникальный идентификатор позиции основного инструмента. + + bool for_iis_flag = 41; //Признак доступности для ИИС. + bool for_qual_investor_flag = 42; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. } //Объект передачи информации об акции. @@ -342,6 +547,16 @@ message Share { ShareType share_type = 30; //Тип акции. Возможные значения: [ShareType](https://tinkoff.github.io/investAPI/instruments#sharetype) Quotation min_price_increment = 31; //Шаг цены. bool api_trade_available_flag = 32; //Признак доступности торгов через API. + + string uid = 33; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 34; //Реальная площадка исполнения расчётов. + string position_uid = 35; //Уникальный идентификатор позиции инструмента. + + bool for_iis_flag = 46; //Признак доступности для ИИС. + bool for_qual_investor_flag = 47; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. } //Запрос НКД по облигации @@ -382,6 +597,8 @@ enum InstrumentIdType { INSTRUMENT_ID_UNSPECIFIED = 0; //Значение не определено. INSTRUMENT_ID_TYPE_FIGI = 1; //Figi. INSTRUMENT_ID_TYPE_TICKER = 2; //Ticker. + INSTRUMENT_ID_TYPE_UID = 3; //Уникальный идентификатор. + INSTRUMENT_ID_TYPE_POSITION_UID = 4; //Идентификатор позиции. } //Статус запрашиваемых инструментов. @@ -425,13 +642,23 @@ message Instrument { bool sell_available_flag = 22; //Признак доступности для продажи. Quotation min_price_increment = 23; //Шаг цены. bool api_trade_available_flag = 24; //Признак доступности торгов через API. + + string uid = 25; //Уникальный идентификатор инструмента. + RealExchange real_exchange = 26; //Реальная площадка исполнения расчётов. + string position_uid = 27; //Уникальный идентификатор позиции инструмента. + + bool for_iis_flag = 36; //Признак доступности для ИИС. + bool for_qual_investor_flag = 37; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. + + google.protobuf.Timestamp first_1min_candle_date = 56; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 57; //Дата первой дневной свечи. } //Запрос дивидендов. message GetDividendsRequest { string figi = 1; //Figi-идентификатор инструмента. - google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. - google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. + google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. Фильтрация происходит по параметру *record_date* (дата фиксации реестра). + google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. Фильтрация происходит по параметру *record_date* (дата фиксации реестра). } //Дивиденды. @@ -464,4 +691,325 @@ enum ShareType { SHARE_TYPE_NY_REG_SHRS = 6; //Акции из реестра Нью-Йорка SHARE_TYPE_CLOSED_END_FUND = 7; //Закрытый инвестиционный фонд SHARE_TYPE_REIT = 8; //Траст недвижимости -} \ No newline at end of file +} + +//Запрос актива по идентификатору. +message AssetRequest { + string id = 1; //uid-идентификатор актива. +} + +//Данные по активу. +message AssetResponse { + AssetFull asset = 1; //Актив. +} + +//Запрос списка активов. +message AssetsRequest { +} + +//Список активов. +message AssetsResponse { + repeated Asset assets = 1; //Активы. +} + +message AssetFull { + string uid = 1; //Уникальный идентификатор актива. + AssetType type = 2; //Тип актива. + string name = 3; //Наименование актива. + string name_brief = 4; //Короткое наименование актива. + string description = 5; //Описание актива. + google.protobuf.Timestamp deleted_at = 6; //Дата и время удаления актива. + repeated string required_tests = 7; //Тестирование клиентов. + oneof ext { + AssetCurrency currency = 8; //Валюта. Обязательно и заполняется только для type = "ASSET_TYPE_CURRENCY". + AssetSecurity security = 9; //Ценная бумага. Обязательно и заполняется только для type = "ASSET_TYPE_SECURITY". + } + string gos_reg_code = 10; //Номер государственной регистрации. + string cfi = 11; //Код CFI. + string code_nsd = 12; //Код НРД инструмента. + string status = 13; //Статус актива. + Brand brand = 14; //Бренд. + google.protobuf.Timestamp updated_at = 15; //Дата и время последнего обновления записи. + string br_code = 16; //Код типа ц.б. по классификации Банка России. + string br_code_name = 17; //Наименование кода типа ц.б. по классификации Банка России. + repeated AssetInstrument instruments = 18; //Массив идентификаторов инструментов. +} + +//Информация об активе. +message Asset { + string uid = 1; //Уникальный идентификатор актива. + AssetType type = 2; //Тип актива. + string name = 3; //Наименование актива. + repeated AssetInstrument instruments = 4; //Массив идентификаторов инструментов. +} + +//Тип актива. +enum AssetType { + ASSET_TYPE_UNSPECIFIED = 0; //Тип не определён. + ASSET_TYPE_CURRENCY = 1; //Валюта. + ASSET_TYPE_COMMODITY = 2; //Товар. + ASSET_TYPE_INDEX = 3; //Индекс. + ASSET_TYPE_SECURITY = 4; //Ценная бумага. +} + +//Валюта. +message AssetCurrency { + string base_currency = 1; //ISO-код валюты. +} + +//Ценная бумага. +message AssetSecurity { + string isin = 1; //ISIN-идентификатор ценной бумаги. + string type = 2; //Тип ценной бумаги. + oneof ext { + AssetShare share = 3; //Акция. Заполняется только для акций (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = share). + AssetBond bond = 4; //Облигация. Заполняется только для облигаций (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = bond). + AssetStructuredProduct sp = 5; //Структурная нота. Заполняется только для структурных продуктов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = sp). + AssetEtf etf = 6; // Фонд. Заполняется только для фондов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = etf). + AssetClearingCertificate clearing_certificate = 7; // Клиринговый сертификат участия. Заполняется только для клиринговых сертификатов (тип актива asset.type = "ASSET_TYPE_SECURITY" и security.type = clearing_certificate). + } +} + +//Акция. +message AssetShare { + ShareType type = 1; //Тип акции. + Quotation issue_size = 2; //Объем выпуска (шт.). + Quotation nominal = 3; //Номинал. + string nominal_currency = 4; //Валюта номинала. + string primary_index = 5; //Индекс (Bloomberg). + Quotation dividend_rate = 6; //Ставка дивиденда (для привилегированных акций). + string preferred_share_type = 7; //Тип привилегированных акций. + google.protobuf.Timestamp ipo_date = 8; //Дата IPO. + google.protobuf.Timestamp registry_date = 9; //Дата регистрации. + bool div_yield_flag = 10; //Признак наличия дивидендной доходности. + string issue_kind = 11; //Форма выпуска ФИ. + google.protobuf.Timestamp placement_date = 12; //Дата размещения акции. + string repres_isin = 13; //ISIN базового актива. + Quotation issue_size_plan = 14; //Объявленное количество шт. + Quotation total_float = 15; //Количество акций в свободном обращении. +} + +//Облигация. +message AssetBond { + Quotation current_nominal = 1; //Текущий номинал. + string borrow_name = 2; //Наименование заемщика. + Quotation issue_size = 3; //Объем эмиссии облигации (стоимость). + Quotation nominal = 4 ; //Номинал облигации. + string nominal_currency = 5; //Валюта номинала. + string issue_kind = 6; //Форма выпуска облигации. + string interest_kind = 7; //Форма дохода облигации. + int32 coupon_quantity_per_year = 8; //Количество выплат в год. + bool indexed_nominal_flag = 9; //Признак облигации с индексируемым номиналом. + bool subordinated_flag = 10; //Признак субординированной облигации. + bool collateral_flag = 11; //Признак обеспеченной облигации. + bool tax_free_flag = 12; //Признак показывает, что купоны облигации не облагаются налогом (для mass market). + bool amortization_flag = 13; //Признак облигации с амортизацией долга. + bool floating_coupon_flag = 14; //Признак облигации с плавающим купоном. + bool perpetual_flag = 15; //Признак бессрочной облигации. + google.protobuf.Timestamp maturity_date = 16; //Дата погашения облигации. + string return_condition = 17; //Описание и условия получения дополнительного дохода. + google.protobuf.Timestamp state_reg_date = 18; //Дата выпуска облигации. + google.protobuf.Timestamp placement_date = 19; //Дата размещения облигации. + Quotation placement_price = 20; //Цена размещения облигации. + Quotation issue_size_plan = 21; //Объявленное количество шт. +} + +//Структурная нота. +message AssetStructuredProduct { + string borrow_name = 1; //Наименование заемщика. + Quotation nominal = 2; //Номинал. + string nominal_currency = 3; //Валюта номинала. + StructuredProductType type = 4; //Тип структурной ноты. + string logic_portfolio = 5; //Стратегия портфеля. + AssetType asset_type = 6; //Тип базового актива. + string basic_asset = 7; //Вид базового актива в зависимости от типа базового актива. + Quotation safety_barrier = 8; //Барьер сохранности (в процентах). + google.protobuf.Timestamp maturity_date = 9; //Дата погашения. + Quotation issue_size_plan = 10; //Объявленное количество шт. + Quotation issue_size = 11; //Объем размещения. + google.protobuf.Timestamp placement_date = 12; //Дата размещения ноты. + string issue_kind = 13; //Форма выпуска. +} + +//Тип структурной ноты. +enum StructuredProductType { + SP_TYPE_UNSPECIFIED = 0; //Тип не определён. + SP_TYPE_DELIVERABLE = 1; //Поставочный. + SP_TYPE_NON_DELIVERABLE = 2; //Беспоставочный. +} + +//Фонд. +message AssetEtf { + Quotation total_expense = 1; //Суммарные расходы фонда (в %). + Quotation hurdle_rate = 2; //Барьерная ставка доходности после которой фонд имеет право на perfomance fee (в процентах). + Quotation performance_fee = 3; //Комиссия за успешные результаты фонда (в процентах). + Quotation fixed_commission = 4; //Фиксированная комиссия за управление (в процентах). + string payment_type = 5; //Тип распределения доходов от выплат по бумагам. + bool watermark_flag = 6; //Признак необходимости выхода фонда в плюс для получения комиссии. + Quotation buy_premium = 7; //Премия (надбавка к цене) при покупке доли в фонде (в процентах). + Quotation sell_discount = 8; //Ставка дисконта (вычет из цены) при продаже доли в фонде (в процентах). + bool rebalancing_flag = 9; //Признак ребалансируемости портфеля фонда. + string rebalancing_freq = 10; //Периодичность ребалансировки. + string management_type = 11; //Тип управления. + string primary_index = 12; //Индекс, который реплицирует (старается копировать) фонд. + string focus_type = 13; //База ETF. + bool leveraged_flag = 14; //Признак использования заемных активов (плечо). + Quotation num_share = 15; //Количество акций в обращении. + bool ucits_flag = 16; //Признак обязательства по отчетности перед регулятором. + google.protobuf.Timestamp released_date = 17; //Дата выпуска. + string description = 18; //Описание фонда. + string primary_index_description = 19; //Описание индекса, за которым следует фонд. + string primary_index_company = 20; //Основные компании, в которые вкладывается фонд. + Quotation index_recovery_period = 21; //Срок восстановления индекса (после просадки). + string inav_code = 22; //IVAV-код. + bool div_yield_flag = 23; //Признак наличия дивидендной доходности. + Quotation expense_commission = 24; //Комиссия на покрытие расходов фонда (в процентах). + Quotation primary_index_tracking_error = 25; //Ошибка следования за индексом (в процентах). + string rebalancing_plan = 26; //Плановая ребалансировка портфеля. + string tax_rate = 27; //Ставки налогообложения дивидендов и купонов. + repeated google.protobuf.Timestamp rebalancing_dates = 28; //Даты ребалансировок. + string issue_kind = 29; //Форма выпуска. + Quotation nominal = 30; //Номинал. + string nominal_currency = 31; //Валюта номинала. +} + +//Клиринговый сертификат участия. +message AssetClearingCertificate { + Quotation nominal = 1; //Номинал. + string nominal_currency = 2; //Валюта номинала. +} + +//Бренд. +message Brand { + string uid = 1; //uid идентификатор бренда. + string name = 2; //Наименование бренда. + string description = 3; //Описание. + string info = 4; //Информация о бренде. + string company = 5; //Компания. + string sector = 6; //Сектор. + string country_of_risk = 7; //Код страны риска. + string country_of_risk_name = 8; //Наименование страны риска. +} + +//Идентификаторы инструмента. +message AssetInstrument { + string uid = 1; //uid идентификатор инструмента. + string figi = 2; //figi идентификатор инструмента. + string instrument_type = 3; //Тип инструмента. + string ticker = 4; //Тикер инструмента. + string class_code = 5; //Класс-код (секция торгов). + repeated InstrumentLink links = 6; //Массив связанных инструментов. +} + +//Связь с другим инструментом. +message InstrumentLink { + string type = 1; //Тип связи. + string instrument_uid = 2; //uid идентификатор связанного инструмента. +} + +//Запрос списка избранных инструментов, входные параметры не требуются. +message GetFavoritesRequest { +} + +//В ответ передаётся список избранных инструментов в качестве массива. +message GetFavoritesResponse { + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов +} + +//Массив избранных инструментов. +message FavoriteInstrument { + string figi = 1; //Figi-идентификатор инструмента. + string ticker = 2; //Тикер инструмента. + string class_code = 3; //Класс-код инструмента. + string isin = 4; //Isin-идентификатор инструмента. + string instrument_type = 11; //Тип инструмента. + bool otc_flag = 16; //Признак внебиржевой ценной бумаги. + bool api_trade_available_flag = 17; //Признак доступности торгов через API. +} + +//Запрос редактирования списка избранных инструментов. +message EditFavoritesRequest { + repeated EditFavoritesRequestInstrument instruments = 1; //Массив инструментов. + EditFavoritesActionType action_type = 6; //Тип действия со списком. +} + +//Массив инструментов для редактирования списка избранных инструментов. +message EditFavoritesRequestInstrument { + string figi = 1; //Figi-идентификатор инструмента. +} + +//Тип действия со списком избранных инструментов. +enum EditFavoritesActionType { + EDIT_FAVORITES_ACTION_TYPE_UNSPECIFIED = 0; //Тип не определён. + EDIT_FAVORITES_ACTION_TYPE_ADD = 1; //Добавить в список. + EDIT_FAVORITES_ACTION_TYPE_DEL = 2; //Удалить из списка. +} + +//Результат редактирования списка избранных инструментов. +message EditFavoritesResponse { + repeated FavoriteInstrument favorite_instruments = 1; //Массив инструментов +} + +//Реальная площадка исполнения расчётов. +enum RealExchange { + REAL_EXCHANGE_UNSPECIFIED = 0; //Тип не определён. + REAL_EXCHANGE_MOEX = 1; //Московская биржа. + REAL_EXCHANGE_RTS = 2; //Санкт-Петербургская биржа. + REAL_EXCHANGE_OTC = 3; //Внебиржевой инструмент. +} + +//Запрос справочника стран. +message GetCountriesRequest {} + +//Справочник стран. +message GetCountriesResponse { + repeated CountryResponse countries = 1; //Массив стран. +} + +//Данные о стране. +message CountryResponse { + string alfa_two = 1; //Двухбуквенный код страны. + string alfa_three = 2; //Трёхбуквенный код страны. + string name = 3; //Наименование страны. + string name_brief = 4; //Краткое наименование страны. +} + +//Запрос на поиск инструментов. +message FindInstrumentRequest { + string query = 1; //Строка поиска. +} + +//Результат поиска инструментов. +message FindInstrumentResponse { + repeated InstrumentShort instruments = 1; //Массив инструментов, удовлетворяющих условиям поиска. +} + +//Краткая информация об инструменте. +message InstrumentShort { + string isin = 1; //Isin инструмента. + string figi = 2; //Figi инструмента. + string ticker = 3; //Ticker инструмента. + string class_code = 4; //ClassCode инструмента. + string instrument_type = 5; //Тип инструмента. + string name = 6; //Название инструмента. + string uid = 7; //Уникальный идентификатор инструмента. + string position_uid = 8; //Уникальный идентификатор позиции инструмента. + bool api_trade_available_flag = 11; //Признак доступности торгов через API. + bool for_iis_flag = 12; //Признак доступности для ИИС. + google.protobuf.Timestamp first_1min_candle_date = 26; //Дата первой минутной свечи. + google.protobuf.Timestamp first_1day_candle_date = 27; //Дата первой дневной свечи. + bool for_qual_investor_flag = 28; //Флаг отображающий доступность торговли инструментом только для квалифицированных инвесторов. +} + +//Запрос списка брендов. +message GetBrandsRequest {} + +//Запрос бренда. +message GetBrandRequest { + string id = 1; //Uid-идентификатор бренда. +} + +//Список брендов. +message GetBrandsResponse { + repeated Brand brands = 1; //Массив брендов. +} diff --git a/contracts/marketdata.proto b/contracts/marketdata.proto index c31ee22..eb8c5c2 100644 --- a/contracts/marketdata.proto +++ b/contracts/marketdata.proto @@ -25,11 +25,20 @@ service MarketDataService { //Сервис получения биржевой //Метод запроса статуса торгов по инструментам. rpc GetTradingStatus(GetTradingStatusRequest) returns (GetTradingStatusResponse); + + //Метод запроса обезличенных сделок за последний час. + rpc GetLastTrades(GetLastTradesRequest) returns (GetLastTradesResponse); + + //Метод запроса цен закрытия торговой сессии по инструментам. + rpc GetClosePrices(GetClosePricesRequest) returns (GetClosePricesResponse); } service MarketDataStreamService { //Bi-directional стрим предоставления биржевой информации. rpc MarketDataStream(stream MarketDataRequest) returns (stream MarketDataResponse); + + //Server-side стрим предоставления биржевой информации. + rpc MarketDataServerSideStream(MarketDataServerSideStreamRequest) returns (stream MarketDataResponse); } //Запрос подписки или отписки на определённые биржевые данные. @@ -39,9 +48,19 @@ message MarketDataRequest { SubscribeOrderBookRequest subscribe_order_book_request = 2; //Запрос подписки на стаканы. SubscribeTradesRequest subscribe_trades_request = 3; //Запрос подписки на ленту обезличенных сделок. SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов. + SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на последние цены. + GetMySubscriptions get_my_subscriptions = 6; //Запрос своих подписок. } } +message MarketDataServerSideStreamRequest { + SubscribeCandlesRequest subscribe_candles_request = 1; //Запрос подписки на свечи. + SubscribeOrderBookRequest subscribe_order_book_request = 2; //Запрос подписки на стаканы. + SubscribeTradesRequest subscribe_trades_request = 3; //Запрос подписки на ленту обезличенных сделок. + SubscribeInfoRequest subscribe_info_request = 4; //Запрос подписки на торговые статусы инструментов. + SubscribeLastPriceRequest subscribe_last_price_request = 5; //Запрос подписки на последние цены. +} + //Пакет биржевой информации по подписке. message MarketDataResponse { oneof payload { @@ -54,6 +73,8 @@ message MarketDataResponse { OrderBook orderbook = 7; //Стакан. TradingStatus trading_status = 8; //Торговый статус. Ping ping = 9; //Проверка активности стрима. + SubscribeLastPriceResponse subscribe_last_price_response = 10; //Результат подписки на последние цены инструментов. + LastPrice last_price = 11; //Последняя цена. } } @@ -61,6 +82,7 @@ message MarketDataResponse { message SubscribeCandlesRequest { SubscriptionAction subscription_action = 1; //Изменение статуса подписки. repeated CandleInstrument instruments = 2; //Массив инструментов для подписки на свечи. + bool waiting_close = 3; //Флаг ожидания закрытия временного интервала для отправки свечи, применяется только для минутных свечей. } //Тип операции со списком подписок. @@ -81,11 +103,12 @@ enum SubscriptionInterval { message CandleInstrument { string figi = 1; //Figi-идентификатор инструмента. SubscriptionInterval interval = 2; //Интервал свечей. + string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Результат изменения статус подписки на свечи. message SubscribeCandlesResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id) + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). repeated CandleSubscription candles_subscriptions = 2; //Массив статусов подписки на свечи. } @@ -94,6 +117,7 @@ message CandleSubscription { string figi = 1; //Figi-идентификатор инструмента. SubscriptionInterval interval = 2; //Интервал свечей. SubscriptionStatus subscription_status = 3; //Статус подписки. + string instrument_uid = 4; //Uid инструмента } //Результат подписки. @@ -101,11 +125,12 @@ enum SubscriptionStatus { SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Статус подписки не определён. SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. SUBSCRIPTION_STATUS_INSTRUMENT_NOT_FOUND = 2; //Инструмент не найден. - SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID = 3; //Некорректный статус подписки, список возможных значений: [SubscriptionAction](https://tinkoff.github.io/investAPI/marketdata#subscriptionaction) + SUBSCRIPTION_STATUS_SUBSCRIPTION_ACTION_IS_INVALID = 3; //Некорректный статус подписки, список возможных значений: [SubscriptionAction](https://tinkoff.github.io/investAPI/marketdata#subscriptionaction). SUBSCRIPTION_STATUS_DEPTH_IS_INVALID = 4; //Некорректная глубина стакана, доступные значения: 1, 10, 20, 30, 40, 50. - SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID = 5; //Некорректный интервал свечей, список возможных значений: [SubscriptionInterval](https://tinkoff.github.io/investAPI/marketdata#subscriptioninterval) - SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED = 6; //Превышен лимит подписок в рамках стрима, подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/) + SUBSCRIPTION_STATUS_INTERVAL_IS_INVALID = 5; //Некорректный интервал свечей, список возможных значений: [SubscriptionInterval](https://tinkoff.github.io/investAPI/marketdata#subscriptioninterval). + SUBSCRIPTION_STATUS_LIMIT_IS_EXCEEDED = 6; //Превышен лимит на общее количество подписок в рамках стрима, подробнее: [Лимитная политика](https://tinkoff.github.io/investAPI/limits/). SUBSCRIPTION_STATUS_INTERNAL_ERROR = 7; //Внутренняя ошибка сервиса. + SUBSCRIPTION_STATUS_TOO_MANY_REQUESTS = 8; //Превышен лимит на количество запросов на подписки в течение установленного отрезка времени } //Запрос на изменение статуса подписки на стаканы. @@ -118,11 +143,12 @@ message SubscribeOrderBookRequest { message OrderBookInstrument { string figi = 1; //Figi-идентификатор инструмента. int32 depth = 2; //Глубина стакана. + string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Результат изменения статуса подписки на стаканы. message SubscribeOrderBookResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id) + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). repeated OrderBookSubscription order_book_subscriptions = 2; //Массив статусов подписки на стаканы. } @@ -131,6 +157,7 @@ message OrderBookSubscription { string figi = 1; //Figi-идентификатор инструмента. int32 depth = 2; //Глубина стакана. SubscriptionStatus subscription_status = 3; //Статус подписки. + string instrument_uid = 4; //Uid инструмента } //Изменение статуса подписки на поток обезличенных сделок. @@ -142,11 +169,12 @@ message SubscribeTradesRequest { //Запрос подписки на поток обезличенных сделок. message TradeInstrument { string figi = 1; //Figi-идентификатор инструмента. + string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Результат изменения статуса подписки на поток обезличенных сделок. message SubscribeTradesResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id) + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). repeated TradeSubscription trade_subscriptions = 2; //Массив статусов подписки на поток сделок. } @@ -154,6 +182,7 @@ message SubscribeTradesResponse { message TradeSubscription { string figi = 1; //Figi-идентификатор инструмента. SubscriptionStatus subscription_status = 2; //Статус подписки. + string instrument_uid = 3; //Uid инструмента } //Изменение статуса подписки на торговый статус инструмента. @@ -165,11 +194,12 @@ message SubscribeInfoRequest { //Запрос подписки на торговый статус. message InfoInstrument { string figi = 1; //Figi-идентификатор инструмента. + string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Результат изменения статуса подписки на торговый статус. message SubscribeInfoResponse { - string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id) + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). repeated InfoSubscription info_subscriptions = 2; //Массив статусов подписки на торговый статус. } @@ -177,18 +207,46 @@ message SubscribeInfoResponse { message InfoSubscription { string figi = 1; //Figi-идентификатор инструмента. SubscriptionStatus subscription_status = 2; //Статус подписки. + string instrument_uid = 3; //Uid инструмента +} + +//Изменение статуса подписки на последнюю цену инструмента. +message SubscribeLastPriceRequest { + SubscriptionAction subscription_action = 1; //Изменение статуса подписки. + repeated LastPriceInstrument instruments = 2; //Массив инструментов для подписки на последнюю цену. +} + +//Запрос подписки на последнюю цену. +message LastPriceInstrument { + string figi = 1; //Figi-идентификатор инструмента. + string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid +} + +//Результат изменения статуса подписки на последнюю цену. +message SubscribeLastPriceResponse { + string tracking_id = 1; //Уникальный идентификатор запроса, подробнее: [tracking_id](https://tinkoff.github.io/investAPI/grpc#tracking-id). + repeated LastPriceSubscription last_price_subscriptions = 2; //Массив статусов подписки на последнюю цену. +} + +//Статус подписки на последнюю цену. +message LastPriceSubscription { + string figi = 1; //Figi-идентификатор инструмента. + SubscriptionStatus subscription_status = 2; //Статус подписки. + string instrument_uid = 3; //Uid инструмента } //Пакет свечей в рамках стрима. message Candle { string figi = 1; //Figi-идентификатор инструмента. SubscriptionInterval interval = 2; //Интервал свечи. - Quotation open = 3; //Цена открытия за 1 лот. - Quotation high = 4; //Максимальная цена за 1 лот. - Quotation low = 5; //Минимальная цена за 1 лот. - Quotation close = 6; //Цена закрытия за 1 лот. + Quotation open = 3; //Цена открытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation high = 4; //Максимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation low = 5; //Минимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation close = 6; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) int64 volume = 7; //Объём сделок в лотах. - google.protobuf.Timestamp time = 8; //Время свечи в часовом поясе UTC. + google.protobuf.Timestamp time = 8; //Время начала интервала свечи в часовом поясе UTC. + google.protobuf.Timestamp last_trade_ts = 9; //Время последней сделки, вошедшей в свечу в часовом поясе UTC. + string instrument_uid = 10; //Uid инструмента } //Пакет стаканов в рамках стрима. @@ -198,12 +256,15 @@ message OrderBook { bool is_consistent = 3; //Флаг консистентности стакана. **false** значит не все заявки попали в стакан по причинам сетевых задержек или нарушения порядка доставки. repeated Order bids = 4; //Массив предложений. repeated Order asks = 5; //Массив спроса. - google.protobuf.Timestamp time = 6; //Время стакана в часовом поясе UTC. + google.protobuf.Timestamp time = 6; //Время формирования стакана в часовом поясе UTC по времени биржи. + Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + string instrument_uid = 9; //Uid инструмента } //Массив предложений/спроса. message Order { - Quotation price = 1; //Цена за 1 лот. + Quotation price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) int64 quantity = 2; //Количество в лотах. } @@ -211,9 +272,10 @@ message Order { message Trade { string figi = 1; //Figi-идентификатор инструмента. TradeDirection direction = 2; //Направление сделки. - Quotation price = 3; //Цена за 1 лот. + Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) int64 quantity = 4; //Количество лотов. google.protobuf.Timestamp time = 5; //Время сделки в часовом поясе UTC по времени биржи. + string instrument_uid = 6; //Uid инструмента } //Направление сделки. @@ -228,14 +290,18 @@ message TradingStatus { string figi = 1; //Figi-идентификатор инструмента. SecurityTradingStatus trading_status = 2; //Статус торговли инструментом. google.protobuf.Timestamp time = 3; //Время изменения торгового статуса в часовом поясе UTC. + bool limit_order_available_flag = 4; //Признак доступности выставления лимитной заявки по инструменту. + bool market_order_available_flag = 5; //Признак доступности выставления рыночной заявки по инструменту. + string instrument_uid = 6; //Uid инструмента } //Запрос исторических свечей. message GetCandlesRequest { - string figi = 1; //Figi-идентификатор инструмента + string figi = 1; //Figi-идентификатор инструмента. google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. CandleInterval interval = 4; //Интервал запрошенных свечей. + string instrument_id = 5; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Интервал свечей. @@ -255,10 +321,10 @@ message GetCandlesResponse { //Информация о свече. message HistoricCandle { - Quotation open = 1; //Цена открытия за 1 лот. - Quotation high = 2; //Максимальная цена за 1 лот. - Quotation low = 3; //Минимальная цена за 1 лот. - Quotation close = 4; //Цена закрытия за 1 лот. + Quotation open = 1; //Цена открытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation high = 2; //Максимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation low = 3; //Минимальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation close = 4; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) int64 volume = 5; //Объём торгов в лотах. google.protobuf.Timestamp time = 6; //Время свечи в часовом поясе UTC. bool is_complete = 7; //Признак завершённости свечи. **false** значит, свеча за текущие интервал ещё сформирована не полностью. @@ -267,6 +333,7 @@ message HistoricCandle { //Запрос получения последних цен. message GetLastPricesRequest { repeated string figi = 1; //Массив figi-идентификаторов инструментов. + repeated string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Список последних цен. @@ -276,15 +343,17 @@ message GetLastPricesResponse { //Информация о цене. message LastPrice { - string figi = 1; //Идентификатор инструмента. - Quotation price = 2; //Последняя цена за 1 лот. + string figi = 1; //Figi инструмента. + Quotation price = 2; //Последняя цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) google.protobuf.Timestamp time = 3; //Время получения последней цены в часовом поясе UTC по времени биржи. + string instrument_uid = 11; //Uid инструмента } //Запрос стакана. message GetOrderBookRequest { string figi = 1; //Figi-идентификатор инструмента. int32 depth = 2; //Глубина стакана. + string instrument_id = 3; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Информация о стакане. @@ -293,17 +362,67 @@ message GetOrderBookResponse { int32 depth = 2; //Глубина стакана. repeated Order bids = 3; //Множество пар значений на покупку. repeated Order asks = 4; //Множество пар значений на продажу. - Quotation last_price = 5; //Цена последней сделки. - Quotation close_price = 6; //Цена закрытия. + Quotation last_price = 5; //Цена последней сделки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation close_price = 6; //Цена закрытия за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation limit_up = 7; //Верхний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + Quotation limit_down = 8; //Нижний лимит цены за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. Для перевод цен в валюту рекомендуем использовать [информацию со страницы](https://tinkoff.github.io/investAPI/faq_marketdata/) + google.protobuf.Timestamp last_price_ts = 21; //Время получения цены последней сделки. + google.protobuf.Timestamp close_price_ts = 22; //Время получения цены закрытия. + google.protobuf.Timestamp orderbook_ts = 23; //Время формирования стакана на бирже. + string instrument_uid = 9; //Uid инструмента } //Запрос получения торгового статуса. message GetTradingStatusRequest { string figi = 1; //Идентификатор инструмента. + string instrument_id = 2; //Идентификатор инструмента, принимает значение figi или instrument_uid } //Информация о торговом статусе. message GetTradingStatusResponse { string figi = 1; //Figi-идентификатор инструмента. SecurityTradingStatus trading_status = 2; //Статус торговли инструментом. -} \ No newline at end of file + bool limit_order_available_flag = 3; //Признак доступности выставления лимитной заявки по инструменту. + bool market_order_available_flag = 4; //Признак доступности выставления рыночной заявки по инструменту. + bool api_trade_available_flag = 5; //Признак доступности торгов через API. + string instrument_uid = 6; //Uid инструмента +} + +//Запрос обезличенных сделок за последний час. +message GetLastTradesRequest { + string figi = 1; //Figi-идентификатор инструмента + google.protobuf.Timestamp from = 2; //Начало запрашиваемого периода в часовом поясе UTC. + google.protobuf.Timestamp to = 3; //Окончание запрашиваемого периода в часовом поясе UTC. + string instrument_id = 4; //Идентификатор инструмента, принимает значение figi или instrument_uid +} + +//Обезличенных сделок за последний час. +message GetLastTradesResponse { + repeated Trade trades = 1; //Массив сделок +} + +//Запрос активных подписок. +message GetMySubscriptions { } + +//Запрос цен закрытия торговой сессии по инструментам. +message GetClosePricesRequest { + repeated InstrumentClosePriceRequest instruments = 1; //Массив по инструментам. +} + +//Запрос цен закрытия торговой сессии по инструменту. +message InstrumentClosePriceRequest { + string instrument_id = 1; //Идентификатор инструмента, принимает значение figi или instrument_uid +} + +//Цены закрытия торговой сессии по инструментам. +message GetClosePricesResponse { + repeated InstrumentClosePriceResponse close_prices = 1; //Массив по инструментам. +} + +//Цена закрытия торговой сессии по инструменту. +message InstrumentClosePriceResponse { + string figi = 1; //Figi инструмента. + string instrument_uid = 2; //Uid инструмента. + Quotation price = 11; //Цена закрытия торговой сессии. + google.protobuf.Timestamp time = 21; //Дата совершения торгов. +} diff --git a/contracts/operations.proto b/contracts/operations.proto index 7b1daac..38e7c42 100644 --- a/contracts/operations.proto +++ b/contracts/operations.proto @@ -14,7 +14,7 @@ import "common.proto"; service OperationsService {/*Сервис предназначен для получения:
**1**. списка операций по счёту;
**2**. портфеля по счёту;
**3**. позиций ценных бумаг на счёте;
**4**. - доступного остатка для вывода средств.*/ + доступного остатка для вывода средств;
**5**. получения различных отчётов.*/ //Метод получения списка операций по счёту. rpc GetOperations(OperationsRequest) returns (OperationsResponse); @@ -27,108 +27,149 @@ service OperationsService {/*Сервис предназначен для пол //Метод получения доступного остатка для вывода средств. rpc GetWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse); + //Метод получения брокерского отчёта. rpc GetBrokerReport(BrokerReportRequest) returns (BrokerReportResponse); + + //Метод получения отчёта "Справка о доходах за пределами РФ". + rpc GetDividendsForeignIssuer(GetDividendsForeignIssuerRequest) returns (GetDividendsForeignIssuerResponse); + + //Метод получения списка операций по счёту с пагинацией. + rpc GetOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse); +} + +service OperationsStreamService { + //Server-side stream обновлений портфеля + rpc PortfolioStream(PortfolioStreamRequest) returns (stream PortfolioStreamResponse); + + //Server-side stream обновлений информации по изменению позиций портфеля + rpc PositionsStream(PositionsStreamRequest) returns (stream PositionsStreamResponse); } //Запрос получения списка операций по счёту. message OperationsRequest { - string account_id = 1; //Идентификатор счёта клиента - google.protobuf.Timestamp from = 2; //Начало периода (по UTC) - google.protobuf.Timestamp to = 3; //Окончание периода (по UTC) - OperationState state = 4; //Статус запрашиваемых операций - string figi = 5; //Figi-идентификатор инструмента для фильтрации + string account_id = 1; //Идентификатор счёта клиента. + google.protobuf.Timestamp from = 2; //Начало периода (по UTC). + google.protobuf.Timestamp to = 3; //Окончание периода (по UTC). + OperationState state = 4; //Статус запрашиваемых операций. + string figi = 5; //Figi-идентификатор инструмента для фильтрации. } //Список операций. message OperationsResponse { - repeated Operation operations = 1; //Массив операций + repeated Operation operations = 1; //Массив операций. } //Данные по операции. message Operation { - string id = 1; //Идентификатор операции - string parent_operation_id = 2; //Идентификатор родительской операции - string currency = 3; //Валюта операции - MoneyValue payment = 4; //Сумма операции - MoneyValue price = 5; //Цена операции - OperationState state = 6; //Статус операции - int64 quantity = 7; //Количество лотов инструмента - int64 quantity_rest = 8; //Неисполненный остаток по сделке - string figi = 9; //Figi-идентификатор инструмента, связанного с операцией + string id = 1; //Идентификатор операции. + string parent_operation_id = 2; //Идентификатор родительской операции. + string currency = 3; //Валюта операции. + MoneyValue payment = 4; //Сумма операции. + MoneyValue price = 5; //Цена операции за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + OperationState state = 6; //Статус операции. + int64 quantity = 7; //Количество единиц инструмента. + int64 quantity_rest = 8; //Неисполненный остаток по сделке. + string figi = 9; //Figi-идентификатор инструмента, связанного с операцией. string instrument_type = 10; //Тип инструмента. Возможные значения:
**bond** — облигация;
**share** — акция;
**currency** — валюта;
**etf** — фонд;
**futures** — фьючерс. - google.protobuf.Timestamp date = 11; //Дата и время операции в формате часовом поясе UTC - string type = 12; //Текстовое описание типа операции - OperationType operation_type = 13; //Тип операции + google.protobuf.Timestamp date = 11; //Дата и время операции в формате часовом поясе UTC. + string type = 12; //Текстовое описание типа операции. + OperationType operation_type = 13; //Тип операции. + repeated OperationTrade trades = 14; //Массив сделок. +} + +//Сделка по операции. +message OperationTrade { + string trade_id = 1; //Идентификатор сделки. + google.protobuf.Timestamp date_time = 2; //Дата и время сделки в часовом поясе UTC. + int64 quantity = 3; //Количество инструментов. + MoneyValue price = 4; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. } //Запрос получения текущего портфеля по счёту. message PortfolioRequest { - string account_id = 1; //Идентификатор счёта пользователя + string account_id = 1; //Идентификатор счёта пользователя. } //Текущий портфель по счёту. message PortfolioResponse { - MoneyValue total_amount_shares = 1; //Общая стоимость акций в портфеле в рублях - MoneyValue total_amount_bonds = 2; //Общая стоимость облигаций в портфеле в рублях - MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле в рублях - MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле в рублях - MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле в рублях - Quotation expected_yield = 6; //Текущая доходность портфеля - repeated PortfolioPosition positions = 7; //Список позиций портфеля + MoneyValue total_amount_shares = 1; //Общая стоимость акций в портфеле в рублях. + MoneyValue total_amount_bonds = 2; //Общая стоимость облигаций в портфеле в рублях. + MoneyValue total_amount_etf = 3; //Общая стоимость фондов в портфеле в рублях. + MoneyValue total_amount_currencies = 4; //Общая стоимость валют в портфеле в рублях. + MoneyValue total_amount_futures = 5; //Общая стоимость фьючерсов в портфеле в рублях. + Quotation expected_yield = 6; //Текущая относительная доходность портфеля, в %. + repeated PortfolioPosition positions = 7; //Список позиций портфеля. + string account_id = 8; //Идентификатор счёта пользователя. } //Запрос позиций портфеля по счёту. message PositionsRequest { - string account_id = 1; //Идентификатор счёта пользователя + string account_id = 1; //Идентификатор счёта пользователя. } //Список позиций по счёту. message PositionsResponse { - repeated MoneyValue money = 1; //Массив валютных позиций портфеля - repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля - repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля - bool limits_loading_in_progress = 4; //Признак идущей в данный момент выгрузки лимитов - repeated PositionsFutures futures = 5; //Список фьючерсов портфеля + repeated MoneyValue money = 1; //Массив валютных позиций портфеля. + repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. + repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля. + bool limits_loading_in_progress = 4; //Признак идущей в данный момент выгрузки лимитов. + repeated PositionsFutures futures = 5; //Список фьючерсов портфеля. + repeated PositionsOptions options = 6; //Список опционов портфеля. } //Запрос доступного для вывода остатка. message WithdrawLimitsRequest { - string account_id = 1; //Идентификатор счёта пользователя + string account_id = 1; //Идентификатор счёта пользователя. } //Доступный для вывода остаток. message WithdrawLimitsResponse { - repeated MoneyValue money = 1; //Массив валютных позиций портфеля - repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля - repeated MoneyValue blocked_guarantee = 3; //Заблокировано под гарантийное обеспечение фьючерсов + repeated MoneyValue money = 1; //Массив валютных позиций портфеля. + repeated MoneyValue blocked = 2; //Массив заблокированных валютных позиций портфеля. + repeated MoneyValue blocked_guarantee = 3; //Заблокировано под гарантийное обеспечение фьючерсов. } //Позиции портфеля. message PortfolioPosition { - string figi = 1; //Figi-идентификатора инструмента - string instrument_type = 2; //Тип инструмента - Quotation quantity = 3; //Количество инструмента в портфеле в штуках - MoneyValue average_position_price = 4; //Средневзвешенная цена позиции - Quotation expected_yield = 5; //Текущая рассчитанная доходность - MoneyValue current_nkd = 6; // Текущий НКД - Quotation average_position_price_pt = 7; //Средняя цена лота в позиции в пунктах (для фьючерсов) - MoneyValue current_price = 8; //Текущая цена инструмента - MoneyValue average_position_price_fifo = 9; //Средняя цена лота в позиции по методу FIFO - Quotation quantity_lots = 10; //Количество лотов в портфеле + string figi = 1; //Figi-идентификатора инструмента. + string instrument_type = 2; //Тип инструмента. + Quotation quantity = 3; //Количество инструмента в портфеле в штуках. + MoneyValue average_position_price = 4; //Средневзвешенная цена позиции. **Возможна задержка до секунды для пересчёта**. + Quotation expected_yield = 5; //Текущая рассчитанная доходность позиции. + MoneyValue current_nkd = 6; // Текущий НКД. + Quotation average_position_price_pt = 7; //Средняя цена позиции в пунктах (для фьючерсов). **Возможна задержка до секунды для пересчёта**. + MoneyValue current_price = 8; //Текущая цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.. + MoneyValue average_position_price_fifo = 9; //Средняя цена позиции по методу FIFO. **Возможна задержка до секунды для пересчёта**. + Quotation quantity_lots = 10; //Количество лотов в портфеле. + bool blocked = 21; //Заблокировано. } //Баланс позиции ценной бумаги. message PositionsSecurities { - string figi = 1; //Figi-идентификатор бумаги - int64 blocked = 2; //Заблокировано - int64 balance = 3; //Текущий баланс + string figi = 1; //Figi-идентификатор бумаги. + int64 blocked = 2; //Заблокировано. + int64 balance = 3; //Текущий незаблокированный баланс. + string position_uid = 4; //Уникальный идентификатор позиции. + string instrument_uid = 5; //Уникальный идентификатор инструмента. + bool exchange_blocked = 11; //Заблокировано на бирже. + string instrument_type = 16; //Тип инструмента. } //Баланс фьючерса. message PositionsFutures { - string figi = 1; //Figi-идентификатор фьючерса - int64 blocked = 2; //Заблокировано - int64 balance = 3; //Текущий баланс + string figi = 1; //Figi-идентификатор фьючерса. + int64 blocked = 2; //Заблокировано. + int64 balance = 3; //Текущий незаблокированный баланс. + string position_uid = 4; //Уникальный идентификатор позиции. + string instrument_uid = 5; //Уникальный идентификатор инструмента. +} + +//Баланс опциона. +message PositionsOptions { + string position_uid = 1; //Уникальный идентификатор позиции опциона. + string instrument_uid = 2; //Уникальный идентификатор инструмента. + int64 blocked = 11; //Заблокировано. + int64 balance = 21; //Текущий незаблокированный баланс. } message BrokerReportRequest { @@ -146,108 +187,328 @@ message BrokerReportResponse { } message GenerateBrokerReportRequest { - string account_id = 1; //Идентификатор счёта клиента + string account_id = 1; //Идентификатор счёта клиента. google.protobuf.Timestamp from = 2; //Начало периода в часовом поясе UTC. google.protobuf.Timestamp to = 3; //Окончание периода в часовом поясе UTC. } message GenerateBrokerReportResponse { - string task_id = 1; //Идентификатор задачи формирования брокерского отчёта + string task_id = 1; //Идентификатор задачи формирования брокерского отчёта. } message GetBrokerReportRequest { - string task_id = 1; //Идентификатор задачи формирования брокерского отчёта - int32 page = 2; //Номер страницы отчета (начинается с 1), значение по умолчанию: 0 + string task_id = 1; //Идентификатор задачи формирования брокерского отчёта. + int32 page = 2; //Номер страницы отчета (начинается с 1), значение по умолчанию: 0. } message GetBrokerReportResponse { repeated BrokerReport broker_report = 1; - int32 itemsCount = 2; //Количество записей в отчете - int32 pagesCount = 3; //Количество страниц с данными отчета (начинается с 0) - int32 page = 4; //Текущая страница (начинается с 0) + int32 itemsCount = 2; //Количество записей в отчете. + int32 pagesCount = 3; //Количество страниц с данными отчета (начинается с 0). + int32 page = 4; //Текущая страница (начинается с 0). } message BrokerReport { - string trade_id = 1;//Номер сделки - string order_id = 2; //Номер поручения - string figi = 3; //Figi-идентификатор инструмента - string execute_sign = 4; //Признак исполнения + string trade_id = 1;//Номер сделки. + string order_id = 2; //Номер поручения. + string figi = 3; //Figi-идентификатор инструмента. + string execute_sign = 4; //Признак исполнения. google.protobuf.Timestamp trade_datetime = 5; //Дата и время заключения в часовом поясе UTC. - string exchange = 6; //Торговая площадка - string class_code = 7; //Режим торгов - string direction = 8; //Вид сделки - string name = 9; //Сокращённое наименование актива - string ticker = 10; //Код актива - MoneyValue price = 11; //Цена за единицу - int64 quantity = 12; //Количество - MoneyValue order_amount = 13; //Сумма (без НКД) - Quotation aci_value = 14; //НКД - MoneyValue total_order_amount = 15; //Сумма сделки - MoneyValue broker_commission = 16; //Комиссия брокера - MoneyValue exchange_commission = 17; //Комиссия биржи - MoneyValue exchange_clearing_commission = 18; //Комиссия клир. центра - Quotation repo_rate = 19; //Ставка РЕПО (%) - string party = 20; //Контрагент/Брокер + string exchange = 6; //Торговая площадка. + string class_code = 7; //Режим торгов. + string direction = 8; //Вид сделки. + string name = 9; //Сокращённое наименование актива. + string ticker = 10; //Код актива. + MoneyValue price = 11; //Цена за единицу. + int64 quantity = 12; //Количество. + MoneyValue order_amount = 13; //Сумма (без НКД). + Quotation aci_value = 14; //НКД. + MoneyValue total_order_amount = 15; //Сумма сделки. + MoneyValue broker_commission = 16; //Комиссия брокера. + MoneyValue exchange_commission = 17; //Комиссия биржи. + MoneyValue exchange_clearing_commission = 18; //Комиссия клир. центра. + Quotation repo_rate = 19; //Ставка РЕПО (%). + string party = 20; //Контрагент/Брокер. google.protobuf.Timestamp clear_value_date = 21; //Дата расчётов в часовом поясе UTC. google.protobuf.Timestamp sec_value_date = 22; //Дата поставки в часовом поясе UTC. - string broker_status = 23; //Статус брокера + string broker_status = 23; //Статус брокера. string separate_agreement_type = 24; //Тип дог. string separate_agreement_number = 25; //Номер дог. string separate_agreement_date = 26; //Дата дог. - string delivery_type = 27; //Тип расчёта по сделке + string delivery_type = 27; //Тип расчёта по сделке. } -//Статус запрашиваемых операций +//Статус запрашиваемых операций. enum OperationState { OPERATION_STATE_UNSPECIFIED = 0; //Статус операции не определён - OPERATION_STATE_EXECUTED = 1; //Исполнена - OPERATION_STATE_CANCELED = 2; //Отменена + OPERATION_STATE_EXECUTED = 1; //Исполнена. + OPERATION_STATE_CANCELED = 2; //Отменена. + OPERATION_STATE_PROGRESS = 3; //Исполняется. } -//Тип операции +//Тип операции. enum OperationType { - OPERATION_TYPE_UNSPECIFIED = 0; //Тип операции не определён - OPERATION_TYPE_INPUT = 1; //Завод денежных средств - OPERATION_TYPE_BOND_TAX = 2; //Удержание налога по купонам - OPERATION_TYPE_OUTPUT_SECURITIES = 3; //Вывод ЦБ - OPERATION_TYPE_OVERNIGHT = 4; //Доход по сделке РЕПО овернайт - OPERATION_TYPE_TAX = 5; //Удержание налога - OPERATION_TYPE_BOND_REPAYMENT_FULL = 6; //Полное погашение облигаций - OPERATION_TYPE_SELL_CARD = 7; //Продажа ЦБ с карты - OPERATION_TYPE_DIVIDEND_TAX = 8; //Удержание налога по дивидендам - OPERATION_TYPE_OUTPUT = 9; //Вывод денежных средств - OPERATION_TYPE_BOND_REPAYMENT = 10; //Частичное погашение облигаций - OPERATION_TYPE_TAX_CORRECTION = 11; //Корректировка налога - OPERATION_TYPE_SERVICE_FEE = 12; //Удержание комиссии за обслуживание брокерского счёта - OPERATION_TYPE_BENEFIT_TAX = 13; //Удержание налога за материальную выгоду - OPERATION_TYPE_MARGIN_FEE = 14; //Удержание комиссии за непокрытую позицию - OPERATION_TYPE_BUY = 15; //Покупка ЦБ - OPERATION_TYPE_BUY_CARD = 16; //Покупка ЦБ с карты - OPERATION_TYPE_INPUT_SECURITIES = 17; //Завод ЦБ - OPERATION_TYPE_SELL_MARGIN = 18; //Продажа в результате Margin-call - OPERATION_TYPE_BROKER_FEE = 19; //Удержание комиссии за операцию - OPERATION_TYPE_BUY_MARGIN = 20; //Покупка в результате Margin-call - OPERATION_TYPE_DIVIDEND = 21; //Выплата дивидендов - OPERATION_TYPE_SELL = 22; //Продажа ЦБ - OPERATION_TYPE_COUPON = 23; //Выплата купонов - OPERATION_TYPE_SUCCESS_FEE = 24; //Удержание комиссии SuccessFee - OPERATION_TYPE_DIVIDEND_TRANSFER = 25; //Передача дивидендного дохода - OPERATION_TYPE_ACCRUING_VARMARGIN = 26; //Зачисление вариационной маржи - OPERATION_TYPE_WRITING_OFF_VARMARGIN = 27; //Списание вариационной маржи - OPERATION_TYPE_DELIVERY_BUY = 28; //Покупка в рамках экспирации фьючерсного контракта - OPERATION_TYPE_DELIVERY_SELL = 29; //Продажа в рамках экспирации фьючерсного контракта - OPERATION_TYPE_TRACK_MFEE = 30; //Комиссия за управление по счёту автоследования - OPERATION_TYPE_TRACK_PFEE = 31; //Комиссия за результат по счёту автоследования - OPERATION_TYPE_TAX_PROGRESSIVE = 32; //Удержание налога по ставке 15% - OPERATION_TYPE_BOND_TAX_PROGRESSIVE = 33; //Удержание налога по купонам по ставке 15% - OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE = 34; //Удержание налога по дивидендам по ставке 15% - OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE = 35; //Удержание налога за материальную выгоду по ставке 15% - OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE = 36; //Корректировка налога по ставке 15% - OPERATION_TYPE_TAX_REPO_PROGRESSIVE = 37; //Удержание налога за возмещение по сделкам РЕПО по ставке 15% - OPERATION_TYPE_TAX_REPO = 38; //Удержание налога за возмещение по сделкам РЕПО - OPERATION_TYPE_TAX_REPO_HOLD = 39; //Удержание налога по сделкам РЕПО - OPERATION_TYPE_TAX_REPO_REFUND = 40; //Возврат налога по сделкам РЕПО - OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE = 41; //Удержание налога по сделкам РЕПО по ставке 15% - OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE = 42; //Возврат налога по сделкам РЕПО по ставке 15% - OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту + OPERATION_TYPE_UNSPECIFIED = 0; //Тип операции не определён. + OPERATION_TYPE_INPUT = 1; //Пополнение брокерского счёта. + OPERATION_TYPE_BOND_TAX = 2; //Удержание НДФЛ по купонам. + OPERATION_TYPE_OUTPUT_SECURITIES = 3; //Вывод ЦБ. + OPERATION_TYPE_OVERNIGHT = 4; //Доход по сделке РЕПО овернайт. + OPERATION_TYPE_TAX = 5; //Удержание налога. + OPERATION_TYPE_BOND_REPAYMENT_FULL = 6; //Полное погашение облигаций. + OPERATION_TYPE_SELL_CARD = 7; //Продажа ЦБ с карты. + OPERATION_TYPE_DIVIDEND_TAX = 8; //Удержание налога по дивидендам. + OPERATION_TYPE_OUTPUT = 9; //Вывод денежных средств. + OPERATION_TYPE_BOND_REPAYMENT = 10; //Частичное погашение облигаций. + OPERATION_TYPE_TAX_CORRECTION = 11; //Корректировка налога. + OPERATION_TYPE_SERVICE_FEE = 12; //Удержание комиссии за обслуживание брокерского счёта. + OPERATION_TYPE_BENEFIT_TAX = 13; //Удержание налога за материальную выгоду. + OPERATION_TYPE_MARGIN_FEE = 14; //Удержание комиссии за непокрытую позицию. + OPERATION_TYPE_BUY = 15; //Покупка ЦБ. + OPERATION_TYPE_BUY_CARD = 16; //Покупка ЦБ с карты. + OPERATION_TYPE_INPUT_SECURITIES = 17; //Перевод ценных бумаг из другого депозитария. + OPERATION_TYPE_SELL_MARGIN = 18; //Продажа в результате Margin-call. + OPERATION_TYPE_BROKER_FEE = 19; //Удержание комиссии за операцию. + OPERATION_TYPE_BUY_MARGIN = 20; //Покупка в результате Margin-call. + OPERATION_TYPE_DIVIDEND = 21; //Выплата дивидендов. + OPERATION_TYPE_SELL = 22; //Продажа ЦБ. + OPERATION_TYPE_COUPON = 23; //Выплата купонов. + OPERATION_TYPE_SUCCESS_FEE = 24; //Удержание комиссии SuccessFee. + OPERATION_TYPE_DIVIDEND_TRANSFER = 25; //Передача дивидендного дохода. + OPERATION_TYPE_ACCRUING_VARMARGIN = 26; //Зачисление вариационной маржи. + OPERATION_TYPE_WRITING_OFF_VARMARGIN = 27; //Списание вариационной маржи. + OPERATION_TYPE_DELIVERY_BUY = 28; //Покупка в рамках экспирации фьючерсного контракта. + OPERATION_TYPE_DELIVERY_SELL = 29; //Продажа в рамках экспирации фьючерсного контракта. + OPERATION_TYPE_TRACK_MFEE = 30; //Комиссия за управление по счёту автоследования. + OPERATION_TYPE_TRACK_PFEE = 31; //Комиссия за результат по счёту автоследования. + OPERATION_TYPE_TAX_PROGRESSIVE = 32; //Удержание налога по ставке 15%. + OPERATION_TYPE_BOND_TAX_PROGRESSIVE = 33; //Удержание налога по купонам по ставке 15%. + OPERATION_TYPE_DIVIDEND_TAX_PROGRESSIVE = 34; //Удержание налога по дивидендам по ставке 15%. + OPERATION_TYPE_BENEFIT_TAX_PROGRESSIVE = 35; //Удержание налога за материальную выгоду по ставке 15%. + OPERATION_TYPE_TAX_CORRECTION_PROGRESSIVE = 36; //Корректировка налога по ставке 15%. + OPERATION_TYPE_TAX_REPO_PROGRESSIVE = 37; //Удержание налога за возмещение по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_TAX_REPO = 38; //Удержание налога за возмещение по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_HOLD = 39; //Удержание налога по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_REFUND = 40; //Возврат налога по сделкам РЕПО. + OPERATION_TYPE_TAX_REPO_HOLD_PROGRESSIVE = 41; //Удержание налога по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_TAX_REPO_REFUND_PROGRESSIVE = 42; //Возврат налога по сделкам РЕПО по ставке 15%. + OPERATION_TYPE_DIV_EXT = 43; //Выплата дивидендов на карту. + OPERATION_TYPE_TAX_CORRECTION_COUPON = 44; //Корректировка налога по купонам. + OPERATION_TYPE_CASH_FEE = 45; //Комиссия за валютный остаток. + OPERATION_TYPE_OUT_FEE = 46; //Комиссия за вывод валюты с брокерского счета. +} + +message GetDividendsForeignIssuerRequest { + oneof payload { + GenerateDividendsForeignIssuerReportRequest generate_div_foreign_issuer_report = 1; //Объект запроса формирования отчёта. + GetDividendsForeignIssuerReportRequest get_div_foreign_issuer_report = 2; //Объект запроса сформированного отчёта. + } +} + +message GetDividendsForeignIssuerResponse { + oneof payload { + GenerateDividendsForeignIssuerReportResponse generate_div_foreign_issuer_report_response = 1; //Объект результата задачи запуска формирования отчёта. + GetDividendsForeignIssuerReportResponse div_foreign_issuer_report = 2; //Отчёт "Справка о доходах за пределами РФ". + } +} + +//Объект запроса формирования отчёта "Справка о доходах за пределами РФ". +message GenerateDividendsForeignIssuerReportRequest { + string account_id = 1; //Идентификатор счёта клиента. + google.protobuf.Timestamp from = 2; //Начало периода (по UTC). + google.protobuf.Timestamp to = 3; //Окончание периода (по UTC). +} + +// Объект запроса сформированного отчёта "Справка о доходах за пределами РФ". +message GetDividendsForeignIssuerReportRequest { + string task_id = 1; //Идентификатор задачи формирования отчёта. + int32 page = 2; //Номер страницы отчета (начинается с 0), значение по умолчанию: 0. +} + +// Объект результата задачи запуска формирования отчёта "Справка о доходах за пределами РФ". +message GenerateDividendsForeignIssuerReportResponse { + string task_id = 1; //Идентификатор задачи формирования отчёта. +} + +message GetDividendsForeignIssuerReportResponse { + repeated DividendsForeignIssuerReport dividends_foreign_issuer_report = 1; + int32 itemsCount = 2; //Количество записей в отчете. + int32 pagesCount = 3; //Количество страниц с данными отчета (начинается с 0). + int32 page = 4; //Текущая страница (начинается с 0). +} + +// Отчёт "Справка о доходах за пределами РФ". +message DividendsForeignIssuerReport { + google.protobuf.Timestamp record_date = 1; //Дата фиксации реестра. + google.protobuf.Timestamp payment_date = 2; //Дата выплаты. + string security_name = 3; //Наименование ценной бумаги. + string isin = 4; //ISIN-идентификатор ценной бумаги. + string issuer_country = 5; //Страна эмитента. Для депозитарных расписок указывается страна эмитента базового актива. + int64 quantity = 6; //Количество ценных бумаг. + Quotation dividend = 7; //Выплаты на одну бумагу + Quotation external_commission = 8; //Комиссия внешних платёжных агентов. + Quotation dividend_gross = 9; //Сумма до удержания налога. + Quotation tax = 10; //Сумма налога, удержанного агентом. + Quotation dividend_amount = 11; //Итоговая сумма выплаты. + string currency = 12; //Валюта. +} + +//Запрос установки stream-соединения. +message PortfolioStreamRequest { + repeated string accounts = 1; //Массив идентификаторов счётов пользователя +} + +//Информация по позициям и доходностям портфелей. +message PortfolioStreamResponse { + oneof payload { + PortfolioSubscriptionResult subscriptions = 1; //Объект результата подписки. + PortfolioResponse portfolio = 2; //Объект стриминга портфеля. + Ping ping = 3; //Проверка активности стрима. + } +} + +//Объект результата подписки. +message PortfolioSubscriptionResult { + repeated AccountSubscriptionStatus accounts = 1; //Массив счетов клиента. +} + +//Счет клиента. +message AccountSubscriptionStatus { + string account_id = 1; //Идентификатор счёта + PortfolioSubscriptionStatus subscription_status = 6; //Результат подписки. +} + +//Результат подписки. +enum PortfolioSubscriptionStatus { + PORTFOLIO_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определён. + PORTFOLIO_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. + PORTFOLIO_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счёт не найден или недостаточно прав. + PORTFOLIO_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка. +} + +//Запрос списка операций по счёту с пагинацией. +message GetOperationsByCursorRequest { + string account_id = 1; //Идентификатор счёта клиента. Обязательный параметр для данного метода, остальные параметры опциональны. + string instrument_id = 2; //Идентификатор инструмента (Figi инструмента или uid инструмента) + google.protobuf.Timestamp from = 6; //Начало периода (по UTC). + google.protobuf.Timestamp to = 7; //Окончание периода (по UTC). + string cursor = 11; //Идентификатор элемента, с которого начать формировать ответ. + int32 limit = 12; //Лимит количества операций. По умолчанию устанавливается значение **100**, максимальное значение 1000. + repeated OperationType operation_types = 13; //Тип операции. Принимает значение из списка OperationType. + OperationState state = 14; //Статус запрашиваемых операций, возможные значения указаны в OperationState. + bool without_commissions = 15; //Флаг возвращать ли комиссии, по умолчанию false + bool without_trades = 16; //Флаг получения ответа без массива сделок. + bool without_overnights = 17; //Флаг не показывать overnight операций. +} + +//Список операций по счёту с пагинацией. +message GetOperationsByCursorResponse { + bool has_next = 1; //Признак, есть ли следующий элемент. + string next_cursor = 2; //Следующий курсор. + repeated OperationItem items = 6; //Список операций. +} + +//Данные об операции. +message OperationItem { + string cursor = 1; //Курсор. + string broker_account_id = 6; //Номер счета клиента. + string id = 16; //Номер поручения. + string parent_operation_id = 17; //Номер родительского поручения. + string name = 18; //Название операции. + google.protobuf.Timestamp date = 21; //Дата поручения. + OperationType type = 22; //Тип операции. + string description = 23; //Описание операции. + OperationState state = 24; //Статус поручения. + string instrument_uid = 31; //Уникальный идентификатор инструмента. + string figi = 32; //Figi. + string instrument_type = 33; //Тип инструмента. + InstrumentType instrument_kind = 34; //Тип инструмента. + MoneyValue payment = 41; //Сумма операции. + MoneyValue price = 42; //Цена операции за 1 инструмент. + MoneyValue commission = 43; //Комиссия. + MoneyValue yield = 44; //Доходность. + Quotation yield_relative = 45; //Относительная доходность. + MoneyValue accrued_int = 46; //Накопленный купонный доход. + int64 quantity = 51; //Количество единиц инструмента. + int64 quantity_rest = 52; //Неисполненный остаток по сделке. + int64 quantity_done = 53; //Исполненный остаток. + google.protobuf.Timestamp cancel_date_time = 56; //Дата и время снятия заявки. + string cancel_reason = 57; //Причина отмены операции. + OperationItemTrades trades_info = 61; //Массив сделок. +} + +//Массив с информацией о сделках. +message OperationItemTrades { + int32 trades_size = 1; + repeated OperationItemTrade trades = 6; +} + +//Сделка по операции. +message OperationItemTrade { + string num = 1; //Номер сделки + google.protobuf.Timestamp date = 6; //Дата сделки + int64 quantity = 11; //Количество в единицах. + MoneyValue price = 16; //Цена. + MoneyValue yield = 21; //Доходность. + Quotation yield_relative = 22; //Относительная доходность. +} + +//Тип инструмента. +enum InstrumentType { + INSTRUMENT_TYPE_UNSPECIFIED = 0; + INSTRUMENT_TYPE_BOND = 1; //Облигация. + INSTRUMENT_TYPE_SHARE = 2; //Акция. + INSTRUMENT_TYPE_CURRENCY = 3; //Валюта. + INSTRUMENT_TYPE_ETF = 4; //Exchange-traded fund. Фонд. + INSTRUMENT_TYPE_FUTURES = 5; //Фьючерс. + INSTRUMENT_TYPE_SP = 6; //Структурная нота. + INSTRUMENT_TYPE_OPTION = 7; //Опцион. +} + +//Запрос установки stream-соединения позиций. +message PositionsStreamRequest { + repeated string accounts = 1; //Массив идентификаторов счётов пользователя +} + +//Информация по изменению позиций портфеля. +message PositionsStreamResponse { + oneof payload { + PositionsSubscriptionResult subscriptions = 1; //Объект результата подписки. + PositionData position = 2; //Объект стриминга позиций. + Ping ping = 3; //Проверка активности стрима. + } +} + +//Объект результата подписки. +message PositionsSubscriptionResult { + repeated PositionsSubscriptionStatus accounts = 1; //Массив счетов клиента. +} + +//Счет клиента. +message PositionsSubscriptionStatus { + string account_id = 1; //Идентификатор счёта + PositionsAccountSubscriptionStatus subscription_status = 6; //Результат подписки. +} + +//Результат подписки. +enum PositionsAccountSubscriptionStatus { + POSITIONS_SUBSCRIPTION_STATUS_UNSPECIFIED = 0; //Тип не определён. + POSITIONS_SUBSCRIPTION_STATUS_SUCCESS = 1; //Успешно. + POSITIONS_SUBSCRIPTION_STATUS_ACCOUNT_NOT_FOUND = 2; //Счёт не найден или недостаточно прав. + POSITIONS_SUBSCRIPTION_STATUS_INTERNAL_ERROR = 3; //Произошла ошибка. +} + +//Данные о позиции портфеля. +message PositionData { + string account_id = 1; //Идентификатор счёта. + repeated PositionsMoney money = 2; //Массив валютных позиций портфеля. + repeated PositionsSecurities securities = 3; //Список ценно-бумажных позиций портфеля. + repeated PositionsFutures futures = 4; //Список фьючерсов портфеля. + repeated PositionsOptions options = 5; //Список опционов портфеля. + google.protobuf.Timestamp date = 6; //Дата и время операции в формате UTC. +} + +//Валютная позиция портфеля. +message PositionsMoney { + MoneyValue available_value = 1; //Доступное количество валютный позиций. + MoneyValue blocked_value = 2; //Заблокированное количество валютный позиций. } \ No newline at end of file diff --git a/contracts/orders.proto b/contracts/orders.proto index 5da2549..9c5e31b 100644 --- a/contracts/orders.proto +++ b/contracts/orders.proto @@ -31,11 +31,14 @@ service OrdersService {/* Сервис предназначен для рабо //Метод получения списка активных заявок по счёту. rpc GetOrders(GetOrdersRequest) returns (GetOrdersResponse); + + //Метод изменения выставленной заявки. + rpc ReplaceOrder(ReplaceOrderRequest) returns (PostOrderResponse); } //Запрос установки соединения. message TradesStreamRequest { - + repeated string accounts = 1; //Идентификаторы счетов. } //Информация о торговых поручениях. @@ -48,25 +51,26 @@ message TradesStreamResponse { //Информация об исполнении торгового поручения. message OrderTrades { - string order_id = 1; //Идентификатор торгового поручения + string order_id = 1; //Идентификатор торгового поручения. google.protobuf.Timestamp created_at = 2; //Дата и время создания сообщения в часовом поясе UTC. - OrderDirection direction = 3; //Направление сделки (возможные значения) - string figi = 4; //Figi-идентификатор инструмента - repeated OrderTrade trades = 5; //Массив сделок + OrderDirection direction = 3; //Направление сделки. + string figi = 4; //Figi-идентификатор инструмента. + repeated OrderTrade trades = 5; //Массив сделок. + string account_id = 6; //Идентификатор счёта. } //Информация о сделке. message OrderTrade { google.protobuf.Timestamp date_time = 1; //Дата и время совершения сделки в часовом поясе UTC. - Quotation price = 2; //Цена, по которой совершена сделка - int64 quantity = 3; //Количество лотов в сделке + Quotation price = 2; //Цена одного инструмента, по которой совершена сделка. + int64 quantity = 3; //Количество лотов в сделке. } //Запрос выставления торгового поручения. message PostOrderRequest { string figi = 1; //Figi-идентификатор инструмента. int64 quantity = 2; //Количество лотов. - Quotation price = 3; //Цена лота. + Quotation price = 3; //Цена одного инструмента. Для получения стоимости лота требуется умножить на лотность инструмента. Игнорируется для рыночных поручений. OrderDirection direction = 4; //Направление операции. string account_id = 5; //Номер счёта. OrderType order_type = 6; //Тип заявки. @@ -89,7 +93,7 @@ message PostOrderResponse { string figi = 11; // Figi-идентификатор инструмента. OrderDirection direction = 12; //Направление сделки. - MoneyValue initial_security_price = 13; //Начальная цена инструмента заявки. + MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. OrderType order_type = 14; //Тип заявки. string message = 15; //Дополнительные данные об исполнении заявки. Quotation initial_order_price_pt = 16; //Начальная цена заявки в пунктах (для фьючерсов). @@ -136,7 +140,7 @@ message OrderState { MoneyValue executed_commission = 10; //Фактическая комиссия по итогам исполнения заявки. string figi = 11; //Figi-идентификатор инструмента. OrderDirection direction = 12; //Направление заявки. - MoneyValue initial_security_price = 13; //Начальная цена инструмента. Цена инструмента на момент выставления заявки. + MoneyValue initial_security_price = 13; //Начальная цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. repeated OrderStage stages = 14; //Стадии выполнения заявки. MoneyValue service_commission = 15; //Сервисная комиссия. string currency = 16; //Валюта заявки. @@ -146,19 +150,29 @@ message OrderState { //Сделки в рамках торгового поручения. message OrderStage { - MoneyValue price = 1; //Цена. + MoneyValue price = 1; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента.. int64 quantity = 2; //Количество лотов. string trade_id = 3; //Идентификатор торговой операции. } -//Направление операции +//Запрос изменения выставленной заявки. +message ReplaceOrderRequest { + string account_id = 1; //Номер счета. + string order_id = 6; //Идентификатор заявки на бирже. + string idempotency_key = 7; //Новый идентификатор запроса выставления поручения для целей идемпотентности. Максимальная длина 36 символов. Перезатирает старый ключ. + int64 quantity = 11; //Количество лотов. + Quotation price = 12; //Цена за 1 инструмент. + PriceType price_type = 13; //Тип цены. +} + +//Направление операции. enum OrderDirection { ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано ORDER_DIRECTION_BUY = 1; //Покупка ORDER_DIRECTION_SELL = 2; //Продажа } -//Тип заявки +//Тип заявки. enum OrderType { ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано ORDER_TYPE_LIMIT = 1; //Лимитная @@ -173,4 +187,11 @@ enum OrderExecutionReportStatus { EXECUTION_REPORT_STATUS_CANCELLED = 3; //Отменена пользователем EXECUTION_REPORT_STATUS_NEW = 4; //Новая EXECUTION_REPORT_STATUS_PARTIALLYFILL = 5; //Частично исполнена -} \ No newline at end of file +} + +//Тип цены. +enum PriceType { + PRICE_TYPE_UNSPECIFIED = 0; //Значение не определено. + PRICE_TYPE_POINT = 1; //Цена в пунктах (только для фьючерсов и облигаций). + PRICE_TYPE_CURRENCY = 2; //Цена в валюте расчётов по инструменту. +} diff --git a/contracts/sandbox.proto b/contracts/sandbox.proto index 83cf321..68e6117 100644 --- a/contracts/sandbox.proto +++ b/contracts/sandbox.proto @@ -28,6 +28,9 @@ service SandboxService { //Сервис для работы с песочниц //Метод выставления торгового поручения в песочнице. rpc PostSandboxOrder(PostOrderRequest) returns (PostOrderResponse); + //Метод изменения выставленной заявки. + rpc ReplaceSandboxOrder(ReplaceOrderRequest) returns (PostOrderResponse); + //Метод получения списка активных заявок по счёту в песочнице. rpc GetSandboxOrders(GetOrdersRequest) returns (GetOrdersResponse); @@ -43,11 +46,17 @@ service SandboxService { //Сервис для работы с песочниц //Метод получения операций в песочнице по номеру счёта. rpc GetSandboxOperations(OperationsRequest) returns (OperationsResponse); + //Метод получения операций в песочнице по номеру счета с пагинацией. + rpc GetSandboxOperationsByCursor(GetOperationsByCursorRequest) returns (GetOperationsByCursorResponse); + //Метод получения портфолио в песочнице. rpc GetSandboxPortfolio(PortfolioRequest) returns (PortfolioResponse); //Метод пополнения счёта в песочнице. rpc SandboxPayIn(SandboxPayInRequest) returns (SandboxPayInResponse); + + //Метод получения доступного остатка для вывода средств в песочнице. + rpc GetSandboxWithdrawLimits(WithdrawLimitsRequest) returns (WithdrawLimitsResponse); } //Запрос открытия счёта в песочнице. diff --git a/contracts/stoporders.proto b/contracts/stoporders.proto index 5defe55..e78f14a 100644 --- a/contracts/stoporders.proto +++ b/contracts/stoporders.proto @@ -25,16 +25,16 @@ service StopOrdersService { /* Сервис предназначен для ра rpc CancelStopOrder(CancelStopOrderRequest) returns (CancelStopOrderResponse); } -//Запрос выставления стоп-заявки +//Запрос выставления стоп-заявки. message PostStopOrderRequest { - string figi = 1; //Figi-идентификатор инструмента - int64 quantity = 2; //Количество лотов - Quotation price = 3; //Цена лота - Quotation stop_price = 4; //Стоп-цена заявки - StopOrderDirection direction = 5; //Направление операции - string account_id = 6; //Номер счёта - StopOrderExpirationType expiration_type = 7; //Тип экспирации заявки - StopOrderType stop_order_type = 8; //Тип заявки + string figi = 1; //Figi-идентификатор инструмента. + int64 quantity = 2; //Количество лотов. + Quotation price = 3; //Цена за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + Quotation stop_price = 4; //Стоп-цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + StopOrderDirection direction = 5; //Направление операции. + string account_id = 6; //Номер счёта. + StopOrderExpirationType expiration_type = 7; //Тип экспирации заявки. + StopOrderType stop_order_type = 8; //Тип заявки. google.protobuf.Timestamp expire_date = 9; //Дата и время окончания действия стоп-заявки в часовом поясе UTC. **Для ExpirationType = GoodTillDate заполнение обязательно**. } @@ -45,17 +45,17 @@ message PostStopOrderResponse { //Запрос получения списка активных стоп-заявок. message GetStopOrdersRequest { - string account_id = 1; //Идентификатор счёта клиента + string account_id = 1; //Идентификатор счёта клиента. } //Список активных стоп-заявок. message GetStopOrdersResponse { - repeated StopOrder stop_orders = 1; //Массив стоп-заявок по счёту + repeated StopOrder stop_orders = 1; //Массив стоп-заявок по счёту. } //Запрос отмены выставленной стоп-заявки. message CancelStopOrderRequest { - string account_id = 1; //Идентификатор счёта клиента + string account_id = 1; //Идентификатор счёта клиента. string stop_order_id = 2; //Уникальный идентификатор стоп-заявки. } @@ -66,24 +66,24 @@ message CancelStopOrderResponse { //Информация о стоп-заявке. message StopOrder { - string stop_order_id = 1; //Идентификатор-идентификатор стоп-заявки - int64 lots_requested = 2; //Запрошено лотов - string figi = 3; //Figi-идентификатор инструмента - StopOrderDirection direction = 4; //Направление операции - string currency = 5; //Валюта стоп-заявки - StopOrderType order_type = 6; //Тип стоп-заявки + string stop_order_id = 1; //Идентификатор-идентификатор стоп-заявки. + int64 lots_requested = 2; //Запрошено лотов. + string figi = 3; //Figi-идентификатор инструмента. + StopOrderDirection direction = 4; //Направление операции. + string currency = 5; //Валюта стоп-заявки. + StopOrderType order_type = 6; //Тип стоп-заявки. google.protobuf.Timestamp create_date = 7; //Дата и время выставления заявки в часовом поясе UTC. google.protobuf.Timestamp activation_date_time = 8; //Дата и время конвертации стоп-заявки в биржевую в часовом поясе UTC. google.protobuf.Timestamp expiration_time = 9; //Дата и время снятия заявки в часовом поясе UTC. - MoneyValue price = 10; //Цена заявки - MoneyValue stop_price = 11; //Цена активации стоп-заявки + MoneyValue price = 10; //Цена заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. + MoneyValue stop_price = 11; //Цена активации стоп-заявки за 1 инструмент. Для получения стоимости лота требуется умножить на лотность инструмента. } //Направление сделки стоп-заявки. enum StopOrderDirection { - STOP_ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано - STOP_ORDER_DIRECTION_BUY = 1; //Покупка - STOP_ORDER_DIRECTION_SELL = 2; //Продажа + STOP_ORDER_DIRECTION_UNSPECIFIED = 0; //Значение не указано. + STOP_ORDER_DIRECTION_BUY = 1; //Покупка. + STOP_ORDER_DIRECTION_SELL = 2; //Продажа. } //Тип экспирации стоп-заявке. @@ -95,8 +95,8 @@ enum StopOrderExpirationType { //Тип стоп-заявки. enum StopOrderType { - STOP_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано - STOP_ORDER_TYPE_TAKE_PROFIT = 1; //Take-profit заявка - STOP_ORDER_TYPE_STOP_LOSS = 2; //Stop-loss заявка - STOP_ORDER_TYPE_STOP_LIMIT = 3; //Stop-limit заявка + STOP_ORDER_TYPE_UNSPECIFIED = 0; //Значение не указано. + STOP_ORDER_TYPE_TAKE_PROFIT = 1; //Take-profit заявка. + STOP_ORDER_TYPE_STOP_LOSS = 2; //Stop-loss заявка. + STOP_ORDER_TYPE_STOP_LIMIT = 3; //Stop-limit заявка. } \ No newline at end of file diff --git a/contracts/users.proto b/contracts/users.proto index 92c935c..dcce0c2 100644 --- a/contracts/users.proto +++ b/contracts/users.proto @@ -13,7 +13,7 @@ import "google/protobuf/timestamp.proto"; import "common.proto"; service UsersService { /*Сервис предназначен для получения:
**1**. - списка счетов пользователя;
**2**. маржинальных показателе по счёту.*/ + списка счетов пользователя;
**2**. маржинальных показателей по счёту.*/ //Метод получения счетов пользователя. rpc GetAccounts (GetAccountsRequest) returns (GetAccountsResponse); @@ -134,7 +134,8 @@ message GetInfoRequest { message GetInfoResponse { bool prem_status = 1; //Признак премиум клиента. bool qual_status = 2; //Признак квалифицированного инвестора. - repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. + repeated string qualified_for_work_with = 3; //Набор требующих тестирования инструментов и возможностей, с которыми может работать пользователь. [Подробнее](https://tinkoff.github.io/investAPI/faq_users/). + string tariff = 4; //Наименование тарифа пользователя. } //Уровень доступа к счёту. @@ -143,4 +144,4 @@ enum AccessLevel { ACCOUNT_ACCESS_LEVEL_FULL_ACCESS = 1; //Полный доступ к счёту. ACCOUNT_ACCESS_LEVEL_READ_ONLY = 2; //Доступ с уровнем прав "только чтение". ACCOUNT_ACCESS_LEVEL_NO_ACCESS = 3; //Доступ отсутствует. -} \ No newline at end of file +} diff --git a/src/google.protobuf.rs b/src/google.protobuf.rs index 8b13789..e69de29 100644 --- a/src/google.protobuf.rs +++ b/src/google.protobuf.rs @@ -1 +0,0 @@ - diff --git a/src/tcs.rs b/src/tcs.rs index ede6010..217ed5d 100644 --- a/src/tcs.rs +++ b/src/tcs.rs @@ -1,937 +1,2222 @@ -///Денежная сумма в определенной валюте +/// Денежная сумма в определенной валюте #[derive(Clone, PartialEq, ::prost::Message)] pub struct MoneyValue { /// строковый ISO-код валюты - #[prost(string, tag = "1")] + #[prost(string, tag="1")] pub currency: ::prost::alloc::string::String, /// целая часть суммы, может быть отрицательным числом - #[prost(int64, tag = "2")] + #[prost(int64, tag="2")] pub units: i64, /// дробная часть суммы, может быть отрицательным числом - #[prost(int32, tag = "3")] + #[prost(int32, tag="3")] pub nano: i32, } -///Котировка - денежная сумма без указания валюты +/// Котировка - денежная сумма без указания валюты #[derive(Clone, PartialEq, ::prost::Message)] pub struct Quotation { /// целая часть суммы, может быть отрицательным числом - #[prost(int64, tag = "1")] + #[prost(int64, tag="1")] pub units: i64, /// дробная часть суммы, может быть отрицательным числом - #[prost(int32, tag = "2")] + #[prost(int32, tag="2")] pub nano: i32, } -///Проверка активности стрима. +/// Проверка активности стрима. #[derive(Clone, PartialEq, ::prost::Message)] pub struct Ping { - ///Время проверки. - #[prost(message, optional, tag = "1")] + /// Время проверки. + #[prost(message, optional, tag="1")] pub time: ::core::option::Option<::prost_types::Timestamp>, } -///Режим торгов инструмента +/// Режим торгов инструмента #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)] #[repr(i32)] pub enum SecurityTradingStatus { - ///Торговый статус не определён + /// Торговый статус не определён Unspecified = 0, - ///Недоступен для торгов + /// Недоступен для торгов NotAvailableForTrading = 1, - ///Период открытия торгов + /// Период открытия торгов OpeningPeriod = 2, - ///Период закрытия торгов + /// Период закрытия торгов ClosingPeriod = 3, - ///Перерыв в торговле + /// Перерыв в торговле BreakInTrading = 4, - ///Нормальная торговля + /// Нормальная торговля NormalTrading = 5, - ///Аукцион закрытия + /// Аукцион закрытия ClosingAuction = 6, - ///Аукцион крупных пакетов + /// Аукцион крупных пакетов DarkPoolAuction = 7, - ///Дискретный аукцион + /// Дискретный аукцион DiscreteAuction = 8, - ///Аукцион открытия + /// Аукцион открытия OpeningAuctionPeriod = 9, - ///Период торгов по цене аукциона закрытия + /// Период торгов по цене аукциона закрытия TradingAtClosingAuctionPrice = 10, - ///Сессия назначена + /// Сессия назначена SessionAssigned = 11, - ///Сессия закрыта + /// Сессия закрыта SessionClose = 12, - ///Сессия открыта + /// Сессия открыта SessionOpen = 13, - ///Доступна торговля в режиме внутренней ликвидности брокера + /// Доступна торговля в режиме внутренней ликвидности брокера DealerNormalTrading = 14, - ///Перерыв торговли в режиме внутренней ликвидности брокера + /// Перерыв торговли в режиме внутренней ликвидности брокера DealerBreakInTrading = 15, - ///Недоступна торговля в режиме внутренней ликвидности брокера + /// Недоступна торговля в режиме внутренней ликвидности брокера DealerNotAvailableForTrading = 16, } -///Запрос расписания торгов +impl SecurityTradingStatus { + /// String value of the enum field names used in the ProtoBuf definition. + /// + /// The values are not transformed in any way and thus are considered stable + /// (if the ProtoBuf definition does not change) and safe for programmatic use. + pub fn as_str_name(&self) -> &'static str { + match self { + SecurityTradingStatus::Unspecified => "SECURITY_TRADING_STATUS_UNSPECIFIED", + SecurityTradingStatus::NotAvailableForTrading => "SECURITY_TRADING_STATUS_NOT_AVAILABLE_FOR_TRADING", + SecurityTradingStatus::OpeningPeriod => "SECURITY_TRADING_STATUS_OPENING_PERIOD", + SecurityTradingStatus::ClosingPeriod => "SECURITY_TRADING_STATUS_CLOSING_PERIOD", + SecurityTradingStatus::BreakInTrading => "SECURITY_TRADING_STATUS_BREAK_IN_TRADING", + SecurityTradingStatus::NormalTrading => "SECURITY_TRADING_STATUS_NORMAL_TRADING", + SecurityTradingStatus::ClosingAuction => "SECURITY_TRADING_STATUS_CLOSING_AUCTION", + SecurityTradingStatus::DarkPoolAuction => "SECURITY_TRADING_STATUS_DARK_POOL_AUCTION", + SecurityTradingStatus::DiscreteAuction => "SECURITY_TRADING_STATUS_DISCRETE_AUCTION", + SecurityTradingStatus::OpeningAuctionPeriod => "SECURITY_TRADING_STATUS_OPENING_AUCTION_PERIOD", + SecurityTradingStatus::TradingAtClosingAuctionPrice => "SECURITY_TRADING_STATUS_TRADING_AT_CLOSING_AUCTION_PRICE", + SecurityTradingStatus::SessionAssigned => "SECURITY_TRADING_STATUS_SESSION_ASSIGNED", + SecurityTradingStatus::SessionClose => "SECURITY_TRADING_STATUS_SESSION_CLOSE", + SecurityTradingStatus::SessionOpen => "SECURITY_TRADING_STATUS_SESSION_OPEN", + SecurityTradingStatus::DealerNormalTrading => "SECURITY_TRADING_STATUS_DEALER_NORMAL_TRADING", + SecurityTradingStatus::DealerBreakInTrading => "SECURITY_TRADING_STATUS_DEALER_BREAK_IN_TRADING", + SecurityTradingStatus::DealerNotAvailableForTrading => "SECURITY_TRADING_STATUS_DEALER_NOT_AVAILABLE_FOR_TRADING", + } + } +} +/// Запрос расписания торгов. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TradingSchedulesRequest { - ///Наименование биржи или расчетного календаря.
Если не передаётся, возвращается информация по всем доступным торговым площадкам. - #[prost(string, tag = "1")] + /// Наименование биржи или расчетного календаря.
Если не передаётся, возвращается информация по всем доступным торговым площадкам. + #[prost(string, tag="1")] pub exchange: ::prost::alloc::string::String, - ///Начало периода по часовому поясу UTC. - #[prost(message, optional, tag = "2")] + /// Начало периода по часовому поясу UTC. + #[prost(message, optional, tag="2")] pub from: ::core::option::Option<::prost_types::Timestamp>, - ///Окончание периода по часовому поясу UTC. - #[prost(message, optional, tag = "3")] + /// Окончание периода по часовому поясу UTC. + #[prost(message, optional, tag="3")] pub to: ::core::option::Option<::prost_types::Timestamp>, } -///Список торговых площадок +/// Список торговых площадок. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TradingSchedulesResponse { /// Список торговых площадок и режимов торгов. - #[prost(message, repeated, tag = "1")] + #[prost(message, repeated, tag="1")] pub exchanges: ::prost::alloc::vec::Vec, } -///Данные по торговой площадке. +/// Данные по торговой площадке. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TradingSchedule { /// Наименование торговой площадки. - #[prost(string, tag = "1")] + #[prost(string, tag="1")] pub exchange: ::prost::alloc::string::String, /// Массив с торговыми и неторговыми днями. - #[prost(message, repeated, tag = "2")] + #[prost(message, repeated, tag="2")] pub days: ::prost::alloc::vec::Vec, } -///Информация о времени торгов. +/// Информация о времени торгов. #[derive(Clone, PartialEq, ::prost::Message)] pub struct TradingDay { /// Дата. - #[prost(message, optional, tag = "1")] + #[prost(message, optional, tag="1")] pub date: ::core::option::Option<::prost_types::Timestamp>, /// Признак торгового дня на бирже. - #[prost(bool, tag = "2")] + #[prost(bool, tag="2")] pub is_trading_day: bool, /// Время начала торгов по часовому поясу UTC. - #[prost(message, optional, tag = "3")] + #[prost(message, optional, tag="3")] pub start_time: ::core::option::Option<::prost_types::Timestamp>, /// Время окончания торгов по часовому поясу UTC. - #[prost(message, optional, tag = "4")] + #[prost(message, optional, tag="4")] pub end_time: ::core::option::Option<::prost_types::Timestamp>, - /// Время начала подачи заявки по часовому поясу UTC. - #[prost(message, optional, tag = "5")] - pub market_order_start_time: ::core::option::Option<::prost_types::Timestamp>, - /// Время окончания подачи заявки по часовому поясу UTC. - #[prost(message, optional, tag = "6")] - pub market_order_end_time: ::core::option::Option<::prost_types::Timestamp>, -} -///Запрос получения инструмента по идентификатору. + /// Время начала аукциона открытия в часовом поясе UTC. + #[prost(message, optional, tag="7")] + pub opening_auction_start_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время окончания аукциона закрытия в часовом поясе UTC. + #[prost(message, optional, tag="8")] + pub closing_auction_end_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время начала аукциона открытия вечерней сессии в часовом поясе UTC. + #[prost(message, optional, tag="9")] + pub evening_opening_auction_start_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время начала вечерней сессии в часовом поясе UTC. + #[prost(message, optional, tag="10")] + pub evening_start_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время окончания вечерней сессии в часовом поясе UTC. + #[prost(message, optional, tag="11")] + pub evening_end_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время начала основного клиринга в часовом поясе UTC. + #[prost(message, optional, tag="12")] + pub clearing_start_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время окончания основного клиринга в часовом поясе UTC. + #[prost(message, optional, tag="13")] + pub clearing_end_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время начала премаркета в часовом поясе UTC. + #[prost(message, optional, tag="14")] + pub premarket_start_time: ::core::option::Option<::prost_types::Timestamp>, + /// Время окончания премаркета в часовом поясе UTC. + #[prost(message, optional, tag="15")] + pub premarket_end_time: ::core::option::Option<::prost_types::Timestamp>, +} +/// Запрос получения инструмента по идентификатору. #[derive(Clone, PartialEq, ::prost::Message)] pub struct InstrumentRequest { /// Тип идентификатора инструмента. Возможные значения: figi, ticker. Подробнее об идентификации инструментов: [Идентификация инструментов]() - #[prost(enumeration = "InstrumentIdType", tag = "1")] + #[prost(enumeration="InstrumentIdType", tag="1")] pub id_type: i32, /// Идентификатор class_code. Обязателен при id_type = ticker. - #[prost(string, tag = "2")] + #[prost(string, tag="2")] pub class_code: ::prost::alloc::string::String, /// Идентификатор запрашиваемого инструмента. - #[prost(string, tag = "3")] + #[prost(string, tag="3")] pub id: ::prost::alloc::string::String, } -///Запрос получения инструментов. +/// Запрос получения инструментов. #[derive(Clone, PartialEq, ::prost::Message)] pub struct InstrumentsRequest { - ///Статус запрашиваемых инструментов. Возможные значения: \[InstrumentStatus\](#instrumentstatus) - #[prost(enumeration = "InstrumentStatus", tag = "1")] + /// Статус запрашиваемых инструментов. Возможные значения: \[InstrumentStatus\](#instrumentstatus) + #[prost(enumeration="InstrumentStatus", tag="1")] pub instrument_status: i32, } -///Информация об облигации. +/// Информация об облигации. #[derive(Clone, PartialEq, ::prost::Message)] pub struct BondResponse { /// Информация об облигации. - #[prost(message, optional, tag = "1")] + #[prost(message, optional, tag="1")] pub instrument: ::core::option::Option, } -///Список облигаций. +/// Список облигаций. #[derive(Clone, PartialEq, ::prost::Message)] pub struct BondsResponse { - ///Массив облигаций. - #[prost(message, repeated, tag = "1")] + /// Массив облигаций. + #[prost(message, repeated, tag="1")] pub instruments: ::prost::alloc::vec::Vec, } -///Данные по валюте. +/// Запрос купонов по облигации. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetBondCouponsRequest { + /// Figi-идентификатор инструмента. + #[prost(string, tag="1")] + pub figi: ::prost::alloc::string::String, + /// Начало запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) + #[prost(message, optional, tag="2")] + pub from: ::core::option::Option<::prost_types::Timestamp>, + /// Окончание запрашиваемого периода в часовом поясе UTC. Фильтрация по coupon_date (дата выплаты купона) + #[prost(message, optional, tag="3")] + pub to: ::core::option::Option<::prost_types::Timestamp>, +} +/// Купоны по облигации. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct GetBondCouponsResponse { + #[prost(message, repeated, tag="1")] + pub events: ::prost::alloc::vec::Vec, +} +/// Объект передачи информации о купоне облигации. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct Coupon { + /// Figi-идентификатор инструмента. + #[prost(string, tag="1")] + pub figi: ::prost::alloc::string::String, + /// Дата выплаты купона. + #[prost(message, optional, tag="2")] + pub coupon_date: ::core::option::Option<::prost_types::Timestamp>, + /// Номер купона. + #[prost(int64, tag="3")] + pub coupon_number: i64, + /// (Опционально) Дата фиксации реестра для выплаты купона. + #[prost(message, optional, tag="4")] + pub fix_date: ::core::option::Option<::prost_types::Timestamp>, + /// Выплата на одну облигацию. + #[prost(message, optional, tag="5")] + pub pay_one_bond: ::core::option::Option, + /// Тип купона. + #[prost(enumeration="CouponType", tag="6")] + pub coupon_type: i32, + /// Начало купонного периода. + #[prost(message, optional, tag="7")] + pub coupon_start_date: ::core::option::Option<::prost_types::Timestamp>, + /// Окончание купонного периода. + #[prost(message, optional, tag="8")] + pub coupon_end_date: ::core::option::Option<::prost_types::Timestamp>, + /// Купонный период в днях. + #[prost(int32, tag="9")] + pub coupon_period: i32, +} +/// Данные по валюте. #[derive(Clone, PartialEq, ::prost::Message)] pub struct CurrencyResponse { /// Информация о валюте. - #[prost(message, optional, tag = "1")] + #[prost(message, optional, tag="1")] pub instrument: ::core::option::Option, } -///Данные по валютам. +/// Данные по валютам. #[derive(Clone, PartialEq, ::prost::Message)] pub struct CurrenciesResponse { - ///Массив валют. - #[prost(message, repeated, tag = "1")] + /// Массив валют. + #[prost(message, repeated, tag="1")] pub instruments: ::prost::alloc::vec::Vec, } -///Данные по фонду. +/// Данные по фонду. #[derive(Clone, PartialEq, ::prost::Message)] pub struct EtfResponse { /// Информация о фонде. - #[prost(message, optional, tag = "1")] + #[prost(message, optional, tag="1")] pub instrument: ::core::option::Option, } -///Данные по фондам. +/// Данные по фондам. #[derive(Clone, PartialEq, ::prost::Message)] pub struct EtfsResponse { - ///Массив фондов. - #[prost(message, repeated, tag = "1")] + /// Массив фондов. + #[prost(message, repeated, tag="1")] pub instruments: ::prost::alloc::vec::Vec, } -///Данные по фьючерсу. +/// Данные по фьючерсу. #[derive(Clone, PartialEq, ::prost::Message)] pub struct FutureResponse { /// Информация о фьючерсу. - #[prost(message, optional, tag = "1")] + #[prost(message, optional, tag="1")] pub instrument: ::core::option::Option, } -///Данные по фьючерсам. +/// Данные по фьючерсам. #[derive(Clone, PartialEq, ::prost::Message)] pub struct FuturesResponse { - ///Массив фьючерсов. - #[prost(message, repeated, tag = "1")] + /// Массив фьючерсов. + #[prost(message, repeated, tag="1")] pub instruments: ::prost::alloc::vec::Vec, } -///Данные по акции. +/// Данные по опциону. +#[derive(Clone, PartialEq, ::prost::Message)] +pub struct OptionResponse { + /// Информация по опциону. + #[prost(message, optional, tag="1")] + pub instrument: ::core::option::Option