Demonstration bridge between ATproto and GraphQL. Generate schema types and interface with the ATmosphere via GraphQL queries. Includes a TypeScript server with IDE.
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: fix Python scripts for publishing

Tim Ryan a6cacc10 1f082628

+747 -650
+2
.gitignore
··· 53 53 54 54 # Python 55 55 __pycache__ 56 + pyrightconfig.json 57 + schema/schema-generated.graphql
+3
.gitmodules
··· 1 + [submodule "deps/atproto"] 2 + path = deps/atproto 3 + url = https://github.com/bluesky-social/atproto.git
+33
.rules
··· 1 + # ATProto <=> GraphQL Bridge Rules 2 + 3 + ## General 4 + - This project bridges ATProto (server-side) and GraphQL (client-side) for efficient UI development in the ATmosphere. 5 + - Familiarize yourself with both ATProto (Lexicon) and GraphQL concepts. 6 + 7 + ## Schema Generation 8 + - Use `schema/generate_lexicon_schema.py` to generate GraphQL schemas from Lexicon definitions. 9 + - Initialize standard ATProto definitions in `deps/atproto`. 10 + - Example: `pipenv run python schema/generate_lexicon_schema.py app.bsky.actor.getProfile com.atproto.server.getSession -o schema/schema-generated.graphql` 11 + - Generated schemas include recursive type references (e.g., `Lexicon_app_bsky_actor_defs_profileViewDetailed`). 12 + 13 + ## Server Development 14 + - The Rust-based GraphQL server serves as a reference implementation. 15 + - API endpoint: `/graphql` 16 + - Interactive interface: GraphiQL (for development) 17 + - Build with: `cd server && cargo run --release` 18 + - Default host: `0.0.0.0`, port: `8080` 19 + - Configure via `.env` (copy from `.env.example`) 20 + 21 + ## Development Workflow 22 + 1. Initialize submodules: `git submodule update --init --recursive` 23 + 2. Install dependencies: `pipenv install` 24 + 3. Generate schemas as needed 25 + 4. Develop server features 26 + 27 + ## Best Practices 28 + - Maintain clear separation between ATProto (server) and GraphQL (client) concerns. 29 + - Document schema generation steps for new procedures. 30 + - Keep server configuration environment-aware. 31 + 32 + ## License 33 + MIT - Follow open-source best practices.
+13
Pipfile
··· 1 + [[source]] 2 + url = "https://pypi.org/simple" 3 + verify_ssl = true 4 + name = "pypi" 5 + 6 + [packages] 7 + atproto = "==0.0.65" 8 + typer = "==0.21.1" 9 + 10 + [dev-packages] 11 + 12 + [requires] 13 + python_version = "3.14"
+633
Pipfile.lock
··· 1 + { 2 + "_meta": { 3 + "hash": { 4 + "sha256": "204ebf487e17d6ae381b0885d39cd6c68300389f052f09031e610ca4163b2b07" 5 + }, 6 + "pipfile-spec": 6, 7 + "requires": { 8 + "python_version": "3.14" 9 + }, 10 + "sources": [ 11 + { 12 + "name": "pypi", 13 + "url": "https://pypi.org/simple", 14 + "verify_ssl": true 15 + } 16 + ] 17 + }, 18 + "default": { 19 + "annotated-types": { 20 + "hashes": [ 21 + "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", 22 + "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89" 23 + ], 24 + "markers": "python_version >= '3.8'", 25 + "version": "==0.7.0" 26 + }, 27 + "anyio": { 28 + "hashes": [ 29 + "sha256:08b310f9e24a9594186fd75b4f73f4a4152069e3853f1ed8bfbf58369f4ad708", 30 + "sha256:334b70e641fd2221c1505b3890c69882fe4a2df910cba14d97019b90b24439dc" 31 + ], 32 + "markers": "python_version >= '3.10'", 33 + "version": "==4.13.0" 34 + }, 35 + "atproto": { 36 + "hashes": [ 37 + "sha256:027c6ed98746a9e6f1bb24bc18db84b80b386037709ff3af9ef927dce3dd4938", 38 + "sha256:ea53dea57454c9e56318b5d25ceb35854d60ba238b38b0e5ca79aa1a2df85846" 39 + ], 40 + "index": "pypi", 41 + "markers": "python_version < '3.15' and python_version >= '3.9'", 42 + "version": "==0.0.65" 43 + }, 44 + "certifi": { 45 + "hashes": [ 46 + "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", 47 + "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7" 48 + ], 49 + "markers": "python_version >= '3.7'", 50 + "version": "==2026.2.25" 51 + }, 52 + "cffi": { 53 + "hashes": [ 54 + "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", 55 + "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", 56 + "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", 57 + "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", 58 + "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", 59 + "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", 60 + "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", 61 + "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", 62 + "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", 63 + "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", 64 + "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", 65 + "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", 66 + "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", 67 + "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", 68 + "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", 69 + "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", 70 + "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", 71 + "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", 72 + "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", 73 + "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", 74 + "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", 75 + "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", 76 + "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", 77 + "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", 78 + "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", 79 + "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", 80 + "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", 81 + "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", 82 + "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", 83 + "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", 84 + "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", 85 + "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", 86 + "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", 87 + "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", 88 + "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", 89 + "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", 90 + "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", 91 + "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", 92 + "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", 93 + "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", 94 + "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", 95 + "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", 96 + "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", 97 + "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", 98 + "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", 99 + "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", 100 + "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", 101 + "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", 102 + "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", 103 + "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", 104 + "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", 105 + "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", 106 + "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", 107 + "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", 108 + "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", 109 + "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", 110 + "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", 111 + "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", 112 + "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", 113 + "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", 114 + "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", 115 + "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", 116 + "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", 117 + "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", 118 + "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", 119 + "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", 120 + "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", 121 + "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", 122 + "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", 123 + "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", 124 + "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", 125 + "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", 126 + "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", 127 + "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", 128 + "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", 129 + "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", 130 + "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", 131 + "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", 132 + "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", 133 + "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", 134 + "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", 135 + "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", 136 + "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", 137 + "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf" 138 + ], 139 + "markers": "python_version >= '3.9'", 140 + "version": "==2.0.0" 141 + }, 142 + "click": { 143 + "hashes": [ 144 + "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", 145 + "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6" 146 + ], 147 + "markers": "python_version >= '3.10'", 148 + "version": "==8.3.1" 149 + }, 150 + "cryptography": { 151 + "hashes": [ 152 + "sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70", 153 + "sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d", 154 + "sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a", 155 + "sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0", 156 + "sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97", 157 + "sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30", 158 + "sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759", 159 + "sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c", 160 + "sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead", 161 + "sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275", 162 + "sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58", 163 + "sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f", 164 + "sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361", 165 + "sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507", 166 + "sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa", 167 + "sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b", 168 + "sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b", 169 + "sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8", 170 + "sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8", 171 + "sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72", 172 + "sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175", 173 + "sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e", 174 + "sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124", 175 + "sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a", 176 + "sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c", 177 + "sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f", 178 + "sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d", 179 + "sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4", 180 + "sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c", 181 + "sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290", 182 + "sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca", 183 + "sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d", 184 + "sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a", 185 + "sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed", 186 + "sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a", 187 + "sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb", 188 + "sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8", 189 + "sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707", 190 + "sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410", 191 + "sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736", 192 + "sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2", 193 + "sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4", 194 + "sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013", 195 + "sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19", 196 + "sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b", 197 + "sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738", 198 + "sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463", 199 + "sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77", 200 + "sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4" 201 + ], 202 + "markers": "python_version >= '3.8' and python_full_version not in '3.9.0, 3.9.1'", 203 + "version": "==46.0.6" 204 + }, 205 + "dnspython": { 206 + "hashes": [ 207 + "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", 208 + "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f" 209 + ], 210 + "markers": "python_version >= '3.10'", 211 + "version": "==2.8.0" 212 + }, 213 + "h11": { 214 + "hashes": [ 215 + "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", 216 + "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86" 217 + ], 218 + "markers": "python_version >= '3.8'", 219 + "version": "==0.16.0" 220 + }, 221 + "httpcore": { 222 + "hashes": [ 223 + "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", 224 + "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8" 225 + ], 226 + "markers": "python_version >= '3.8'", 227 + "version": "==1.0.9" 228 + }, 229 + "httpx": { 230 + "hashes": [ 231 + "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", 232 + "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad" 233 + ], 234 + "markers": "python_version >= '3.8'", 235 + "version": "==0.28.1" 236 + }, 237 + "idna": { 238 + "hashes": [ 239 + "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", 240 + "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902" 241 + ], 242 + "markers": "python_version >= '3.8'", 243 + "version": "==3.11" 244 + }, 245 + "libipld": { 246 + "hashes": [ 247 + "sha256:02f00a19e6a557bfed2ce6911d541f96708d73ca457b709793885336adf91431", 248 + "sha256:047d95641c95360adb6627447d6cbc048fcd9768f4a827078842d7d99cb79b77", 249 + "sha256:06f766cec75f3d78339caa3ce3c6977e290e1a97f37e5f4ba358da2e77340196", 250 + "sha256:071de5acf902e9a21d761572755afc8403cbaadd4b8199e7504ad52ee45b6b5e", 251 + "sha256:082321d5ba84d9bb4e9f2577278040db2b4f624b131402735ea7eca13febedec", 252 + "sha256:08261503b7307c6d9acbd3b2a221da9294b457204dcefce446f627893abb077e", 253 + "sha256:08c8aadfebf9db9a547bd14ab4e5d438ee3f0a003eb4554bbecedaebbaaa0bbe", 254 + "sha256:0dc2db1485703f7c6cf4ff9da0fe7a7d4ee883f92a35d68197c2294a3c3efd17", 255 + "sha256:0fae0158971bf97aa6662e5f9cb5f497c35d5196336047ca4a9ebc6492b1f582", 256 + "sha256:13cb6c68ec55a8802704241210cca44e09eaf4c0e9bd6823e191e56f7f038f05", 257 + "sha256:1767f287c4137521f6b2dfa30583030b128174515dc4ddc481598b570de72ca4", 258 + "sha256:196a8fcd86ae0c8096cea85ff308edf315d77fbb677ef3dd9eff0be9da526499", 259 + "sha256:1a7de390a3eb897d3194f6c96067c21338fbe6e0fc1145ab6b51af276aa7a08e", 260 + "sha256:1d791227d505a3aab9f5bc0df9baafacae825f9fd4cd01f157252efe15536b10", 261 + "sha256:1d7f564d13a6983a20baef873a7966df28aa27a86ccc574456b4ebc7d31fdd2d", 262 + "sha256:249b74fcd3ae8bb6d0c9b3e0ec23a75db60f7b40f8b07ef378dfc9227c921ef5", 263 + "sha256:2ac45e3aef416fe2eccbe84e562d81714416790bfd0756a1aa49ba895d4c7010", 264 + "sha256:2e8608367317210baa57caa89b504db05c1623d8418e5a94276bcf36059cef65", 265 + "sha256:3344f30d47dcab9cba41dd8f2243874af91939e38e3c31f20d586383ca74296e", 266 + "sha256:36be4ce9cb417eedec253eda9f55b92f29a35cbfcb24d108b496c72934fea7a2", 267 + "sha256:36fe9cd1b5a75a315cab30091579242d05df39692f773f7d8221250503753e3a", 268 + "sha256:37ea7cb7afb94277e4e095bcc0ae888ed4b6e0fe8082c41dccd6e9487ccfd729", 269 + "sha256:3aa8ae124db8fe724199e7fd16c2bd72dcdd2f10572be28dcacf0eb7613af026", 270 + "sha256:3dbed6b1f2559c4ba8b898043a96c763a16063a1810cc1378cfdc92bcbdbb7e6", 271 + "sha256:3f033e98c9e95e8448c97bbc904271908076974d790a895abade2ae89433715e", 272 + "sha256:4140f030eb3cfff17d04b9481f13aaed0b2910d1371fe7489394120ed1d09ae5", 273 + "sha256:435643314f8a11d207c5e25536d3f6876a3efa337886faea7e5116e1d8b67bc6", 274 + "sha256:4402e21ac3b5c754e1562b448175d35113fb39d7bb938dfa4e095a9629ebb8dd", 275 + "sha256:4443d047fd1a9679534a87a6ee35c3a10793d4453801281341bb1e8390087c69", 276 + "sha256:4446cae7584a446b58de66942f89f155d95c2cbfb9ad215af359086824d4e3b9", 277 + "sha256:44ca1ba44cb801686557e9544d248e013a2d5d1ab9fed796f090bb0d51d8f4ef", 278 + "sha256:4596509ef4c2f00df2d0914e8efc632e4eb84bf837e57a8f53036dcf4d0d3169", 279 + "sha256:499345f7ce4ec6da1d35c4bf5c9f8aab9324f5c9e508db3065073fec2d4e4bde", 280 + "sha256:5393886a7e387751904681ecfa7e5912471b46043f044baa041a2b4772e4f839", 281 + "sha256:57ec5b9ffc608a438f41f359996982291382365c4a593b1bce30bbec7a63771a", 282 + "sha256:5947e99b40e923170094a3313c9f3629c6ed475465ba95eadce6cdcf08f1f65a", 283 + "sha256:5a50cbf5b3b73164fbb88169573ed3e824024c12fbc5f9efd87fb5c8f236ccc1", 284 + "sha256:5c9f6e91da0f7dcdd3276eefe3f31b2ec659ed279f5e595e6f44efa337a18b2b", 285 + "sha256:5e3e9be4bdeb90dbc537a53f8d06e8b2c703f4b7868f9316958e1bbde526a143", 286 + "sha256:5f0929edbbd283a203e0a74d1794ad171cf4f5fc11453bddc366615c4b97043c", 287 + "sha256:627035693460bae559d2e7f46bc577a27504d6e38e8715fcf9a8d905f6b1c72d", 288 + "sha256:634d176664cf295360712157b5c5a83539da2f4416f3e0491340064d49e74fd8", 289 + "sha256:63bc6858d73c324e29d74155bdb339e14330a88bb1a8cc8fdc295048337dca09", 290 + "sha256:67c2e2a6604fe8b5aa8960c31989dfb84275693ba411d5139cdb87b2855bf009", 291 + "sha256:6979074fd5bfeeda75653df39875f566fefc5d9f3bb6e786742f55d7a7f9bf38", 292 + "sha256:6c2817982506d1ccda516da7d6cc2662b58a363fc84a163bea297ff61b789106", 293 + "sha256:6f09281bebc3c4d397a58606663ee915290702db0323366f9f1bd30b8b4a3fc1", 294 + "sha256:717c4630c4b1ad81c6896291cd93bcaca4ddc3f66412d81459e2641a505ec04a", 295 + "sha256:72b59693a1ac0962ef24c660e8d34dc25c41a1f1da1da54badb7442a498fc9a4", 296 + "sha256:76731ebebd824fa45e51cc85506b108aa5da7322e43864909895f1779e9e4b41", 297 + "sha256:7b8e7100bffbe579b7c92a3c6a8852ce333e0de171e696a2063e1e39ec9cc50a", 298 + "sha256:7e85ccd9136110e63943d95232b193c893e369c406273d235160e5cc4b39c9ce", 299 + "sha256:829772d79337fc330c9c129295309d27c86785b78d947e3561e45ccfe67c519d", 300 + "sha256:847d6f481f8e8e10347479490db824cc568689e7bc1a9f5e5aa67235494dcdf6", 301 + "sha256:8494fe4235b053883209aa9c6a5d128f18efde7d6d0eceb51d2dcb029dffbc33", 302 + "sha256:88ac549eb6c56287785ad20d0e7785d3e8b153b6a322fd5d7edf0e7fda2b182e", 303 + "sha256:8be484f1dc5525453e17f07f02202180c708213f2b6ea06d3b9247a5702e0229", 304 + "sha256:8d7cd1e7e88b0fbc8f4aa267bdea2d10452c9dd0e1aafa82a5e0751427f222b0", 305 + "sha256:8db7127528af6393c02da6317a9188fb05dd13feb7557ec5be320208402f6537", 306 + "sha256:908630dc28b16a517cf323293f0843f481b0872649cba7d4cfdbc6eb258f5674", 307 + "sha256:91b02da059a6ae7f783efa826f640ab1ca5eb5dd370bfd3f41071693a363c4fb", 308 + "sha256:95a2c4f507c88c01a797ec97ce10603bea684c03208227703e007485dc631971", 309 + "sha256:981f870427c6f2ece983825b439c18718e5aaf8121a1659624e896ee905ab18e", 310 + "sha256:9a1d84c630961cff188deaa2129c86d69f5779c8d02046fbe0c629ef162bc3df", 311 + "sha256:9cb4e0cd56d66c2b751eef7288aba919a8a73f320c8f8b7060d522fdffb3cd5b", 312 + "sha256:a48bc2f7845825143a36f6a305680823a2816488593024803064d0803e3cee35", 313 + "sha256:a81fbf42a8edf094c7f8ebd77eb14d8cc7c3d6b3b51d786d47ecb4c6763da2fe", 314 + "sha256:ad07c8574d59088ed8bcec7cd21544a50f51a324290e77b0b042a0e4c1ed1b07", 315 + "sha256:ad6f8fd51a4472a8c2ae8e5c2b3fb274ea29876b9284d86456a203e41793952c", 316 + "sha256:b040dab7eb04b0ff730e68840f40eb225c9f14e73ad21238b76c7b8ded3ad99d", 317 + "sha256:b155c02626b194439f4b519a53985aedc8637ae56cf640ea6acf6172a37465de", 318 + "sha256:b3404a11e7e7803f7bc87a819e694e2568828c1f13a5f7fce74d3240d5a07aba", 319 + "sha256:b3d16a2d3588244702ea671373de2984e20d44936c9d6d457570e4d8b33dddcf", 320 + "sha256:b438d42efc857768db97f2a5ca8114b933e73b827d91344ec9dac6734687f060", 321 + "sha256:b69f2accac94f2599e4c012d9b53fa786863156d9a9401000edf148af81e5be5", 322 + "sha256:bf0c82b53b595cd91c3920081acd73b287c5aeb81e756e6b1a636a10e01eaaa3", 323 + "sha256:bf7f553e13916b67572c8ae8ea1b3227d709dfc4d98699a0451027174dc3739a", 324 + "sha256:c17ae8593e33bbb3c377974cd046be03453e0a317b5c723b9375fc00491ac5dd", 325 + "sha256:c1f3ed8f70b215a294b5c6830e91af48acde96b3c8a6cae13304291f8240b939", 326 + "sha256:c4a0538187b8a2dfc9507d83ff6e9de150802f81c67d22c043e4036653ca048e", 327 + "sha256:c8957b49c946d4ddd70f37bfe289494fab9088529db452f1cfcce31501369917", 328 + "sha256:ca53a59670b113be3b57910c3132d003fd4571f2c83f75bbfc758f5ff3288708", 329 + "sha256:d1549bfab54a1f422ec48d3141c9ec643444d8e80135b2a6e8ec8e109df05ff3", 330 + "sha256:d5cd74d2e17435869c21400cb587e788785bf7f565897c0e651f82e69bc0da27", 331 + "sha256:d689891c00251c22439ccfa4a445cee77cfa68b9e703fdf7ffe7abe4de56da86", 332 + "sha256:d6ed1bbdd5380a23ca84d4460c65f46d85f12ca860ef801212806ffe5ad497fa", 333 + "sha256:d9433e7c0ee73f30bc6849363660f8e7fda97fae5e3f0cf261e54af86dfa681d", 334 + "sha256:d9f8849acfb2e13d10aa4e8095c6eb65db7f431d3a38c60760de0f0abebcd58d", 335 + "sha256:e35a8735b8a4bdd09b9edfbf1ae36e9ba9a804de50c99352c9a06aa3da109a62", 336 + "sha256:e52f5111d7d06838993d7c35256cb3e19143239c602cda177273788b0cb5ffc5", 337 + "sha256:e7627f371682160cae818f817eb846bc8c267a5daa028748a7c73103d8df00eb", 338 + "sha256:edbfe93ae92609436471a83a80219e3ab07d79496d39ef161d4111eb47ea8184", 339 + "sha256:f11e053f954fe8efc37ee1d71ff3c20844551d1b2468388612876ecac500ccc3", 340 + "sha256:f46179c722baf74c627c01c0bf85be7fcbde66bbf7c5f8c1bbb57bd3a17b861b", 341 + "sha256:f78507f2f458239e4e7fe2f984c59c5f5060f1ec401e8f38cd2b59fc85d7d8fb", 342 + "sha256:fa67924c14b481f3f2c3d8a173d755955c2363d889ffc78dadb8d6abcaa7fe3c", 343 + "sha256:fd0877ef4a1bd6e42ba52659769b5b766583c67b3cfb4e7143f9d10b81fb7a74" 344 + ], 345 + "markers": "python_version >= '3.8'", 346 + "version": "==3.3.2" 347 + }, 348 + "markdown-it-py": { 349 + "hashes": [ 350 + "sha256:87327c59b172c5011896038353a81343b6754500a08cd7a4973bb48c6d578147", 351 + "sha256:cb0a2b4aa34f932c007117b194e945bd74e0ec24133ceb5bac59009cda1cb9f3" 352 + ], 353 + "markers": "python_version >= '3.10'", 354 + "version": "==4.0.0" 355 + }, 356 + "mdurl": { 357 + "hashes": [ 358 + "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", 359 + "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba" 360 + ], 361 + "markers": "python_version >= '3.7'", 362 + "version": "==0.1.2" 363 + }, 364 + "pycparser": { 365 + "hashes": [ 366 + "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", 367 + "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992" 368 + ], 369 + "markers": "python_version >= '3.10'", 370 + "version": "==3.0" 371 + }, 372 + "pydantic": { 373 + "hashes": [ 374 + "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", 375 + "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d" 376 + ], 377 + "markers": "python_version >= '3.9'", 378 + "version": "==2.12.5" 379 + }, 380 + "pydantic-core": { 381 + "hashes": [ 382 + "sha256:0177272f88ab8312479336e1d777f6b124537d47f2123f89cb37e0accea97f90", 383 + "sha256:01a3d0ab748ee531f4ea6c3e48ad9dac84ddba4b0d82291f87248f2f9de8d740", 384 + "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", 385 + "sha256:03b77d184b9eb40240ae9fd676ca364ce1085f203e1b1256f8ab9984dca80a84", 386 + "sha256:03ca43e12fab6023fc79d28ca6b39b05f794ad08ec2feccc59a339b02f2b3d33", 387 + "sha256:05a2c8852530ad2812cb7914dc61a1125dc4e06252ee98e5638a12da6cc6fb6c", 388 + "sha256:070259a8818988b9a84a449a2a7337c7f430a22acc0859c6b110aa7212a6d9c0", 389 + "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", 390 + "sha256:0cbaad15cb0c90aa221d43c00e77bb33c93e8d36e0bf74760cd00e732d10a6a0", 391 + "sha256:100baa204bb412b74fe285fb0f3a385256dad1d1879f0a5cb1499ed2e83d132a", 392 + "sha256:112e305c3314f40c93998e567879e887a3160bb8689ef3d2c04b6cc62c33ac34", 393 + "sha256:16f80f7abe3351f8ea6858914ddc8c77e02578544a0ebc15b4c2e1a0e813b0b2", 394 + "sha256:1746d4a3d9a794cacae06a5eaaccb4b8643a131d45fbc9af23e353dc0a5ba5c3", 395 + "sha256:1962293292865bca8e54702b08a4f26da73adc83dd1fcf26fbc875b35d81c815", 396 + "sha256:1d1d9764366c73f996edd17abb6d9d7649a7eb690006ab6adbda117717099b14", 397 + "sha256:1f8d33a7f4d5a7889e60dc39856d76d09333d8a6ed0f5f1190635cbec70ec4ba", 398 + "sha256:22f0fb8c1c583a3b6f24df2470833b40207e907b90c928cc8d3594b76f874375", 399 + "sha256:239edca560d05757817c13dc17c50766136d21f7cd0fac50295499ae24f90fdf", 400 + "sha256:242a206cd0318f95cd21bdacff3fcc3aab23e79bba5cac3db5a841c9ef9c6963", 401 + "sha256:25e1c2af0fce638d5f1988b686f3b3ea8cd7de5f244ca147c777769e798a9cd1", 402 + "sha256:266fb4cbf5e3cbd0b53669a6d1b039c45e3ce651fd5442eff4d07c2cc8d66808", 403 + "sha256:2782c870e99878c634505236d81e5443092fba820f0373997ff75f90f68cd553", 404 + "sha256:287dad91cfb551c363dc62899a80e9e14da1f0e2b6ebde82c806612ca2a13ef1", 405 + "sha256:29452c56df2ed968d18d7e21f4ab0ac55e71dc59524872f6fc57dcf4a3249ed2", 406 + "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", 407 + "sha256:2a5e06546e19f24c6a96a129142a75cee553cc018ffee48a460059b1185f4470", 408 + "sha256:2b761d210c9ea91feda40d25b4efe82a1707da2ef62901466a42492c028553a2", 409 + "sha256:2c010c6ded393148374c0f6f0bf89d206bf3217f201faa0635dcd56bd1520f6b", 410 + "sha256:2ff4321e56e879ee8d2a879501c8e469414d948f4aba74a2d4593184eb326660", 411 + "sha256:3006c3dd9ba34b0c094c544c6006cc79e87d8612999f1a5d43b769b89181f23c", 412 + "sha256:33cb885e759a705b426baada1fe68cbb0a2e68e34c5d0d0289a364cf01709093", 413 + "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", 414 + "sha256:34a64bc3441dc1213096a20fe27e8e128bd3ff89921706e83c0b1ac971276594", 415 + "sha256:35b44f37a3199f771c3eaa53051bc8a70cd7b54f333531c59e29fd4db5d15008", 416 + "sha256:378bec5c66998815d224c9ca994f1e14c0c21cb95d2f52b6021cc0b2a58f2a5a", 417 + "sha256:3f37a19d7ebcdd20b96485056ba9e8b304e27d9904d233d7b1015db320e51f0a", 418 + "sha256:3f84d5c1b4ab906093bdc1ff10484838aca54ef08de4afa9de0f5f14d69639cd", 419 + "sha256:4009935984bd36bd2c774e13f9a09563ce8de4abaa7226f5108262fa3e637284", 420 + "sha256:406bf18d345822d6c21366031003612b9c77b3e29ffdb0f612367352aab7d586", 421 + "sha256:4819fa52133c9aa3c387b3328f25c1facc356491e6135b459f1de698ff64d869", 422 + "sha256:482c982f814460eabe1d3bb0adfdc583387bd4691ef00b90575ca0d2b6fe2294", 423 + "sha256:4bc36bbc0b7584de96561184ad7f012478987882ebf9f9c389b23f432ea3d90f", 424 + "sha256:506d766a8727beef16b7adaeb8ee6217c64fc813646b424d0804d67c16eddb66", 425 + "sha256:56121965f7a4dc965bff783d70b907ddf3d57f6eba29b6d2e5dabfaf07799c51", 426 + "sha256:58133647260ea01e4d0500089a8c4f07bd7aa6ce109682b1426394988d8aaacc", 427 + "sha256:5921a4d3ca3aee735d9fd163808f5e8dd6c6972101e4adbda9a4667908849b97", 428 + "sha256:5a4e67afbc95fa5c34cf27d9089bca7fcab4e51e57278d710320a70b956d1b9a", 429 + "sha256:5cb1b2f9742240e4bb26b652a5aeb840aa4b417c7748b6f8387927bc6e45e40d", 430 + "sha256:62de39db01b8d593e45871af2af9e497295db8d73b085f6bfd0b18c83c70a8f9", 431 + "sha256:634e8609e89ceecea15e2d61bc9ac3718caaaa71963717bf3c8f38bfde64242c", 432 + "sha256:63510af5e38f8955b8ee5687740d6ebf7c2a0886d15a6d65c32814613681bc07", 433 + "sha256:650ae77860b45cfa6e2cdafc42618ceafab3a2d9a3811fcfbd3bbf8ac3c40d36", 434 + "sha256:6561e94ba9dacc9c61bce40e2d6bdc3bfaa0259d3ff36ace3b1e6901936d2e3e", 435 + "sha256:65840751b72fbfd82c3c640cff9284545342a4f1eb1586ad0636955b261b0b05", 436 + "sha256:6cb58b9c66f7e4179a2d5e0f849c48eff5c1fca560994d6eb6543abf955a149e", 437 + "sha256:6f52298fbd394f9ed112d56f3d11aabd0d5bd27beb3084cc3d8ad069483b8941", 438 + "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", 439 + "sha256:72f6c8b11857a856bcfa48c86f5368439f74453563f951e473514579d44aa612", 440 + "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", 441 + "sha256:76d0819de158cd855d1cbb8fcafdf6f5cf1eb8e470abe056d5d161106e38062b", 442 + "sha256:76ee27c6e9c7f16f47db7a94157112a2f3a00e958bc626e2f4ee8bec5c328fbe", 443 + "sha256:77b63866ca88d804225eaa4af3e664c5faf3568cea95360d21f4725ab6e07146", 444 + "sha256:79ec52ec461e99e13791ec6508c722742ad745571f234ea6255bed38c6480f11", 445 + "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", 446 + "sha256:7da7087d756b19037bc2c06edc6c170eeef3c3bafcb8f532ff17d64dc427adfd", 447 + "sha256:7f3bf998340c6d4b0c9a2f02d6a400e51f123b59565d74dc60d252ce888c260b", 448 + "sha256:80aa89cad80b32a912a65332f64a4450ed00966111b6615ca6816153d3585a8c", 449 + "sha256:8566def80554c3faa0e65ac30ab0932b9e3a5cd7f8323764303d468e5c37595a", 450 + "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", 451 + "sha256:88942d3a3dff3afc8288c21e565e476fc278902ae4d6d134f1eeda118cc830b1", 452 + "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", 453 + "sha256:8e7c86f27c585ef37c35e56a96363ab8de4e549a95512445b85c96d3e2f7c1bf", 454 + "sha256:915c3d10f81bec3a74fbd4faebe8391013ba61e5a1a8d48c4455b923bdda7858", 455 + "sha256:93e8740d7503eb008aa2df04d3b9735f845d43ae845e6dcd2be0b55a2da43cd2", 456 + "sha256:941103c9be18ac8daf7b7adca8228f8ed6bb7a1849020f643b3a14d15b1924d9", 457 + "sha256:97aeba56665b4c3235a0e52b2c2f5ae9cd071b8a8310ad27bddb3f7fb30e9aa2", 458 + "sha256:a39455728aabd58ceabb03c90e12f71fd30fa69615760a075b9fec596456ccc3", 459 + "sha256:a3a52f6156e73e7ccb0f8cced536adccb7042be67cb45f9562e12b319c119da6", 460 + "sha256:a668ce24de96165bb239160b3d854943128f4334822900534f2fe947930e5770", 461 + "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", 462 + "sha256:aabf5777b5c8ca26f7824cb4a120a740c9588ed58df9b2d196ce92fba42ff8dc", 463 + "sha256:aec5cf2fd867b4ff45b9959f8b20ea3993fc93e63c7363fe6851424c8a7e7c23", 464 + "sha256:b2379fa7ed44ddecb5bfe4e48577d752db9fc10be00a6b7446e9663ba143de26", 465 + "sha256:b4ececa40ac28afa90871c2cc2b9ffd2ff0bf749380fbdf57d165fd23da353aa", 466 + "sha256:b5819cd790dbf0c5eb9f82c73c16b39a65dd6dd4d1439dcdea7816ec9adddab8", 467 + "sha256:b74557b16e390ec12dca509bce9264c3bbd128f8a2c376eaa68003d7f327276d", 468 + "sha256:b80aa5095cd3109962a298ce14110ae16b8c1aece8b72f9dafe81cf597ad80b3", 469 + "sha256:b93590ae81f7010dbe380cdeab6f515902ebcbefe0b9327cc4804d74e93ae69d", 470 + "sha256:b96d5f26b05d03cc60f11a7761a5ded1741da411e7fe0909e27a5e6a0cb7b034", 471 + "sha256:bd3d54f38609ff308209bd43acea66061494157703364ae40c951f83ba99a1a9", 472 + "sha256:bfea2a5f0b4d8d43adf9d7b8bf019fb46fdd10a2e5cde477fbcb9d1fa08c68e1", 473 + "sha256:c007fe8a43d43b3969e8469004e9845944f1a80e6acd47c150856bb87f230c56", 474 + "sha256:c1df3d34aced70add6f867a8cf413e299177e0c22660cc767218373d0779487b", 475 + "sha256:c23e27686783f60290e36827f9c626e63154b82b116d7fe9adba1fda36da706c", 476 + "sha256:c8d8b4eb992936023be7dee581270af5c6e0697a8559895f527f5b7105ecd36a", 477 + "sha256:c9e19dd6e28fdcaa5a1de679aec4141f691023916427ef9bae8584f9c2fb3b0e", 478 + "sha256:d0d2568a8c11bf8225044aa94409e21da0cb09dcdafe9ecd10250b2baad531a9", 479 + "sha256:d38548150c39b74aeeb0ce8ee1d8e82696f4a4e16ddc6de7b1d8823f7de4b9b5", 480 + "sha256:d3a978c4f57a597908b7e697229d996d77a6d3c94901e9edee593adada95ce1a", 481 + "sha256:d5160812ea7a8a2ffbe233d8da666880cad0cbaf5d4de74ae15c313213d62556", 482 + "sha256:dc799088c08fa04e43144b164feb0c13f9a0bc40503f8df3e9fde58a3c0c101e", 483 + "sha256:df3959765b553b9440adfd3c795617c352154e497a4eaf3752555cfb5da8fc49", 484 + "sha256:dfa8a0c812ac681395907e71e1274819dec685fec28273a28905df579ef137e2", 485 + "sha256:e25c479382d26a2a41b7ebea1043564a937db462816ea07afa8a44c0866d52f9", 486 + "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", 487 + "sha256:e536c98a7626a98feb2d3eaf75944ef6f3dbee447e1f841eae16f2f0a72d8ddc", 488 + "sha256:e56ba91f47764cc14f1daacd723e3e82d1a89d783f0f5afe9c364b8bb491ccdb", 489 + "sha256:e672ba74fbc2dc8eea59fb6d4aed6845e6905fc2a8afe93175d94a83ba2a01a0", 490 + "sha256:e7b576130c69225432866fe2f4a469a85a54ade141d96fd396dffcf607b558f8", 491 + "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", 492 + "sha256:e96cea19e34778f8d59fe40775a7a574d95816eb150850a85a7a4c8f4b94ac69", 493 + "sha256:ece5c59f0ce7d001e017643d8d24da587ea1f74f6993467d85ae8a5ef9d4f42b", 494 + "sha256:eceb81a8d74f9267ef4081e246ffd6d129da5d87e37a77c9bde550cb04870c1c", 495 + "sha256:ed2e99c456e3fadd05c991f8f437ef902e00eedf34320ba2b0842bd1c3ca3a75", 496 + "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", 497 + "sha256:f14f8f046c14563f8eb3f45f499cc658ab8d10072961e07225e507adb700e93f", 498 + "sha256:f15489ba13d61f670dcc96772e733aad1a6f9c429cc27574c6cdaed82d0146ad", 499 + "sha256:f31d95a179f8d64d90f6831d71fa93290893a33148d890ba15de25642c5d075b", 500 + "sha256:f41a7489d32336dbf2199c8c0a215390a751c5b014c2c1c5366e817202e9cdf7", 501 + "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", 502 + "sha256:f547144f2966e1e16ae626d8ce72b4cfa0caedc7fa28052001c94fb2fcaa1c52" 503 + ], 504 + "markers": "python_version >= '3.9'", 505 + "version": "==2.41.5" 506 + }, 507 + "pygments": { 508 + "hashes": [ 509 + "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", 510 + "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b" 511 + ], 512 + "markers": "python_version >= '3.8'", 513 + "version": "==2.19.2" 514 + }, 515 + "rich": { 516 + "hashes": [ 517 + "sha256:793431c1f8619afa7d3b52b2cdec859562b950ea0d4b6b505397612db8d5362d", 518 + "sha256:b8daa0b9e4eef54dd8cf7c86c03713f53241884e814f4e2f5fb342fe520f639b" 519 + ], 520 + "markers": "python_full_version >= '3.8.0'", 521 + "version": "==14.3.3" 522 + }, 523 + "shellingham": { 524 + "hashes": [ 525 + "sha256:7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686", 526 + "sha256:8dbca0739d487e5bd35ab3ca4b36e11c4078f3a234bfce294b0a0291363404de" 527 + ], 528 + "markers": "python_version >= '3.7'", 529 + "version": "==1.5.4" 530 + }, 531 + "typer": { 532 + "hashes": [ 533 + "sha256:7985e89081c636b88d172c2ee0cfe33c253160994d47bdfdc302defd7d1f1d01", 534 + "sha256:ea835607cd752343b6b2b7ce676893e5a0324082268b48f27aa058bdb7d2145d" 535 + ], 536 + "index": "pypi", 537 + "markers": "python_version >= '3.9'", 538 + "version": "==0.21.1" 539 + }, 540 + "typing-extensions": { 541 + "hashes": [ 542 + "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", 543 + "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548" 544 + ], 545 + "markers": "python_version >= '3.9'", 546 + "version": "==4.15.0" 547 + }, 548 + "typing-inspection": { 549 + "hashes": [ 550 + "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", 551 + "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464" 552 + ], 553 + "markers": "python_version >= '3.9'", 554 + "version": "==0.4.2" 555 + }, 556 + "websockets": { 557 + "hashes": [ 558 + "sha256:0701bc3cfcb9164d04a14b149fd74be7347a530ad3bbf15ab2c678a2cd3dd9a2", 559 + "sha256:0a34631031a8f05657e8e90903e656959234f3a04552259458aac0b0f9ae6fd9", 560 + "sha256:0af68c55afbd5f07986df82831c7bff04846928ea8d1fd7f30052638788bc9b5", 561 + "sha256:0c9e74d766f2818bb95f84c25be4dea09841ac0f734d1966f415e4edfc4ef1c3", 562 + "sha256:0f3c1e2ab208db911594ae5b4f79addeb3501604a165019dd221c0bdcabe4db8", 563 + "sha256:0fdfe3e2a29e4db3659dbd5bbf04560cea53dd9610273917799f1cde46aa725e", 564 + "sha256:1009ee0c7739c08a0cd59de430d6de452a55e42d6b522de7aa15e6f67db0b8e1", 565 + "sha256:1234d4ef35db82f5446dca8e35a7da7964d02c127b095e172e54397fb6a6c256", 566 + "sha256:16b6c1b3e57799b9d38427dda63edcbe4926352c47cf88588c0be4ace18dac85", 567 + "sha256:2034693ad3097d5355bfdacfffcbd3ef5694f9718ab7f29c29689a9eae841880", 568 + "sha256:21c1fa28a6a7e3cbdc171c694398b6df4744613ce9b36b1a498e816787e28123", 569 + "sha256:229cf1d3ca6c1804400b0a9790dc66528e08a6a1feec0d5040e8b9eb14422375", 570 + "sha256:27ccee0071a0e75d22cb35849b1db43f2ecd3e161041ac1ee9d2352ddf72f065", 571 + "sha256:363c6f671b761efcb30608d24925a382497c12c506b51661883c3e22337265ed", 572 + "sha256:39c1fec2c11dc8d89bba6b2bf1556af381611a173ac2b511cf7231622058af41", 573 + "sha256:3b1ac0d3e594bf121308112697cf4b32be538fb1444468fb0a6ae4feebc83411", 574 + "sha256:3be571a8b5afed347da347bfcf27ba12b069d9d7f42cb8c7028b5e98bbb12597", 575 + "sha256:3c714d2fc58b5ca3e285461a4cc0c9a66bd0e24c5da9911e30158286c9b5be7f", 576 + "sha256:3d00075aa65772e7ce9e990cab3ff1de702aa09be3940d1dc88d5abf1ab8a09c", 577 + "sha256:3e90baa811a5d73f3ca0bcbf32064d663ed81318ab225ee4f427ad4e26e5aff3", 578 + "sha256:47819cea040f31d670cc8d324bb6435c6f133b8c7a19ec3d61634e62f8d8f9eb", 579 + "sha256:47b099e1f4fbc95b701b6e85768e1fcdaf1630f3cbe4765fa216596f12310e2e", 580 + "sha256:4a9fac8e469d04ce6c25bb2610dc535235bd4aa14996b4e6dbebf5e007eba5ee", 581 + "sha256:4b826973a4a2ae47ba357e4e82fa44a463b8f168e1ca775ac64521442b19e87f", 582 + "sha256:4c2529b320eb9e35af0fa3016c187dffb84a3ecc572bcee7c3ce302bfeba52bf", 583 + "sha256:54479983bd5fb469c38f2f5c7e3a24f9a4e70594cd68cd1fa6b9340dadaff7cf", 584 + "sha256:558d023b3df0bffe50a04e710bc87742de35060580a293c2a984299ed83bc4e4", 585 + "sha256:5756779642579d902eed757b21b0164cd6fe338506a8083eb58af5c372e39d9a", 586 + "sha256:592f1a9fe869c778694f0aa806ba0374e97648ab57936f092fd9d87f8bc03665", 587 + "sha256:595b6c3969023ecf9041b2936ac3827e4623bfa3ccf007575f04c5a6aa318c22", 588 + "sha256:5a939de6b7b4e18ca683218320fc67ea886038265fd1ed30173f5ce3f8e85675", 589 + "sha256:5d54b09eba2bada6011aea5375542a157637b91029687eb4fdb2dab11059c1b4", 590 + "sha256:5df592cd503496351d6dc14f7cdad49f268d8e618f80dce0cd5a36b93c3fc08d", 591 + "sha256:5f4c04ead5aed67c8a1a20491d54cdfba5884507a48dd798ecaf13c74c4489f5", 592 + "sha256:64dee438fed052b52e4f98f76c5790513235efaa1ef7f3f2192c392cd7c91b65", 593 + "sha256:66dd88c918e3287efc22409d426c8f729688d89a0c587c88971a0faa2c2f3792", 594 + "sha256:678999709e68425ae2593acf2e3ebcbcf2e69885a5ee78f9eb80e6e371f1bf57", 595 + "sha256:67f2b6de947f8c757db2db9c71527933ad0019737ec374a8a6be9a956786aaf9", 596 + "sha256:693f0192126df6c2327cce3baa7c06f2a117575e32ab2308f7f8216c29d9e2e3", 597 + "sha256:746ee8dba912cd6fc889a8147168991d50ed70447bf18bcda7039f7d2e3d9151", 598 + "sha256:756c56e867a90fb00177d530dca4b097dd753cde348448a1012ed6c5131f8b7d", 599 + "sha256:76d1f20b1c7a2fa82367e04982e708723ba0e7b8d43aa643d3dcd404d74f1475", 600 + "sha256:7f493881579c90fc262d9cdbaa05a6b54b3811c2f300766748db79f098db9940", 601 + "sha256:823c248b690b2fd9303ba00c4f66cd5e2d8c3ba4aa968b2779be9532a4dad431", 602 + "sha256:82544de02076bafba038ce055ee6412d68da13ab47f0c60cab827346de828dee", 603 + "sha256:8dd8327c795b3e3f219760fa603dcae1dcc148172290a8ab15158cf85a953413", 604 + "sha256:8fdc51055e6ff4adeb88d58a11042ec9a5eae317a0a53d12c062c8a8865909e8", 605 + "sha256:a625e06551975f4b7ea7102bc43895b90742746797e2e14b70ed61c43a90f09b", 606 + "sha256:abdc0c6c8c648b4805c5eacd131910d2a7f6455dfd3becab248ef108e89ab16a", 607 + "sha256:ac017dd64572e5c3bd01939121e4d16cf30e5d7e110a119399cf3133b63ad054", 608 + "sha256:ac1e5c9054fe23226fb11e05a6e630837f074174c4c2f0fe442996112a6de4fb", 609 + "sha256:ac60e3b188ec7574cb761b08d50fcedf9d77f1530352db4eef1707fe9dee7205", 610 + "sha256:b359ed09954d7c18bbc1680f380c7301f92c60bf924171629c5db97febb12f04", 611 + "sha256:b7643a03db5c95c799b89b31c036d5f27eeb4d259c798e878d6937d71832b1e4", 612 + "sha256:ba9e56e8ceeeedb2e080147ba85ffcd5cd0711b89576b83784d8605a7df455fa", 613 + "sha256:c338ffa0520bdb12fbc527265235639fb76e7bc7faafbb93f6ba80d9c06578a9", 614 + "sha256:cad21560da69f4ce7658ca2cb83138fb4cf695a2ba3e475e0559e05991aa8122", 615 + "sha256:d08eb4c2b7d6c41da6ca0600c077e93f5adcfd979cd777d747e9ee624556da4b", 616 + "sha256:d50fd1ee42388dcfb2b3676132c78116490976f1300da28eb629272d5d93e905", 617 + "sha256:d591f8de75824cbb7acad4e05d2d710484f15f29d4a915092675ad3456f11770", 618 + "sha256:d5f6b181bb38171a8ad1d6aa58a67a6aa9d4b38d0f8c5f496b9e42561dfc62fe", 619 + "sha256:d63efaa0cd96cf0c5fe4d581521d9fa87744540d4bc999ae6e08595a1014b45b", 620 + "sha256:d99e5546bf73dbad5bf3547174cd6cb8ba7273062a23808ffea025ecb1cf8562", 621 + "sha256:e09473f095a819042ecb2ab9465aee615bd9c2028e4ef7d933600a8401c79561", 622 + "sha256:e8b56bdcdb4505c8078cb6c7157d9811a85790f2f2b3632c7d1462ab5783d215", 623 + "sha256:ee443ef070bb3b6ed74514f5efaa37a252af57c90eb33b956d35c8e9c10a1931", 624 + "sha256:f29d80eb9a9263b8d109135351caf568cc3f80b9928bccde535c235de55c22d9", 625 + "sha256:f7a866fbc1e97b5c617ee4116daaa09b722101d4a3c170c787450ba409f9736f", 626 + "sha256:fcd5cf9e305d7b8338754470cf69cf81f420459dbae8a3b40cee57417f4614a7" 627 + ], 628 + "markers": "python_version >= '3.9'", 629 + "version": "==15.0.1" 630 + } 631 + }, 632 + "develop": {} 633 + }
+55 -70
README.md
··· 1 - # Mothball GraphQL Server 2 - 3 - A simple GraphQL server for the Mothball application, built with Rust, Actix Web, and Juniper. 1 + # ATProto <=> GraphQL Bridge 4 2 5 - ## Features 3 + A bridge between ATProto (server-side) and GraphQL (client-side) for developing efficient UIs for the ATmosphere. 6 4 7 - - GraphQL API endpoint at `/graphql` 8 - - Interactive GraphiQL interface for development 9 - - Health check endpoint at `/health` 10 - - Environment-based configuration 11 - - Ready for deployment to Fly.io 5 + **Installation:** 12 6 13 - ## Installation 7 + ``` 8 + git submodule update --init --recursive 9 + pipenv install 10 + ``` 14 11 15 - ### Prerequisites 12 + ## Schema Generation 16 13 17 - - Rust (latest stable version) 18 - - Cargo 19 - - Fly.io CLI (for deployment) 14 + The `schema/` folder contains scripts to generate a GraphQL schema from Lexicon. Standard ATProto definitions are initialized in the `deps/atproto` folder. 20 15 21 - ### Building 16 + Example usage: 22 17 23 - ```bash 24 - cd mothball-server 25 - cargo build --release 18 + ``` 19 + pipenv run python schema/generate_lexicon_schema.py \ 20 + app.bsky.actor.getProfile \ 21 + com.atproto.server.getSession \ 22 + -o schema/schema-generated.graphql 26 23 ``` 27 24 28 - ### Running Locally 29 - 30 - ```bash 31 - # Copy the example environment file 32 - cp .env.example .env 25 + This will generate schema definitions for the `getProfile` and `getSession` procedures and recursively import all their referenced types, e.g. 33 26 34 - # Run the server 35 - cargo run 36 27 ``` 28 + type Lexicon_app_bsky_actor { 29 + getProfile(actor: ID!): Lexicon_app_bsky_actor_defs_profileViewDetailed 30 + } 37 31 38 - The server will start on `http://localhost:8080` by default. 39 - 40 - ## Development 32 + # app.bsky.actor.defs#profileViewDetailed 33 + type Lexicon_app_bsky_actor_defs_profileViewDetailed { 34 + did: ID! 35 + handle: ID! 36 + displayName: String 37 + description: String 38 + pronouns: String 39 + website: String 40 + avatar: String 41 + banner: String 42 + followersCount: Int 43 + followsCount: Int 44 + postsCount: Int 45 + associated: Lexicon_app_bsky_actor_defs_profileAssociated 46 + joinedViaStarterPack: Lexicon_app_bsky_graph_defs_starterPackViewBasic 47 + indexedAt: String 48 + createdAt: String 49 + viewer: Lexicon_app_bsky_actor_defs_viewerState 50 + labels: [Lexicon_com_atproto_label_defs_label!] 51 + pinnedPost: Lexicon_com_atproto_repo_strongRef 52 + verification: Lexicon_app_bsky_actor_defs_verificationState 53 + status: Lexicon_app_bsky_actor_defs_statusView 54 + } 41 55 42 - ### GraphQL Schema 56 + # ... 57 + ``` 43 58 44 - The server provides basic queries: 45 - - `hello`: Returns a greeting message 46 - - `health`: Returns server health status 47 59 48 - ### Extending the Schema 60 + ## Example GraphQL Server 49 61 50 - To add new GraphQL types and queries: 51 - 1. Add new types to the `Query` struct in `src/main.rs` 52 - 2. Use the `#[juniper::graphql_object]` attribute 53 - 3. Add async functions for each query/mutation 54 - 55 - ## Deployment to Fly.io 56 - 57 - ### Prerequisites 58 - - Fly.io account 59 - - Fly.io CLI installed 60 - 61 - ### Deployment Steps 62 - 63 - 1. **Install Fly.io CLI** (if not already installed): 64 - ```bash 65 - curl -L https://fly.io/install.sh | sh 66 - ``` 62 + This repo also contains a Rust GraphQL server that can bridge an exported schema to the AT protocol. You can use this as a reference or even expand it to include non-AT GraphQL types. 67 63 68 - 2. **Login to Fly.io**: 69 - ```bash 70 - fly auth login 71 - ``` 64 + - GraphQL API endpoint at `/graphql` 65 + - Interactive GraphiQL interface for development 72 66 73 - 3. **Create a new Fly.io app**: 74 - ```bash 75 - fly launch 76 - ``` 67 + ### Building 77 68 78 - 4. **Set up PostgreSQL (if needed)**: 79 - ```bash 80 - fly postgres create 81 - ``` 69 + ```bash 70 + cd server 71 + cargo run --release 72 + ``` 82 73 83 - 5. **Deploy**: 84 - ```bash 85 - fly deploy 86 - ``` 74 + The server will start on `http://localhost:8080` by default. 87 75 88 76 ### Environment Configuration 89 77 90 78 Copy `.env.example` to `.env` and configure as needed for your deployment. 91 - 92 - ## Configuration 93 79 94 80 | Variable | Default | Description | 95 81 |----------|---------|-------------| 96 82 | `HOST` | `0.0.0.0` | Host to bind the server to | 97 83 | `PORT` | `8080` | Port to listen on | 98 - | `DATABASE_URL` | (none) | Database connection string | 99 84 100 85 ## License 101 86 102 - MIT 87 + MIT
-16
schema/copy_to_json.py
··· 1 - import json 2 - import os 3 - 4 - # Get the absolute path of the script's directory 5 - script_dir = os.path.dirname(os.path.abspath(__file__)) 6 - 7 - # Load the GraphQL schema from file 8 - with open(os.path.join(script_dir, "schema-generated.graphql"), "r") as graphql_file: 9 - graphql_schema = graphql_file.read() 10 - 11 - # Encode the GraphQL schema as JSON 12 - graphql_json = json.dumps(graphql_schema) 13 - 14 - # Save the JSON-encoded schema to a new file 15 - with open(os.path.join(script_dir, "schema-generated.graphql.json"), "w") as json_file: 16 - _ = json_file.write(graphql_json)
+8 -8
schema/generate_lexicon_schema.py
··· 424 424 help="List of lexicon identifiers to generate definitions for", 425 425 ), 426 426 ], 427 - append_schema: Annotated[ 428 - list[str], 429 - Option( 430 - "--append-schema", 431 - "-a", 432 - help="Additional GraphQL schema files or folders to append. Can be used multiple times.", 433 - ), 434 - ], 435 427 output: Annotated[ 436 428 str, 437 429 Option( ··· 440 432 help="Output file path (default: stdout)", 441 433 ), 442 434 ], 435 + append_schema: Annotated[ 436 + list[str] | None, 437 + Option( 438 + "--append-schema", 439 + "-a", 440 + help="Additional GraphQL schema files or folders to append. Can be used multiple times.", 441 + ), 442 + ] = None, 443 443 ) -> None: 444 444 """Generate GraphQL schema from lexicon_ids and source files.""" 445 445
-402
schema/schema-generated.graphql
··· 1 - 2 - type AuthSession { 3 - did: String! 4 - } 5 - 6 - type AuthStatus { 7 - success: Boolean! 8 - session: AuthSession 9 - } 10 - 11 - type InventoryItem { 12 - id: ID! 13 - title: String! 14 - cost: String! 15 - images: [String!]! 16 - description: String! 17 - location: String 18 - condition: String 19 - category: String 20 - postedAt: String 21 - owner: ID! 22 - owner_profile: Lexicon_app_bsky_actor_defs_profileViewDetailed 23 - } 24 - 25 - type PageInfo { 26 - hasNextPage: Boolean! 27 - hasPreviousPage: Boolean! 28 - startCursor: String 29 - endCursor: String 30 - } 31 - 32 - type InventoryEdge { 33 - cursor: String! 34 - node: InventoryItem! 35 - } 36 - 37 - type InventoryConnection { 38 - edges: [InventoryEdge!]! 39 - pageInfo: PageInfo! 40 - } 41 - 42 - enum Sender { 43 - them 44 - me 45 - } 46 - 47 - type Message { 48 - id: ID! 49 - sender: Sender! 50 - text: String! 51 - time: String! 52 - } 53 - 54 - type Chat { 55 - id: ID! 56 - unread: Boolean! 57 - sender: String! 58 - avatar: String 59 - messages: [Message!]! 60 - } 61 - 62 - ############# 63 - # Notifications 64 - ############# 65 - 66 - type Notification { 67 - id: ID! 68 - title: String! 69 - message: String! 70 - time: String! 71 - read: Boolean! 72 - } 73 - 74 - ############# 75 - # Root object 76 - ############# 77 - 78 - type Query { 79 - inventory( 80 - first: Int 81 - after: String 82 - last: Int 83 - before: String 84 - category: String 85 - location: String 86 - condition: String 87 - search: String 88 - minPrice: Float 89 - maxPrice: Float 90 - ): InventoryConnection! 91 - notifications: [Notification!]! 92 - chats: [Chat!]! 93 - user_notification_settings: UserNotificationSettings! 94 - lexicon: Lexicon! 95 - } 96 - 97 - type SessionDestroyResult { 98 - success: Boolean! 99 - } 100 - 101 - type Mutation { 102 - session_retrieve: AuthSession 103 - session_destroy: SessionDestroyResult 104 - update_user_notification_settings( 105 - enableAll: Boolean 106 - listingUpdates: Boolean 107 - userRequests: Boolean 108 - messages: Boolean 109 - promotions: Boolean 110 - news: Boolean 111 - ): UserNotificationSettings! 112 - create_inventory( 113 - title: String! 114 - cost: String! 115 - description: String! 116 - location: String 117 - condition: String 118 - category: String 119 - images: [String!]! 120 - ): CreateInventoryResult! 121 - authenticate(code: String!, state: String!, iss: String!, redirect_uri: String!): AuthStatus 122 - trigger_session_deleted(did: String!): SessionDeletedTriggerResult! 123 - } 124 - 125 - type SessionDeletedTriggerResult { 126 - success: Boolean! 127 - message: String! 128 - } 129 - 130 - type CreateInventoryResult { 131 - edge: InventoryEdge 132 - } 133 - 134 - type UserNotificationSettings { 135 - id: ID! 136 - enableAll: Boolean! 137 - listingUpdates: Boolean! 138 - userRequests: Boolean! 139 - messages: Boolean! 140 - promotions: Boolean! 141 - news: Boolean! 142 - } 143 - 144 - type SessionDeletedPayload { 145 - did: String! 146 - } 147 - 148 - type Subscription { 149 - session_deleted: SessionDeletedPayload! 150 - } 151 - 152 - ############# 153 - # ATProto Lexicon 154 - ############# 155 - 156 - # app.bsky.actor.defs#profileViewDetailed 157 - type Lexicon_app_bsky_actor_defs_profileViewDetailed { 158 - did: ID! 159 - handle: ID! 160 - displayName: String 161 - description: String 162 - pronouns: String 163 - website: String 164 - avatar: String 165 - banner: String 166 - followersCount: Int 167 - followsCount: Int 168 - postsCount: Int 169 - associated: Lexicon_app_bsky_actor_defs_profileAssociated 170 - joinedViaStarterPack: Lexicon_app_bsky_graph_defs_starterPackViewBasic 171 - indexedAt: String 172 - createdAt: String 173 - viewer: Lexicon_app_bsky_actor_defs_viewerState 174 - labels: [Lexicon_com_atproto_label_defs_label!] 175 - pinnedPost: Lexicon_com_atproto_repo_strongRef 176 - verification: Lexicon_app_bsky_actor_defs_verificationState 177 - status: Lexicon_app_bsky_actor_defs_statusView 178 - } 179 - 180 - 181 - 182 - # com.atproto.server.getSessionOutput 183 - type Lexicon_com_atproto_server_getSessionOutput { 184 - handle: ID! 185 - did: ID! 186 - email: String 187 - emailConfirmed: Boolean 188 - emailAuthFactor: Boolean 189 - active: Boolean 190 - status: String 191 - } 192 - 193 - 194 - 195 - # app.bsky.actor.defs#profileAssociated 196 - type Lexicon_app_bsky_actor_defs_profileAssociated { 197 - lists: Int 198 - feedgens: Int 199 - starterPacks: Int 200 - labeler: Boolean 201 - chat: Lexicon_app_bsky_actor_defs_profileAssociatedChat 202 - activitySubscription: Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription 203 - } 204 - 205 - 206 - 207 - # app.bsky.graph.defs#starterPackViewBasic 208 - type Lexicon_app_bsky_graph_defs_starterPackViewBasic { 209 - uri: String! 210 - cid: String! 211 - creator: Lexicon_app_bsky_actor_defs_profileViewBasic! 212 - listItemCount: Int 213 - joinedWeekCount: Int 214 - joinedAllTimeCount: Int 215 - labels: [Lexicon_com_atproto_label_defs_label!] 216 - indexedAt: String! 217 - } 218 - 219 - 220 - 221 - # app.bsky.actor.defs#viewerState 222 - type Lexicon_app_bsky_actor_defs_viewerState { 223 - muted: Boolean 224 - mutedByList: Lexicon_app_bsky_graph_defs_listViewBasic 225 - blockedBy: Boolean 226 - blocking: String 227 - blockingByList: Lexicon_app_bsky_graph_defs_listViewBasic 228 - following: String 229 - followedBy: String 230 - knownFollowers: Lexicon_app_bsky_actor_defs_knownFollowers 231 - activitySubscription: Lexicon_app_bsky_notification_defs_activitySubscription 232 - } 233 - 234 - 235 - 236 - # com.atproto.label.defs#label 237 - type Lexicon_com_atproto_label_defs_label { 238 - ver: Int 239 - src: ID! 240 - uri: String! 241 - cid: String 242 - val: String! 243 - neg: Boolean 244 - cts: String! 245 - exp: String 246 - sig: String 247 - } 248 - 249 - 250 - 251 - # com.atproto.repo.strongRef 252 - type Lexicon_com_atproto_repo_strongRef { 253 - uri: String! 254 - cid: String! 255 - } 256 - 257 - 258 - 259 - # app.bsky.actor.defs#verificationState 260 - type Lexicon_app_bsky_actor_defs_verificationState { 261 - verifications: [Lexicon_app_bsky_actor_defs_verificationView!]! 262 - verifiedStatus: String! 263 - trustedVerifierStatus: String! 264 - } 265 - 266 - 267 - 268 - # app.bsky.actor.defs#statusView 269 - type Lexicon_app_bsky_actor_defs_statusView { 270 - uri: String 271 - cid: String 272 - status: String! 273 - expiresAt: String 274 - isActive: Boolean 275 - isDisabled: Boolean 276 - } 277 - 278 - 279 - 280 - # app.bsky.actor.defs#profileAssociatedChat 281 - type Lexicon_app_bsky_actor_defs_profileAssociatedChat { 282 - allowIncoming: String! 283 - } 284 - 285 - 286 - 287 - # app.bsky.actor.defs#profileAssociatedActivitySubscription 288 - type Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription { 289 - allowSubscriptions: String! 290 - } 291 - 292 - 293 - 294 - # app.bsky.actor.defs#profileViewBasic 295 - type Lexicon_app_bsky_actor_defs_profileViewBasic { 296 - did: ID! 297 - handle: ID! 298 - displayName: String 299 - pronouns: String 300 - avatar: String 301 - associated: Lexicon_app_bsky_actor_defs_profileAssociated 302 - viewer: Lexicon_app_bsky_actor_defs_viewerState 303 - labels: [Lexicon_com_atproto_label_defs_label!] 304 - createdAt: String 305 - verification: Lexicon_app_bsky_actor_defs_verificationState 306 - status: Lexicon_app_bsky_actor_defs_statusView 307 - } 308 - 309 - 310 - 311 - # app.bsky.graph.defs#listViewBasic 312 - type Lexicon_app_bsky_graph_defs_listViewBasic { 313 - uri: String! 314 - cid: String! 315 - name: String! 316 - purpose: Lexicon_app_bsky_graph_defs_listPurpose! 317 - avatar: String 318 - listItemCount: Int 319 - labels: [Lexicon_com_atproto_label_defs_label!] 320 - viewer: Lexicon_app_bsky_graph_defs_listViewerState 321 - indexedAt: String 322 - } 323 - 324 - 325 - 326 - # app.bsky.actor.defs#knownFollowers 327 - type Lexicon_app_bsky_actor_defs_knownFollowers { 328 - count: Int! 329 - followers: [Lexicon_app_bsky_actor_defs_profileViewBasic!]! 330 - } 331 - 332 - 333 - 334 - # app.bsky.notification.defs#activitySubscription 335 - type Lexicon_app_bsky_notification_defs_activitySubscription { 336 - post: Boolean! 337 - reply: Boolean! 338 - } 339 - 340 - 341 - 342 - # app.bsky.actor.defs#verificationView 343 - type Lexicon_app_bsky_actor_defs_verificationView { 344 - issuer: ID! 345 - uri: String! 346 - isValid: Boolean! 347 - createdAt: String! 348 - } 349 - 350 - 351 - 352 - # app.bsky.graph.defs#listPurpose 353 - enum Lexicon_app_bsky_graph_defs_listPurpose { 354 - APP_BSKY_GRAPH_DEFS_MODLIST 355 - APP_BSKY_GRAPH_DEFS_CURATELIST 356 - APP_BSKY_GRAPH_DEFS_REFERENCELIST 357 - } 358 - 359 - 360 - 361 - # app.bsky.graph.defs#listViewerState 362 - type Lexicon_app_bsky_graph_defs_listViewerState { 363 - muted: Boolean 364 - blocked: String 365 - } 366 - 367 - 368 - 369 - type Lexicon_app_bsky_actor { 370 - getProfile(actor: ID!): Lexicon_app_bsky_actor_defs_profileViewDetailed 371 - } 372 - 373 - 374 - type Lexicon_app_bsky { 375 - actor: Lexicon_app_bsky_actor! 376 - } 377 - 378 - 379 - type Lexicon_app { 380 - bsky: Lexicon_app_bsky! 381 - } 382 - 383 - 384 - type Lexicon_com_atproto_server { 385 - getSession: Lexicon_com_atproto_server_getSessionOutput 386 - } 387 - 388 - 389 - type Lexicon_com_atproto { 390 - server: Lexicon_com_atproto_server! 391 - } 392 - 393 - 394 - type Lexicon_com { 395 - atproto: Lexicon_com_atproto! 396 - } 397 - 398 - 399 - type Lexicon { 400 - app: Lexicon_app! 401 - com: Lexicon_com! 402 - }
-1
schema/schema-generated.graphql.json
··· 1 - "\ntype AuthSession {\n did: String!\n}\n\ntype AuthStatus {\n success: Boolean!\n session: AuthSession\n}\n\ntype InventoryItem {\n id: ID!\n title: String!\n cost: String!\n images: [String!]!\n description: String!\n location: String\n condition: String\n category: String\n postedAt: String\n owner: ID!\n owner_profile: Lexicon_app_bsky_actor_defs_profileViewDetailed\n}\n\ntype PageInfo {\n hasNextPage: Boolean!\n hasPreviousPage: Boolean!\n startCursor: String\n endCursor: String\n}\n\ntype InventoryEdge {\n cursor: String!\n node: InventoryItem!\n}\n\ntype InventoryConnection {\n edges: [InventoryEdge!]!\n pageInfo: PageInfo!\n}\n\nenum Sender {\n them\n me\n}\n\ntype Message {\n id: ID!\n sender: Sender!\n text: String!\n time: String!\n}\n\ntype Chat {\n id: ID!\n unread: Boolean!\n sender: String!\n avatar: String\n messages: [Message!]!\n}\n\n#############\n# Notifications\n#############\n\ntype Notification {\n id: ID!\n title: String!\n message: String!\n time: String!\n read: Boolean!\n}\n\n#############\n# Root object\n#############\n\ntype Query {\n inventory(\n first: Int\n after: String\n last: Int\n before: String\n category: String\n location: String\n condition: String\n search: String\n minPrice: Float\n maxPrice: Float\n ): InventoryConnection!\n notifications: [Notification!]!\n chats: [Chat!]!\n user_notification_settings: UserNotificationSettings!\n lexicon: Lexicon!\n}\n\ntype SessionDestroyResult {\n success: Boolean!\n}\n\ntype Mutation {\n session_retrieve: AuthSession\n session_destroy: SessionDestroyResult\n update_user_notification_settings(\n enableAll: Boolean\n listingUpdates: Boolean\n userRequests: Boolean\n messages: Boolean\n promotions: Boolean\n news: Boolean\n ): UserNotificationSettings!\n create_inventory(\n title: String!\n cost: String!\n description: String!\n location: String\n condition: String\n category: String\n images: [String!]!\n ): CreateInventoryResult!\n authenticate(code: String!, state: String!, iss: String!, redirect_uri: String!): AuthStatus\n trigger_session_deleted(did: String!): SessionDeletedTriggerResult!\n}\n\ntype SessionDeletedTriggerResult {\n success: Boolean!\n message: String!\n}\n\ntype CreateInventoryResult {\n edge: InventoryEdge\n}\n\ntype UserNotificationSettings {\n id: ID!\n enableAll: Boolean!\n listingUpdates: Boolean!\n userRequests: Boolean!\n messages: Boolean!\n promotions: Boolean!\n news: Boolean!\n}\n\ntype SessionDeletedPayload {\n did: String!\n}\n\ntype Subscription {\n session_deleted: SessionDeletedPayload!\n}\n\n#############\n# ATProto Lexicon\n#############\n\n# app.bsky.actor.defs#profileViewDetailed\ntype Lexicon_app_bsky_actor_defs_profileViewDetailed {\n did: ID!\n handle: ID!\n displayName: String\n description: String\n pronouns: String\n website: String\n avatar: String\n banner: String\n followersCount: Int\n followsCount: Int\n postsCount: Int\n associated: Lexicon_app_bsky_actor_defs_profileAssociated\n joinedViaStarterPack: Lexicon_app_bsky_graph_defs_starterPackViewBasic\n indexedAt: String\n createdAt: String\n viewer: Lexicon_app_bsky_actor_defs_viewerState\n labels: [Lexicon_com_atproto_label_defs_label!]\n pinnedPost: Lexicon_com_atproto_repo_strongRef\n verification: Lexicon_app_bsky_actor_defs_verificationState\n status: Lexicon_app_bsky_actor_defs_statusView\n}\n\n\n\n# com.atproto.server.getSessionOutput\ntype Lexicon_com_atproto_server_getSessionOutput {\n handle: ID!\n did: ID!\n email: String\n emailConfirmed: Boolean\n emailAuthFactor: Boolean\n active: Boolean\n status: String\n}\n\n\n\n# app.bsky.actor.defs#profileAssociated\ntype Lexicon_app_bsky_actor_defs_profileAssociated {\n lists: Int\n feedgens: Int\n starterPacks: Int\n labeler: Boolean\n chat: Lexicon_app_bsky_actor_defs_profileAssociatedChat\n activitySubscription: Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription\n}\n\n\n\n# app.bsky.graph.defs#starterPackViewBasic\ntype Lexicon_app_bsky_graph_defs_starterPackViewBasic {\n uri: String!\n cid: String!\n creator: Lexicon_app_bsky_actor_defs_profileViewBasic!\n listItemCount: Int\n joinedWeekCount: Int\n joinedAllTimeCount: Int\n labels: [Lexicon_com_atproto_label_defs_label!]\n indexedAt: String!\n}\n\n\n\n# app.bsky.actor.defs#viewerState\ntype Lexicon_app_bsky_actor_defs_viewerState {\n muted: Boolean\n mutedByList: Lexicon_app_bsky_graph_defs_listViewBasic\n blockedBy: Boolean\n blocking: String\n blockingByList: Lexicon_app_bsky_graph_defs_listViewBasic\n following: String\n followedBy: String\n knownFollowers: Lexicon_app_bsky_actor_defs_knownFollowers\n activitySubscription: Lexicon_app_bsky_notification_defs_activitySubscription\n}\n\n\n\n# com.atproto.label.defs#label\ntype Lexicon_com_atproto_label_defs_label {\n ver: Int\n src: ID!\n uri: String!\n cid: String\n val: String!\n neg: Boolean\n cts: String!\n exp: String\n sig: String\n}\n\n\n\n# com.atproto.repo.strongRef\ntype Lexicon_com_atproto_repo_strongRef {\n uri: String!\n cid: String!\n}\n\n\n\n# app.bsky.actor.defs#verificationState\ntype Lexicon_app_bsky_actor_defs_verificationState {\n verifications: [Lexicon_app_bsky_actor_defs_verificationView!]!\n verifiedStatus: String!\n trustedVerifierStatus: String!\n}\n\n\n\n# app.bsky.actor.defs#statusView\ntype Lexicon_app_bsky_actor_defs_statusView {\n uri: String\n cid: String\n status: String!\n expiresAt: String\n isActive: Boolean\n isDisabled: Boolean\n}\n\n\n\n# app.bsky.actor.defs#profileAssociatedChat\ntype Lexicon_app_bsky_actor_defs_profileAssociatedChat {\n allowIncoming: String!\n}\n\n\n\n# app.bsky.actor.defs#profileAssociatedActivitySubscription\ntype Lexicon_app_bsky_actor_defs_profileAssociatedActivitySubscription {\n allowSubscriptions: String!\n}\n\n\n\n# app.bsky.actor.defs#profileViewBasic\ntype Lexicon_app_bsky_actor_defs_profileViewBasic {\n did: ID!\n handle: ID!\n displayName: String\n pronouns: String\n avatar: String\n associated: Lexicon_app_bsky_actor_defs_profileAssociated\n viewer: Lexicon_app_bsky_actor_defs_viewerState\n labels: [Lexicon_com_atproto_label_defs_label!]\n createdAt: String\n verification: Lexicon_app_bsky_actor_defs_verificationState\n status: Lexicon_app_bsky_actor_defs_statusView\n}\n\n\n\n# app.bsky.graph.defs#listViewBasic\ntype Lexicon_app_bsky_graph_defs_listViewBasic {\n uri: String!\n cid: String!\n name: String!\n purpose: Lexicon_app_bsky_graph_defs_listPurpose!\n avatar: String\n listItemCount: Int\n labels: [Lexicon_com_atproto_label_defs_label!]\n viewer: Lexicon_app_bsky_graph_defs_listViewerState\n indexedAt: String\n}\n\n\n\n# app.bsky.actor.defs#knownFollowers\ntype Lexicon_app_bsky_actor_defs_knownFollowers {\n count: Int!\n followers: [Lexicon_app_bsky_actor_defs_profileViewBasic!]!\n}\n\n\n\n# app.bsky.notification.defs#activitySubscription\ntype Lexicon_app_bsky_notification_defs_activitySubscription {\n post: Boolean!\n reply: Boolean!\n}\n\n\n\n# app.bsky.actor.defs#verificationView\ntype Lexicon_app_bsky_actor_defs_verificationView {\n issuer: ID!\n uri: String!\n isValid: Boolean!\n createdAt: String!\n}\n\n\n\n# app.bsky.graph.defs#listPurpose\nenum Lexicon_app_bsky_graph_defs_listPurpose {\n APP_BSKY_GRAPH_DEFS_MODLIST\n APP_BSKY_GRAPH_DEFS_CURATELIST\n APP_BSKY_GRAPH_DEFS_REFERENCELIST\n}\n\n\n\n# app.bsky.graph.defs#listViewerState\ntype Lexicon_app_bsky_graph_defs_listViewerState {\n muted: Boolean\n blocked: String\n}\n\n\n\ntype Lexicon_app_bsky_actor {\n getProfile(actor: ID!): Lexicon_app_bsky_actor_defs_profileViewDetailed\n}\n\n\ntype Lexicon_app_bsky {\n actor: Lexicon_app_bsky_actor!\n}\n\n\ntype Lexicon_app {\n bsky: Lexicon_app_bsky!\n}\n\n\ntype Lexicon_com_atproto_server {\n getSession: Lexicon_com_atproto_server_getSessionOutput\n}\n\n\ntype Lexicon_com_atproto {\n server: Lexicon_com_atproto_server!\n}\n\n\ntype Lexicon_com {\n atproto: Lexicon_com_atproto!\n}\n\n\ntype Lexicon {\n app: Lexicon_app!\n com: Lexicon_com!\n}\n"
-153
schema/sources/types.graphql
··· 1 - type AuthSession { 2 - did: String! 3 - } 4 - 5 - type AuthStatus { 6 - success: Boolean! 7 - session: AuthSession 8 - } 9 - 10 - type InventoryItem { 11 - id: ID! 12 - title: String! 13 - cost: String! 14 - images: [String!]! 15 - description: String! 16 - location: String 17 - condition: String 18 - category: String 19 - postedAt: String 20 - owner: ID! 21 - owner_profile: Lexicon_app_bsky_actor_defs_profileViewDetailed 22 - } 23 - 24 - type PageInfo { 25 - hasNextPage: Boolean! 26 - hasPreviousPage: Boolean! 27 - startCursor: String 28 - endCursor: String 29 - } 30 - 31 - type InventoryEdge { 32 - cursor: String! 33 - node: InventoryItem! 34 - } 35 - 36 - type InventoryConnection { 37 - edges: [InventoryEdge!]! 38 - pageInfo: PageInfo! 39 - } 40 - 41 - enum Sender { 42 - them 43 - me 44 - } 45 - 46 - type Message { 47 - id: ID! 48 - sender: Sender! 49 - text: String! 50 - time: String! 51 - } 52 - 53 - type Chat { 54 - id: ID! 55 - unread: Boolean! 56 - sender: String! 57 - avatar: String 58 - messages: [Message!]! 59 - } 60 - 61 - ############# 62 - # Notifications 63 - ############# 64 - 65 - type Notification { 66 - id: ID! 67 - title: String! 68 - message: String! 69 - time: String! 70 - read: Boolean! 71 - } 72 - 73 - ############# 74 - # Root object 75 - ############# 76 - 77 - type Query { 78 - inventory( 79 - first: Int 80 - after: String 81 - last: Int 82 - before: String 83 - category: String 84 - location: String 85 - condition: String 86 - search: String 87 - minPrice: Float 88 - maxPrice: Float 89 - ): InventoryConnection! 90 - notifications: [Notification!]! 91 - chats: [Chat!]! 92 - user_notification_settings: UserNotificationSettings! 93 - lexicon: Lexicon! 94 - } 95 - 96 - type SessionDestroyResult { 97 - success: Boolean! 98 - } 99 - 100 - type Mutation { 101 - session_retrieve: AuthSession 102 - session_destroy: SessionDestroyResult 103 - update_user_notification_settings( 104 - enableAll: Boolean 105 - listingUpdates: Boolean 106 - userRequests: Boolean 107 - messages: Boolean 108 - promotions: Boolean 109 - news: Boolean 110 - ): UserNotificationSettings! 111 - create_inventory( 112 - title: String! 113 - cost: String! 114 - description: String! 115 - location: String 116 - condition: String 117 - category: String 118 - images: [String!]! 119 - ): CreateInventoryResult! 120 - authenticate(code: String!, state: String!, iss: String!, redirect_uri: String!): AuthStatus 121 - trigger_session_deleted(did: String!): SessionDeletedTriggerResult! 122 - } 123 - 124 - type SessionDeletedTriggerResult { 125 - success: Boolean! 126 - message: String! 127 - } 128 - 129 - type CreateInventoryResult { 130 - edge: InventoryEdge 131 - } 132 - 133 - type UserNotificationSettings { 134 - id: ID! 135 - enableAll: Boolean! 136 - listingUpdates: Boolean! 137 - userRequests: Boolean! 138 - messages: Boolean! 139 - promotions: Boolean! 140 - news: Boolean! 141 - } 142 - 143 - type SessionDeletedPayload { 144 - did: String! 145 - } 146 - 147 - type Subscription { 148 - session_deleted: SessionDeletedPayload! 149 - } 150 - 151 - ############# 152 - # ATProto Lexicon 153 - #############