├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── Dockerfile ├── README.txt ├── src └── main.rs ├── templates └── index.jinja └── tests └── node ├── .gitignore ├── README.md ├── bun.lockb ├── index.ts ├── package.json └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | .DS_Store 3 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "actix-codec" 7 | version = "0.5.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" 10 | dependencies = [ 11 | "bitflags", 12 | "bytes", 13 | "futures-core", 14 | "futures-sink", 15 | "memchr", 16 | "pin-project-lite", 17 | "tokio", 18 | "tokio-util", 19 | "tracing", 20 | ] 21 | 22 | [[package]] 23 | name = "actix-cors" 24 | version = "0.7.0" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "f9e772b3bcafe335042b5db010ab7c09013dad6eac4915c91d8d50902769f331" 27 | dependencies = [ 28 | "actix-utils", 29 | "actix-web", 30 | "derive_more", 31 | "futures-util", 32 | "log", 33 | "once_cell", 34 | "smallvec", 35 | ] 36 | 37 | [[package]] 38 | name = "actix-files" 39 | version = "0.6.6" 40 | source = "registry+https://github.com/rust-lang/crates.io-index" 41 | checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be" 42 | dependencies = [ 43 | "actix-http", 44 | "actix-service", 45 | "actix-utils", 46 | "actix-web", 47 | "bitflags", 48 | "bytes", 49 | "derive_more", 50 | "futures-core", 51 | "http-range", 52 | "log", 53 | "mime", 54 | "mime_guess", 55 | "percent-encoding", 56 | "pin-project-lite", 57 | "v_htmlescape", 58 | ] 59 | 60 | [[package]] 61 | name = "actix-http" 62 | version = "3.9.0" 63 | source = "registry+https://github.com/rust-lang/crates.io-index" 64 | checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" 65 | dependencies = [ 66 | "actix-codec", 67 | "actix-rt", 68 | "actix-service", 69 | "actix-utils", 70 | "ahash", 71 | "base64", 72 | "bitflags", 73 | "brotli", 74 | "bytes", 75 | "bytestring", 76 | "derive_more", 77 | "encoding_rs", 78 | "flate2", 79 | "futures-core", 80 | "h2", 81 | "http 0.2.12", 82 | "httparse", 83 | "httpdate", 84 | "itoa", 85 | "language-tags", 86 | "local-channel", 87 | "mime", 88 | "percent-encoding", 89 | "pin-project-lite", 90 | "rand", 91 | "sha1", 92 | "smallvec", 93 | "tokio", 94 | "tokio-util", 95 | "tracing", 96 | "zstd", 97 | ] 98 | 99 | [[package]] 100 | name = "actix-macros" 101 | version = "0.2.4" 102 | source = "registry+https://github.com/rust-lang/crates.io-index" 103 | checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" 104 | dependencies = [ 105 | "quote", 106 | "syn", 107 | ] 108 | 109 | [[package]] 110 | name = "actix-router" 111 | version = "0.5.3" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" 114 | dependencies = [ 115 | "bytestring", 116 | "cfg-if", 117 | "http 0.2.12", 118 | "regex", 119 | "regex-lite", 120 | "serde", 121 | "tracing", 122 | ] 123 | 124 | [[package]] 125 | name = "actix-rt" 126 | version = "2.10.0" 127 | source = "registry+https://github.com/rust-lang/crates.io-index" 128 | checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" 129 | dependencies = [ 130 | "futures-core", 131 | "tokio", 132 | ] 133 | 134 | [[package]] 135 | name = "actix-server" 136 | version = "2.5.0" 137 | source = "registry+https://github.com/rust-lang/crates.io-index" 138 | checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" 139 | dependencies = [ 140 | "actix-rt", 141 | "actix-service", 142 | "actix-utils", 143 | "futures-core", 144 | "futures-util", 145 | "mio", 146 | "socket2", 147 | "tokio", 148 | "tracing", 149 | ] 150 | 151 | [[package]] 152 | name = "actix-service" 153 | version = "2.0.2" 154 | source = "registry+https://github.com/rust-lang/crates.io-index" 155 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" 156 | dependencies = [ 157 | "futures-core", 158 | "paste", 159 | "pin-project-lite", 160 | ] 161 | 162 | [[package]] 163 | name = "actix-utils" 164 | version = "3.0.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" 167 | dependencies = [ 168 | "local-waker", 169 | "pin-project-lite", 170 | ] 171 | 172 | [[package]] 173 | name = "actix-web" 174 | version = "4.9.0" 175 | source = "registry+https://github.com/rust-lang/crates.io-index" 176 | checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" 177 | dependencies = [ 178 | "actix-codec", 179 | "actix-http", 180 | "actix-macros", 181 | "actix-router", 182 | "actix-rt", 183 | "actix-server", 184 | "actix-service", 185 | "actix-utils", 186 | "actix-web-codegen", 187 | "ahash", 188 | "bytes", 189 | "bytestring", 190 | "cfg-if", 191 | "cookie", 192 | "derive_more", 193 | "encoding_rs", 194 | "futures-core", 195 | "futures-util", 196 | "impl-more", 197 | "itoa", 198 | "language-tags", 199 | "log", 200 | "mime", 201 | "once_cell", 202 | "pin-project-lite", 203 | "regex", 204 | "regex-lite", 205 | "serde", 206 | "serde_json", 207 | "serde_urlencoded", 208 | "smallvec", 209 | "socket2", 210 | "time", 211 | "url", 212 | ] 213 | 214 | [[package]] 215 | name = "actix-web-codegen" 216 | version = "4.3.0" 217 | source = "registry+https://github.com/rust-lang/crates.io-index" 218 | checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" 219 | dependencies = [ 220 | "actix-router", 221 | "proc-macro2", 222 | "quote", 223 | "syn", 224 | ] 225 | 226 | [[package]] 227 | name = "addr2line" 228 | version = "0.24.2" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 231 | dependencies = [ 232 | "gimli", 233 | ] 234 | 235 | [[package]] 236 | name = "adler2" 237 | version = "2.0.0" 238 | source = "registry+https://github.com/rust-lang/crates.io-index" 239 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 240 | 241 | [[package]] 242 | name = "ahash" 243 | version = "0.8.11" 244 | source = "registry+https://github.com/rust-lang/crates.io-index" 245 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 246 | dependencies = [ 247 | "cfg-if", 248 | "getrandom", 249 | "once_cell", 250 | "version_check", 251 | "zerocopy", 252 | ] 253 | 254 | [[package]] 255 | name = "aho-corasick" 256 | version = "1.1.3" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 259 | dependencies = [ 260 | "memchr", 261 | ] 262 | 263 | [[package]] 264 | name = "ai" 265 | version = "0.1.0" 266 | dependencies = [ 267 | "actix-cors", 268 | "actix-files", 269 | "actix-web", 270 | "async-stream", 271 | "deadpool-postgres", 272 | "env_logger", 273 | "futures", 274 | "minijinja", 275 | "once_cell", 276 | "reqwest", 277 | "reqwest-streams", 278 | "serde", 279 | "serde_json", 280 | "tokio", 281 | "tokio-postgres", 282 | ] 283 | 284 | [[package]] 285 | name = "alloc-no-stdlib" 286 | version = "2.0.4" 287 | source = "registry+https://github.com/rust-lang/crates.io-index" 288 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 289 | 290 | [[package]] 291 | name = "alloc-stdlib" 292 | version = "0.2.2" 293 | source = "registry+https://github.com/rust-lang/crates.io-index" 294 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 295 | dependencies = [ 296 | "alloc-no-stdlib", 297 | ] 298 | 299 | [[package]] 300 | name = "anstream" 301 | version = "0.6.18" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 304 | dependencies = [ 305 | "anstyle", 306 | "anstyle-parse", 307 | "anstyle-query", 308 | "anstyle-wincon", 309 | "colorchoice", 310 | "is_terminal_polyfill", 311 | "utf8parse", 312 | ] 313 | 314 | [[package]] 315 | name = "anstyle" 316 | version = "1.0.10" 317 | source = "registry+https://github.com/rust-lang/crates.io-index" 318 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 319 | 320 | [[package]] 321 | name = "anstyle-parse" 322 | version = "0.2.6" 323 | source = "registry+https://github.com/rust-lang/crates.io-index" 324 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 325 | dependencies = [ 326 | "utf8parse", 327 | ] 328 | 329 | [[package]] 330 | name = "anstyle-query" 331 | version = "1.1.2" 332 | source = "registry+https://github.com/rust-lang/crates.io-index" 333 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 334 | dependencies = [ 335 | "windows-sys 0.59.0", 336 | ] 337 | 338 | [[package]] 339 | name = "anstyle-wincon" 340 | version = "3.0.7" 341 | source = "registry+https://github.com/rust-lang/crates.io-index" 342 | checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e" 343 | dependencies = [ 344 | "anstyle", 345 | "once_cell", 346 | "windows-sys 0.59.0", 347 | ] 348 | 349 | [[package]] 350 | name = "async-stream" 351 | version = "0.3.6" 352 | source = "registry+https://github.com/rust-lang/crates.io-index" 353 | checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" 354 | dependencies = [ 355 | "async-stream-impl", 356 | "futures-core", 357 | "pin-project-lite", 358 | ] 359 | 360 | [[package]] 361 | name = "async-stream-impl" 362 | version = "0.3.6" 363 | source = "registry+https://github.com/rust-lang/crates.io-index" 364 | checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" 365 | dependencies = [ 366 | "proc-macro2", 367 | "quote", 368 | "syn", 369 | ] 370 | 371 | [[package]] 372 | name = "async-trait" 373 | version = "0.1.85" 374 | source = "registry+https://github.com/rust-lang/crates.io-index" 375 | checksum = "3f934833b4b7233644e5848f235df3f57ed8c80f1528a26c3dfa13d2147fa056" 376 | dependencies = [ 377 | "proc-macro2", 378 | "quote", 379 | "syn", 380 | ] 381 | 382 | [[package]] 383 | name = "autocfg" 384 | version = "1.4.0" 385 | source = "registry+https://github.com/rust-lang/crates.io-index" 386 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 387 | 388 | [[package]] 389 | name = "backtrace" 390 | version = "0.3.74" 391 | source = "registry+https://github.com/rust-lang/crates.io-index" 392 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 393 | dependencies = [ 394 | "addr2line", 395 | "cfg-if", 396 | "libc", 397 | "miniz_oxide", 398 | "object", 399 | "rustc-demangle", 400 | "windows-targets", 401 | ] 402 | 403 | [[package]] 404 | name = "base64" 405 | version = "0.22.1" 406 | source = "registry+https://github.com/rust-lang/crates.io-index" 407 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 408 | 409 | [[package]] 410 | name = "bitflags" 411 | version = "2.8.0" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | checksum = "8f68f53c83ab957f72c32642f3868eec03eb974d1fb82e453128456482613d36" 414 | 415 | [[package]] 416 | name = "block-buffer" 417 | version = "0.10.4" 418 | source = "registry+https://github.com/rust-lang/crates.io-index" 419 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 420 | dependencies = [ 421 | "generic-array", 422 | ] 423 | 424 | [[package]] 425 | name = "brotli" 426 | version = "6.0.0" 427 | source = "registry+https://github.com/rust-lang/crates.io-index" 428 | checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" 429 | dependencies = [ 430 | "alloc-no-stdlib", 431 | "alloc-stdlib", 432 | "brotli-decompressor", 433 | ] 434 | 435 | [[package]] 436 | name = "brotli-decompressor" 437 | version = "4.0.2" 438 | source = "registry+https://github.com/rust-lang/crates.io-index" 439 | checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37" 440 | dependencies = [ 441 | "alloc-no-stdlib", 442 | "alloc-stdlib", 443 | ] 444 | 445 | [[package]] 446 | name = "bumpalo" 447 | version = "3.17.0" 448 | source = "registry+https://github.com/rust-lang/crates.io-index" 449 | checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf" 450 | 451 | [[package]] 452 | name = "byteorder" 453 | version = "1.5.0" 454 | source = "registry+https://github.com/rust-lang/crates.io-index" 455 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 456 | 457 | [[package]] 458 | name = "bytes" 459 | version = "1.9.0" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 462 | 463 | [[package]] 464 | name = "bytestring" 465 | version = "1.4.0" 466 | source = "registry+https://github.com/rust-lang/crates.io-index" 467 | checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" 468 | dependencies = [ 469 | "bytes", 470 | ] 471 | 472 | [[package]] 473 | name = "cargo-husky" 474 | version = "1.5.0" 475 | source = "registry+https://github.com/rust-lang/crates.io-index" 476 | checksum = "7b02b629252fe8ef6460461409564e2c21d0c8e77e0944f3d189ff06c4e932ad" 477 | 478 | [[package]] 479 | name = "cc" 480 | version = "1.2.10" 481 | source = "registry+https://github.com/rust-lang/crates.io-index" 482 | checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" 483 | dependencies = [ 484 | "jobserver", 485 | "libc", 486 | "shlex", 487 | ] 488 | 489 | [[package]] 490 | name = "cfg-if" 491 | version = "1.0.0" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 494 | 495 | [[package]] 496 | name = "cfg_aliases" 497 | version = "0.2.1" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" 500 | 501 | [[package]] 502 | name = "colorchoice" 503 | version = "1.0.3" 504 | source = "registry+https://github.com/rust-lang/crates.io-index" 505 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 506 | 507 | [[package]] 508 | name = "convert_case" 509 | version = "0.4.0" 510 | source = "registry+https://github.com/rust-lang/crates.io-index" 511 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 512 | 513 | [[package]] 514 | name = "cookie" 515 | version = "0.16.2" 516 | source = "registry+https://github.com/rust-lang/crates.io-index" 517 | checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" 518 | dependencies = [ 519 | "percent-encoding", 520 | "time", 521 | "version_check", 522 | ] 523 | 524 | [[package]] 525 | name = "cpufeatures" 526 | version = "0.2.17" 527 | source = "registry+https://github.com/rust-lang/crates.io-index" 528 | checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" 529 | dependencies = [ 530 | "libc", 531 | ] 532 | 533 | [[package]] 534 | name = "crc32fast" 535 | version = "1.4.2" 536 | source = "registry+https://github.com/rust-lang/crates.io-index" 537 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 538 | dependencies = [ 539 | "cfg-if", 540 | ] 541 | 542 | [[package]] 543 | name = "crypto-common" 544 | version = "0.1.6" 545 | source = "registry+https://github.com/rust-lang/crates.io-index" 546 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 547 | dependencies = [ 548 | "generic-array", 549 | "typenum", 550 | ] 551 | 552 | [[package]] 553 | name = "deadpool" 554 | version = "0.12.1" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "6541a3916932fe57768d4be0b1ffb5ec7cbf74ca8c903fdfd5c0fe8aa958f0ed" 557 | dependencies = [ 558 | "deadpool-runtime", 559 | "num_cpus", 560 | "tokio", 561 | ] 562 | 563 | [[package]] 564 | name = "deadpool-postgres" 565 | version = "0.14.1" 566 | source = "registry+https://github.com/rust-lang/crates.io-index" 567 | checksum = "3d697d376cbfa018c23eb4caab1fd1883dd9c906a8c034e8d9a3cb06a7e0bef9" 568 | dependencies = [ 569 | "async-trait", 570 | "deadpool", 571 | "getrandom", 572 | "tokio", 573 | "tokio-postgres", 574 | "tracing", 575 | ] 576 | 577 | [[package]] 578 | name = "deadpool-runtime" 579 | version = "0.1.4" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" 582 | dependencies = [ 583 | "tokio", 584 | ] 585 | 586 | [[package]] 587 | name = "deranged" 588 | version = "0.3.11" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 591 | dependencies = [ 592 | "powerfmt", 593 | ] 594 | 595 | [[package]] 596 | name = "derive_more" 597 | version = "0.99.18" 598 | source = "registry+https://github.com/rust-lang/crates.io-index" 599 | checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 600 | dependencies = [ 601 | "convert_case", 602 | "proc-macro2", 603 | "quote", 604 | "rustc_version", 605 | "syn", 606 | ] 607 | 608 | [[package]] 609 | name = "digest" 610 | version = "0.10.7" 611 | source = "registry+https://github.com/rust-lang/crates.io-index" 612 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 613 | dependencies = [ 614 | "block-buffer", 615 | "crypto-common", 616 | "subtle", 617 | ] 618 | 619 | [[package]] 620 | name = "displaydoc" 621 | version = "0.2.5" 622 | source = "registry+https://github.com/rust-lang/crates.io-index" 623 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 624 | dependencies = [ 625 | "proc-macro2", 626 | "quote", 627 | "syn", 628 | ] 629 | 630 | [[package]] 631 | name = "encoding_rs" 632 | version = "0.8.35" 633 | source = "registry+https://github.com/rust-lang/crates.io-index" 634 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 635 | dependencies = [ 636 | "cfg-if", 637 | ] 638 | 639 | [[package]] 640 | name = "env_filter" 641 | version = "0.1.3" 642 | source = "registry+https://github.com/rust-lang/crates.io-index" 643 | checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0" 644 | dependencies = [ 645 | "log", 646 | "regex", 647 | ] 648 | 649 | [[package]] 650 | name = "env_logger" 651 | version = "0.11.6" 652 | source = "registry+https://github.com/rust-lang/crates.io-index" 653 | checksum = "dcaee3d8e3cfc3fd92428d477bc97fc29ec8716d180c0d74c643bb26166660e0" 654 | dependencies = [ 655 | "anstream", 656 | "anstyle", 657 | "env_filter", 658 | "humantime", 659 | "log", 660 | ] 661 | 662 | [[package]] 663 | name = "equivalent" 664 | version = "1.0.1" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 667 | 668 | [[package]] 669 | name = "fallible-iterator" 670 | version = "0.2.0" 671 | source = "registry+https://github.com/rust-lang/crates.io-index" 672 | checksum = "4443176a9f2c162692bd3d352d745ef9413eec5782a80d8fd6f8a1ac692a07f7" 673 | 674 | [[package]] 675 | name = "flate2" 676 | version = "1.0.35" 677 | source = "registry+https://github.com/rust-lang/crates.io-index" 678 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 679 | dependencies = [ 680 | "crc32fast", 681 | "miniz_oxide", 682 | ] 683 | 684 | [[package]] 685 | name = "fnv" 686 | version = "1.0.7" 687 | source = "registry+https://github.com/rust-lang/crates.io-index" 688 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 689 | 690 | [[package]] 691 | name = "form_urlencoded" 692 | version = "1.2.1" 693 | source = "registry+https://github.com/rust-lang/crates.io-index" 694 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 695 | dependencies = [ 696 | "percent-encoding", 697 | ] 698 | 699 | [[package]] 700 | name = "futures" 701 | version = "0.3.31" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" 704 | dependencies = [ 705 | "futures-channel", 706 | "futures-core", 707 | "futures-executor", 708 | "futures-io", 709 | "futures-sink", 710 | "futures-task", 711 | "futures-util", 712 | ] 713 | 714 | [[package]] 715 | name = "futures-channel" 716 | version = "0.3.31" 717 | source = "registry+https://github.com/rust-lang/crates.io-index" 718 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" 719 | dependencies = [ 720 | "futures-core", 721 | "futures-sink", 722 | ] 723 | 724 | [[package]] 725 | name = "futures-core" 726 | version = "0.3.31" 727 | source = "registry+https://github.com/rust-lang/crates.io-index" 728 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 729 | 730 | [[package]] 731 | name = "futures-executor" 732 | version = "0.3.31" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" 735 | dependencies = [ 736 | "futures-core", 737 | "futures-task", 738 | "futures-util", 739 | ] 740 | 741 | [[package]] 742 | name = "futures-io" 743 | version = "0.3.31" 744 | source = "registry+https://github.com/rust-lang/crates.io-index" 745 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" 746 | 747 | [[package]] 748 | name = "futures-macro" 749 | version = "0.3.31" 750 | source = "registry+https://github.com/rust-lang/crates.io-index" 751 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" 752 | dependencies = [ 753 | "proc-macro2", 754 | "quote", 755 | "syn", 756 | ] 757 | 758 | [[package]] 759 | name = "futures-sink" 760 | version = "0.3.31" 761 | source = "registry+https://github.com/rust-lang/crates.io-index" 762 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 763 | 764 | [[package]] 765 | name = "futures-task" 766 | version = "0.3.31" 767 | source = "registry+https://github.com/rust-lang/crates.io-index" 768 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 769 | 770 | [[package]] 771 | name = "futures-util" 772 | version = "0.3.31" 773 | source = "registry+https://github.com/rust-lang/crates.io-index" 774 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 775 | dependencies = [ 776 | "futures-channel", 777 | "futures-core", 778 | "futures-io", 779 | "futures-macro", 780 | "futures-sink", 781 | "futures-task", 782 | "memchr", 783 | "pin-project-lite", 784 | "pin-utils", 785 | "slab", 786 | ] 787 | 788 | [[package]] 789 | name = "generic-array" 790 | version = "0.14.7" 791 | source = "registry+https://github.com/rust-lang/crates.io-index" 792 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 793 | dependencies = [ 794 | "typenum", 795 | "version_check", 796 | ] 797 | 798 | [[package]] 799 | name = "getrandom" 800 | version = "0.2.15" 801 | source = "registry+https://github.com/rust-lang/crates.io-index" 802 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 803 | dependencies = [ 804 | "cfg-if", 805 | "js-sys", 806 | "libc", 807 | "wasi", 808 | "wasm-bindgen", 809 | ] 810 | 811 | [[package]] 812 | name = "gimli" 813 | version = "0.31.1" 814 | source = "registry+https://github.com/rust-lang/crates.io-index" 815 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 816 | 817 | [[package]] 818 | name = "h2" 819 | version = "0.3.26" 820 | source = "registry+https://github.com/rust-lang/crates.io-index" 821 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 822 | dependencies = [ 823 | "bytes", 824 | "fnv", 825 | "futures-core", 826 | "futures-sink", 827 | "futures-util", 828 | "http 0.2.12", 829 | "indexmap", 830 | "slab", 831 | "tokio", 832 | "tokio-util", 833 | "tracing", 834 | ] 835 | 836 | [[package]] 837 | name = "hashbrown" 838 | version = "0.15.2" 839 | source = "registry+https://github.com/rust-lang/crates.io-index" 840 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 841 | 842 | [[package]] 843 | name = "hermit-abi" 844 | version = "0.3.9" 845 | source = "registry+https://github.com/rust-lang/crates.io-index" 846 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" 847 | 848 | [[package]] 849 | name = "hmac" 850 | version = "0.12.1" 851 | source = "registry+https://github.com/rust-lang/crates.io-index" 852 | checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" 853 | dependencies = [ 854 | "digest", 855 | ] 856 | 857 | [[package]] 858 | name = "http" 859 | version = "0.2.12" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 862 | dependencies = [ 863 | "bytes", 864 | "fnv", 865 | "itoa", 866 | ] 867 | 868 | [[package]] 869 | name = "http" 870 | version = "1.2.0" 871 | source = "registry+https://github.com/rust-lang/crates.io-index" 872 | checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" 873 | dependencies = [ 874 | "bytes", 875 | "fnv", 876 | "itoa", 877 | ] 878 | 879 | [[package]] 880 | name = "http-body" 881 | version = "1.0.1" 882 | source = "registry+https://github.com/rust-lang/crates.io-index" 883 | checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" 884 | dependencies = [ 885 | "bytes", 886 | "http 1.2.0", 887 | ] 888 | 889 | [[package]] 890 | name = "http-body-util" 891 | version = "0.1.2" 892 | source = "registry+https://github.com/rust-lang/crates.io-index" 893 | checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" 894 | dependencies = [ 895 | "bytes", 896 | "futures-util", 897 | "http 1.2.0", 898 | "http-body", 899 | "pin-project-lite", 900 | ] 901 | 902 | [[package]] 903 | name = "http-range" 904 | version = "0.1.5" 905 | source = "registry+https://github.com/rust-lang/crates.io-index" 906 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" 907 | 908 | [[package]] 909 | name = "httparse" 910 | version = "1.10.0" 911 | source = "registry+https://github.com/rust-lang/crates.io-index" 912 | checksum = "f2d708df4e7140240a16cd6ab0ab65c972d7433ab77819ea693fde9c43811e2a" 913 | 914 | [[package]] 915 | name = "httpdate" 916 | version = "1.0.3" 917 | source = "registry+https://github.com/rust-lang/crates.io-index" 918 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 919 | 920 | [[package]] 921 | name = "humantime" 922 | version = "2.1.0" 923 | source = "registry+https://github.com/rust-lang/crates.io-index" 924 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 925 | 926 | [[package]] 927 | name = "hyper" 928 | version = "1.6.0" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | checksum = "cc2b571658e38e0c01b1fdca3bbbe93c00d3d71693ff2770043f8c29bc7d6f80" 931 | dependencies = [ 932 | "bytes", 933 | "futures-channel", 934 | "futures-util", 935 | "http 1.2.0", 936 | "http-body", 937 | "httparse", 938 | "itoa", 939 | "pin-project-lite", 940 | "smallvec", 941 | "tokio", 942 | "want", 943 | ] 944 | 945 | [[package]] 946 | name = "hyper-rustls" 947 | version = "0.27.5" 948 | source = "registry+https://github.com/rust-lang/crates.io-index" 949 | checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2" 950 | dependencies = [ 951 | "futures-util", 952 | "http 1.2.0", 953 | "hyper", 954 | "hyper-util", 955 | "rustls", 956 | "rustls-pki-types", 957 | "tokio", 958 | "tokio-rustls", 959 | "tower-service", 960 | "webpki-roots", 961 | ] 962 | 963 | [[package]] 964 | name = "hyper-util" 965 | version = "0.1.10" 966 | source = "registry+https://github.com/rust-lang/crates.io-index" 967 | checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" 968 | dependencies = [ 969 | "bytes", 970 | "futures-channel", 971 | "futures-util", 972 | "http 1.2.0", 973 | "http-body", 974 | "hyper", 975 | "pin-project-lite", 976 | "socket2", 977 | "tokio", 978 | "tower-service", 979 | "tracing", 980 | ] 981 | 982 | [[package]] 983 | name = "icu_collections" 984 | version = "1.5.0" 985 | source = "registry+https://github.com/rust-lang/crates.io-index" 986 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 987 | dependencies = [ 988 | "displaydoc", 989 | "yoke", 990 | "zerofrom", 991 | "zerovec", 992 | ] 993 | 994 | [[package]] 995 | name = "icu_locid" 996 | version = "1.5.0" 997 | source = "registry+https://github.com/rust-lang/crates.io-index" 998 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 999 | dependencies = [ 1000 | "displaydoc", 1001 | "litemap", 1002 | "tinystr", 1003 | "writeable", 1004 | "zerovec", 1005 | ] 1006 | 1007 | [[package]] 1008 | name = "icu_locid_transform" 1009 | version = "1.5.0" 1010 | source = "registry+https://github.com/rust-lang/crates.io-index" 1011 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1012 | dependencies = [ 1013 | "displaydoc", 1014 | "icu_locid", 1015 | "icu_locid_transform_data", 1016 | "icu_provider", 1017 | "tinystr", 1018 | "zerovec", 1019 | ] 1020 | 1021 | [[package]] 1022 | name = "icu_locid_transform_data" 1023 | version = "1.5.0" 1024 | source = "registry+https://github.com/rust-lang/crates.io-index" 1025 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1026 | 1027 | [[package]] 1028 | name = "icu_normalizer" 1029 | version = "1.5.0" 1030 | source = "registry+https://github.com/rust-lang/crates.io-index" 1031 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1032 | dependencies = [ 1033 | "displaydoc", 1034 | "icu_collections", 1035 | "icu_normalizer_data", 1036 | "icu_properties", 1037 | "icu_provider", 1038 | "smallvec", 1039 | "utf16_iter", 1040 | "utf8_iter", 1041 | "write16", 1042 | "zerovec", 1043 | ] 1044 | 1045 | [[package]] 1046 | name = "icu_normalizer_data" 1047 | version = "1.5.0" 1048 | source = "registry+https://github.com/rust-lang/crates.io-index" 1049 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1050 | 1051 | [[package]] 1052 | name = "icu_properties" 1053 | version = "1.5.1" 1054 | source = "registry+https://github.com/rust-lang/crates.io-index" 1055 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1056 | dependencies = [ 1057 | "displaydoc", 1058 | "icu_collections", 1059 | "icu_locid_transform", 1060 | "icu_properties_data", 1061 | "icu_provider", 1062 | "tinystr", 1063 | "zerovec", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "icu_properties_data" 1068 | version = "1.5.0" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1071 | 1072 | [[package]] 1073 | name = "icu_provider" 1074 | version = "1.5.0" 1075 | source = "registry+https://github.com/rust-lang/crates.io-index" 1076 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1077 | dependencies = [ 1078 | "displaydoc", 1079 | "icu_locid", 1080 | "icu_provider_macros", 1081 | "stable_deref_trait", 1082 | "tinystr", 1083 | "writeable", 1084 | "yoke", 1085 | "zerofrom", 1086 | "zerovec", 1087 | ] 1088 | 1089 | [[package]] 1090 | name = "icu_provider_macros" 1091 | version = "1.5.0" 1092 | source = "registry+https://github.com/rust-lang/crates.io-index" 1093 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1094 | dependencies = [ 1095 | "proc-macro2", 1096 | "quote", 1097 | "syn", 1098 | ] 1099 | 1100 | [[package]] 1101 | name = "idna" 1102 | version = "1.0.3" 1103 | source = "registry+https://github.com/rust-lang/crates.io-index" 1104 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1105 | dependencies = [ 1106 | "idna_adapter", 1107 | "smallvec", 1108 | "utf8_iter", 1109 | ] 1110 | 1111 | [[package]] 1112 | name = "idna_adapter" 1113 | version = "1.2.0" 1114 | source = "registry+https://github.com/rust-lang/crates.io-index" 1115 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1116 | dependencies = [ 1117 | "icu_normalizer", 1118 | "icu_properties", 1119 | ] 1120 | 1121 | [[package]] 1122 | name = "impl-more" 1123 | version = "0.1.9" 1124 | source = "registry+https://github.com/rust-lang/crates.io-index" 1125 | checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2" 1126 | 1127 | [[package]] 1128 | name = "indexmap" 1129 | version = "2.7.1" 1130 | source = "registry+https://github.com/rust-lang/crates.io-index" 1131 | checksum = "8c9c992b02b5b4c94ea26e32fe5bccb7aa7d9f390ab5c1221ff895bc7ea8b652" 1132 | dependencies = [ 1133 | "equivalent", 1134 | "hashbrown", 1135 | ] 1136 | 1137 | [[package]] 1138 | name = "ipnet" 1139 | version = "2.11.0" 1140 | source = "registry+https://github.com/rust-lang/crates.io-index" 1141 | checksum = "469fb0b9cefa57e3ef31275ee7cacb78f2fdca44e4765491884a2b119d4eb130" 1142 | 1143 | [[package]] 1144 | name = "is_terminal_polyfill" 1145 | version = "1.70.1" 1146 | source = "registry+https://github.com/rust-lang/crates.io-index" 1147 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1148 | 1149 | [[package]] 1150 | name = "itoa" 1151 | version = "1.0.14" 1152 | source = "registry+https://github.com/rust-lang/crates.io-index" 1153 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1154 | 1155 | [[package]] 1156 | name = "jobserver" 1157 | version = "0.1.32" 1158 | source = "registry+https://github.com/rust-lang/crates.io-index" 1159 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1160 | dependencies = [ 1161 | "libc", 1162 | ] 1163 | 1164 | [[package]] 1165 | name = "js-sys" 1166 | version = "0.3.77" 1167 | source = "registry+https://github.com/rust-lang/crates.io-index" 1168 | checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" 1169 | dependencies = [ 1170 | "once_cell", 1171 | "wasm-bindgen", 1172 | ] 1173 | 1174 | [[package]] 1175 | name = "language-tags" 1176 | version = "0.3.2" 1177 | source = "registry+https://github.com/rust-lang/crates.io-index" 1178 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 1179 | 1180 | [[package]] 1181 | name = "libc" 1182 | version = "0.2.169" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" 1185 | 1186 | [[package]] 1187 | name = "litemap" 1188 | version = "0.7.4" 1189 | source = "registry+https://github.com/rust-lang/crates.io-index" 1190 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1191 | 1192 | [[package]] 1193 | name = "local-channel" 1194 | version = "0.1.5" 1195 | source = "registry+https://github.com/rust-lang/crates.io-index" 1196 | checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" 1197 | dependencies = [ 1198 | "futures-core", 1199 | "futures-sink", 1200 | "local-waker", 1201 | ] 1202 | 1203 | [[package]] 1204 | name = "local-waker" 1205 | version = "0.1.4" 1206 | source = "registry+https://github.com/rust-lang/crates.io-index" 1207 | checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" 1208 | 1209 | [[package]] 1210 | name = "lock_api" 1211 | version = "0.4.12" 1212 | source = "registry+https://github.com/rust-lang/crates.io-index" 1213 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1214 | dependencies = [ 1215 | "autocfg", 1216 | "scopeguard", 1217 | ] 1218 | 1219 | [[package]] 1220 | name = "log" 1221 | version = "0.4.25" 1222 | source = "registry+https://github.com/rust-lang/crates.io-index" 1223 | checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" 1224 | 1225 | [[package]] 1226 | name = "md-5" 1227 | version = "0.10.6" 1228 | source = "registry+https://github.com/rust-lang/crates.io-index" 1229 | checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" 1230 | dependencies = [ 1231 | "cfg-if", 1232 | "digest", 1233 | ] 1234 | 1235 | [[package]] 1236 | name = "memchr" 1237 | version = "2.7.4" 1238 | source = "registry+https://github.com/rust-lang/crates.io-index" 1239 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1240 | 1241 | [[package]] 1242 | name = "memo-map" 1243 | version = "0.3.3" 1244 | source = "registry+https://github.com/rust-lang/crates.io-index" 1245 | checksum = "38d1115007560874e373613744c6fba374c17688327a71c1476d1a5954cc857b" 1246 | 1247 | [[package]] 1248 | name = "mime" 1249 | version = "0.3.17" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1252 | 1253 | [[package]] 1254 | name = "mime_guess" 1255 | version = "2.0.5" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1258 | dependencies = [ 1259 | "mime", 1260 | "unicase", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "minijinja" 1265 | version = "2.7.0" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | checksum = "cff7b8df5e85e30b87c2b0b3f58ba3a87b68e133738bf512a7713769326dbca9" 1268 | dependencies = [ 1269 | "memo-map", 1270 | "self_cell", 1271 | "serde", 1272 | ] 1273 | 1274 | [[package]] 1275 | name = "miniz_oxide" 1276 | version = "0.8.3" 1277 | source = "registry+https://github.com/rust-lang/crates.io-index" 1278 | checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" 1279 | dependencies = [ 1280 | "adler2", 1281 | ] 1282 | 1283 | [[package]] 1284 | name = "mio" 1285 | version = "1.0.3" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1288 | dependencies = [ 1289 | "libc", 1290 | "log", 1291 | "wasi", 1292 | "windows-sys 0.52.0", 1293 | ] 1294 | 1295 | [[package]] 1296 | name = "num-conv" 1297 | version = "0.1.0" 1298 | source = "registry+https://github.com/rust-lang/crates.io-index" 1299 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1300 | 1301 | [[package]] 1302 | name = "num_cpus" 1303 | version = "1.16.0" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" 1306 | dependencies = [ 1307 | "hermit-abi", 1308 | "libc", 1309 | ] 1310 | 1311 | [[package]] 1312 | name = "object" 1313 | version = "0.36.7" 1314 | source = "registry+https://github.com/rust-lang/crates.io-index" 1315 | checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" 1316 | dependencies = [ 1317 | "memchr", 1318 | ] 1319 | 1320 | [[package]] 1321 | name = "once_cell" 1322 | version = "1.20.2" 1323 | source = "registry+https://github.com/rust-lang/crates.io-index" 1324 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1325 | 1326 | [[package]] 1327 | name = "parking_lot" 1328 | version = "0.12.3" 1329 | source = "registry+https://github.com/rust-lang/crates.io-index" 1330 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1331 | dependencies = [ 1332 | "lock_api", 1333 | "parking_lot_core", 1334 | ] 1335 | 1336 | [[package]] 1337 | name = "parking_lot_core" 1338 | version = "0.9.10" 1339 | source = "registry+https://github.com/rust-lang/crates.io-index" 1340 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1341 | dependencies = [ 1342 | "cfg-if", 1343 | "libc", 1344 | "redox_syscall", 1345 | "smallvec", 1346 | "windows-targets", 1347 | ] 1348 | 1349 | [[package]] 1350 | name = "paste" 1351 | version = "1.0.15" 1352 | source = "registry+https://github.com/rust-lang/crates.io-index" 1353 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1354 | 1355 | [[package]] 1356 | name = "percent-encoding" 1357 | version = "2.3.1" 1358 | source = "registry+https://github.com/rust-lang/crates.io-index" 1359 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1360 | 1361 | [[package]] 1362 | name = "phf" 1363 | version = "0.11.3" 1364 | source = "registry+https://github.com/rust-lang/crates.io-index" 1365 | checksum = "1fd6780a80ae0c52cc120a26a1a42c1ae51b247a253e4e06113d23d2c2edd078" 1366 | dependencies = [ 1367 | "phf_shared", 1368 | ] 1369 | 1370 | [[package]] 1371 | name = "phf_shared" 1372 | version = "0.11.3" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "67eabc2ef2a60eb7faa00097bd1ffdb5bd28e62bf39990626a582201b7a754e5" 1375 | dependencies = [ 1376 | "siphasher", 1377 | ] 1378 | 1379 | [[package]] 1380 | name = "pin-project-lite" 1381 | version = "0.2.16" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" 1384 | 1385 | [[package]] 1386 | name = "pin-utils" 1387 | version = "0.1.0" 1388 | source = "registry+https://github.com/rust-lang/crates.io-index" 1389 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1390 | 1391 | [[package]] 1392 | name = "pkg-config" 1393 | version = "0.3.31" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1396 | 1397 | [[package]] 1398 | name = "postgres-protocol" 1399 | version = "0.6.7" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "acda0ebdebc28befa84bee35e651e4c5f09073d668c7aed4cf7e23c3cda84b23" 1402 | dependencies = [ 1403 | "base64", 1404 | "byteorder", 1405 | "bytes", 1406 | "fallible-iterator", 1407 | "hmac", 1408 | "md-5", 1409 | "memchr", 1410 | "rand", 1411 | "sha2", 1412 | "stringprep", 1413 | ] 1414 | 1415 | [[package]] 1416 | name = "postgres-types" 1417 | version = "0.2.8" 1418 | source = "registry+https://github.com/rust-lang/crates.io-index" 1419 | checksum = "f66ea23a2d0e5734297357705193335e0a957696f34bed2f2faefacb2fec336f" 1420 | dependencies = [ 1421 | "bytes", 1422 | "fallible-iterator", 1423 | "postgres-protocol", 1424 | "serde", 1425 | "serde_json", 1426 | ] 1427 | 1428 | [[package]] 1429 | name = "powerfmt" 1430 | version = "0.2.0" 1431 | source = "registry+https://github.com/rust-lang/crates.io-index" 1432 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1433 | 1434 | [[package]] 1435 | name = "ppv-lite86" 1436 | version = "0.2.20" 1437 | source = "registry+https://github.com/rust-lang/crates.io-index" 1438 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1439 | dependencies = [ 1440 | "zerocopy", 1441 | ] 1442 | 1443 | [[package]] 1444 | name = "proc-macro2" 1445 | version = "1.0.93" 1446 | source = "registry+https://github.com/rust-lang/crates.io-index" 1447 | checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" 1448 | dependencies = [ 1449 | "unicode-ident", 1450 | ] 1451 | 1452 | [[package]] 1453 | name = "quinn" 1454 | version = "0.11.6" 1455 | source = "registry+https://github.com/rust-lang/crates.io-index" 1456 | checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef" 1457 | dependencies = [ 1458 | "bytes", 1459 | "pin-project-lite", 1460 | "quinn-proto", 1461 | "quinn-udp", 1462 | "rustc-hash", 1463 | "rustls", 1464 | "socket2", 1465 | "thiserror", 1466 | "tokio", 1467 | "tracing", 1468 | ] 1469 | 1470 | [[package]] 1471 | name = "quinn-proto" 1472 | version = "0.11.9" 1473 | source = "registry+https://github.com/rust-lang/crates.io-index" 1474 | checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d" 1475 | dependencies = [ 1476 | "bytes", 1477 | "getrandom", 1478 | "rand", 1479 | "ring", 1480 | "rustc-hash", 1481 | "rustls", 1482 | "rustls-pki-types", 1483 | "slab", 1484 | "thiserror", 1485 | "tinyvec", 1486 | "tracing", 1487 | "web-time", 1488 | ] 1489 | 1490 | [[package]] 1491 | name = "quinn-udp" 1492 | version = "0.5.9" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | checksum = "1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904" 1495 | dependencies = [ 1496 | "cfg_aliases", 1497 | "libc", 1498 | "once_cell", 1499 | "socket2", 1500 | "tracing", 1501 | "windows-sys 0.59.0", 1502 | ] 1503 | 1504 | [[package]] 1505 | name = "quote" 1506 | version = "1.0.38" 1507 | source = "registry+https://github.com/rust-lang/crates.io-index" 1508 | checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" 1509 | dependencies = [ 1510 | "proc-macro2", 1511 | ] 1512 | 1513 | [[package]] 1514 | name = "rand" 1515 | version = "0.8.5" 1516 | source = "registry+https://github.com/rust-lang/crates.io-index" 1517 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1518 | dependencies = [ 1519 | "libc", 1520 | "rand_chacha", 1521 | "rand_core", 1522 | ] 1523 | 1524 | [[package]] 1525 | name = "rand_chacha" 1526 | version = "0.3.1" 1527 | source = "registry+https://github.com/rust-lang/crates.io-index" 1528 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1529 | dependencies = [ 1530 | "ppv-lite86", 1531 | "rand_core", 1532 | ] 1533 | 1534 | [[package]] 1535 | name = "rand_core" 1536 | version = "0.6.4" 1537 | source = "registry+https://github.com/rust-lang/crates.io-index" 1538 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1539 | dependencies = [ 1540 | "getrandom", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "redox_syscall" 1545 | version = "0.5.8" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1548 | dependencies = [ 1549 | "bitflags", 1550 | ] 1551 | 1552 | [[package]] 1553 | name = "regex" 1554 | version = "1.11.1" 1555 | source = "registry+https://github.com/rust-lang/crates.io-index" 1556 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1557 | dependencies = [ 1558 | "aho-corasick", 1559 | "memchr", 1560 | "regex-automata", 1561 | "regex-syntax", 1562 | ] 1563 | 1564 | [[package]] 1565 | name = "regex-automata" 1566 | version = "0.4.9" 1567 | source = "registry+https://github.com/rust-lang/crates.io-index" 1568 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1569 | dependencies = [ 1570 | "aho-corasick", 1571 | "memchr", 1572 | "regex-syntax", 1573 | ] 1574 | 1575 | [[package]] 1576 | name = "regex-lite" 1577 | version = "0.1.6" 1578 | source = "registry+https://github.com/rust-lang/crates.io-index" 1579 | checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" 1580 | 1581 | [[package]] 1582 | name = "regex-syntax" 1583 | version = "0.8.5" 1584 | source = "registry+https://github.com/rust-lang/crates.io-index" 1585 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1586 | 1587 | [[package]] 1588 | name = "reqwest" 1589 | version = "0.12.12" 1590 | source = "registry+https://github.com/rust-lang/crates.io-index" 1591 | checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da" 1592 | dependencies = [ 1593 | "base64", 1594 | "bytes", 1595 | "futures-core", 1596 | "futures-util", 1597 | "http 1.2.0", 1598 | "http-body", 1599 | "http-body-util", 1600 | "hyper", 1601 | "hyper-rustls", 1602 | "hyper-util", 1603 | "ipnet", 1604 | "js-sys", 1605 | "log", 1606 | "mime", 1607 | "once_cell", 1608 | "percent-encoding", 1609 | "pin-project-lite", 1610 | "quinn", 1611 | "rustls", 1612 | "rustls-pemfile", 1613 | "rustls-pki-types", 1614 | "serde", 1615 | "serde_json", 1616 | "serde_urlencoded", 1617 | "sync_wrapper", 1618 | "tokio", 1619 | "tokio-rustls", 1620 | "tokio-util", 1621 | "tower", 1622 | "tower-service", 1623 | "url", 1624 | "wasm-bindgen", 1625 | "wasm-bindgen-futures", 1626 | "wasm-streams", 1627 | "web-sys", 1628 | "webpki-roots", 1629 | "windows-registry", 1630 | ] 1631 | 1632 | [[package]] 1633 | name = "reqwest-streams" 1634 | version = "0.9.0" 1635 | source = "registry+https://github.com/rust-lang/crates.io-index" 1636 | checksum = "a7c5c3436b21f323e34b937f18b090a99c459b5065c710bee637645ebc703532" 1637 | dependencies = [ 1638 | "async-trait", 1639 | "bytes", 1640 | "cargo-husky", 1641 | "futures", 1642 | "reqwest", 1643 | "serde", 1644 | "serde_json", 1645 | "tokio", 1646 | "tokio-util", 1647 | ] 1648 | 1649 | [[package]] 1650 | name = "ring" 1651 | version = "0.17.8" 1652 | source = "registry+https://github.com/rust-lang/crates.io-index" 1653 | checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" 1654 | dependencies = [ 1655 | "cc", 1656 | "cfg-if", 1657 | "getrandom", 1658 | "libc", 1659 | "spin", 1660 | "untrusted", 1661 | "windows-sys 0.52.0", 1662 | ] 1663 | 1664 | [[package]] 1665 | name = "rustc-demangle" 1666 | version = "0.1.24" 1667 | source = "registry+https://github.com/rust-lang/crates.io-index" 1668 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1669 | 1670 | [[package]] 1671 | name = "rustc-hash" 1672 | version = "2.1.0" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "c7fb8039b3032c191086b10f11f319a6e99e1e82889c5cc6046f515c9db1d497" 1675 | 1676 | [[package]] 1677 | name = "rustc_version" 1678 | version = "0.4.1" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 1681 | dependencies = [ 1682 | "semver", 1683 | ] 1684 | 1685 | [[package]] 1686 | name = "rustls" 1687 | version = "0.23.22" 1688 | source = "registry+https://github.com/rust-lang/crates.io-index" 1689 | checksum = "9fb9263ab4eb695e42321db096e3b8fbd715a59b154d5c88d82db2175b681ba7" 1690 | dependencies = [ 1691 | "once_cell", 1692 | "ring", 1693 | "rustls-pki-types", 1694 | "rustls-webpki", 1695 | "subtle", 1696 | "zeroize", 1697 | ] 1698 | 1699 | [[package]] 1700 | name = "rustls-pemfile" 1701 | version = "2.2.0" 1702 | source = "registry+https://github.com/rust-lang/crates.io-index" 1703 | checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" 1704 | dependencies = [ 1705 | "rustls-pki-types", 1706 | ] 1707 | 1708 | [[package]] 1709 | name = "rustls-pki-types" 1710 | version = "1.11.0" 1711 | source = "registry+https://github.com/rust-lang/crates.io-index" 1712 | checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c" 1713 | dependencies = [ 1714 | "web-time", 1715 | ] 1716 | 1717 | [[package]] 1718 | name = "rustls-webpki" 1719 | version = "0.102.8" 1720 | source = "registry+https://github.com/rust-lang/crates.io-index" 1721 | checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" 1722 | dependencies = [ 1723 | "ring", 1724 | "rustls-pki-types", 1725 | "untrusted", 1726 | ] 1727 | 1728 | [[package]] 1729 | name = "rustversion" 1730 | version = "1.0.19" 1731 | source = "registry+https://github.com/rust-lang/crates.io-index" 1732 | checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" 1733 | 1734 | [[package]] 1735 | name = "ryu" 1736 | version = "1.0.19" 1737 | source = "registry+https://github.com/rust-lang/crates.io-index" 1738 | checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" 1739 | 1740 | [[package]] 1741 | name = "scopeguard" 1742 | version = "1.2.0" 1743 | source = "registry+https://github.com/rust-lang/crates.io-index" 1744 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1745 | 1746 | [[package]] 1747 | name = "self_cell" 1748 | version = "1.1.0" 1749 | source = "registry+https://github.com/rust-lang/crates.io-index" 1750 | checksum = "c2fdfc24bc566f839a2da4c4295b82db7d25a24253867d5c64355abb5799bdbe" 1751 | 1752 | [[package]] 1753 | name = "semver" 1754 | version = "1.0.25" 1755 | source = "registry+https://github.com/rust-lang/crates.io-index" 1756 | checksum = "f79dfe2d285b0488816f30e700a7438c5a73d816b5b7d3ac72fbc48b0d185e03" 1757 | 1758 | [[package]] 1759 | name = "serde" 1760 | version = "1.0.217" 1761 | source = "registry+https://github.com/rust-lang/crates.io-index" 1762 | checksum = "02fc4265df13d6fa1d00ecff087228cc0a2b5f3c0e87e258d8b94a156e984c70" 1763 | dependencies = [ 1764 | "serde_derive", 1765 | ] 1766 | 1767 | [[package]] 1768 | name = "serde_derive" 1769 | version = "1.0.217" 1770 | source = "registry+https://github.com/rust-lang/crates.io-index" 1771 | checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" 1772 | dependencies = [ 1773 | "proc-macro2", 1774 | "quote", 1775 | "syn", 1776 | ] 1777 | 1778 | [[package]] 1779 | name = "serde_json" 1780 | version = "1.0.138" 1781 | source = "registry+https://github.com/rust-lang/crates.io-index" 1782 | checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" 1783 | dependencies = [ 1784 | "itoa", 1785 | "memchr", 1786 | "ryu", 1787 | "serde", 1788 | ] 1789 | 1790 | [[package]] 1791 | name = "serde_urlencoded" 1792 | version = "0.7.1" 1793 | source = "registry+https://github.com/rust-lang/crates.io-index" 1794 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1795 | dependencies = [ 1796 | "form_urlencoded", 1797 | "itoa", 1798 | "ryu", 1799 | "serde", 1800 | ] 1801 | 1802 | [[package]] 1803 | name = "sha1" 1804 | version = "0.10.6" 1805 | source = "registry+https://github.com/rust-lang/crates.io-index" 1806 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1807 | dependencies = [ 1808 | "cfg-if", 1809 | "cpufeatures", 1810 | "digest", 1811 | ] 1812 | 1813 | [[package]] 1814 | name = "sha2" 1815 | version = "0.10.8" 1816 | source = "registry+https://github.com/rust-lang/crates.io-index" 1817 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1818 | dependencies = [ 1819 | "cfg-if", 1820 | "cpufeatures", 1821 | "digest", 1822 | ] 1823 | 1824 | [[package]] 1825 | name = "shlex" 1826 | version = "1.3.0" 1827 | source = "registry+https://github.com/rust-lang/crates.io-index" 1828 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1829 | 1830 | [[package]] 1831 | name = "signal-hook-registry" 1832 | version = "1.4.2" 1833 | source = "registry+https://github.com/rust-lang/crates.io-index" 1834 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1835 | dependencies = [ 1836 | "libc", 1837 | ] 1838 | 1839 | [[package]] 1840 | name = "siphasher" 1841 | version = "1.0.1" 1842 | source = "registry+https://github.com/rust-lang/crates.io-index" 1843 | checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" 1844 | 1845 | [[package]] 1846 | name = "slab" 1847 | version = "0.4.9" 1848 | source = "registry+https://github.com/rust-lang/crates.io-index" 1849 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1850 | dependencies = [ 1851 | "autocfg", 1852 | ] 1853 | 1854 | [[package]] 1855 | name = "smallvec" 1856 | version = "1.13.2" 1857 | source = "registry+https://github.com/rust-lang/crates.io-index" 1858 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1859 | 1860 | [[package]] 1861 | name = "socket2" 1862 | version = "0.5.8" 1863 | source = "registry+https://github.com/rust-lang/crates.io-index" 1864 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 1865 | dependencies = [ 1866 | "libc", 1867 | "windows-sys 0.52.0", 1868 | ] 1869 | 1870 | [[package]] 1871 | name = "spin" 1872 | version = "0.9.8" 1873 | source = "registry+https://github.com/rust-lang/crates.io-index" 1874 | checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" 1875 | 1876 | [[package]] 1877 | name = "stable_deref_trait" 1878 | version = "1.2.0" 1879 | source = "registry+https://github.com/rust-lang/crates.io-index" 1880 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1881 | 1882 | [[package]] 1883 | name = "stringprep" 1884 | version = "0.1.5" 1885 | source = "registry+https://github.com/rust-lang/crates.io-index" 1886 | checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" 1887 | dependencies = [ 1888 | "unicode-bidi", 1889 | "unicode-normalization", 1890 | "unicode-properties", 1891 | ] 1892 | 1893 | [[package]] 1894 | name = "subtle" 1895 | version = "2.6.1" 1896 | source = "registry+https://github.com/rust-lang/crates.io-index" 1897 | checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" 1898 | 1899 | [[package]] 1900 | name = "syn" 1901 | version = "2.0.96" 1902 | source = "registry+https://github.com/rust-lang/crates.io-index" 1903 | checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" 1904 | dependencies = [ 1905 | "proc-macro2", 1906 | "quote", 1907 | "unicode-ident", 1908 | ] 1909 | 1910 | [[package]] 1911 | name = "sync_wrapper" 1912 | version = "1.0.2" 1913 | source = "registry+https://github.com/rust-lang/crates.io-index" 1914 | checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" 1915 | dependencies = [ 1916 | "futures-core", 1917 | ] 1918 | 1919 | [[package]] 1920 | name = "synstructure" 1921 | version = "0.13.1" 1922 | source = "registry+https://github.com/rust-lang/crates.io-index" 1923 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 1924 | dependencies = [ 1925 | "proc-macro2", 1926 | "quote", 1927 | "syn", 1928 | ] 1929 | 1930 | [[package]] 1931 | name = "thiserror" 1932 | version = "2.0.11" 1933 | source = "registry+https://github.com/rust-lang/crates.io-index" 1934 | checksum = "d452f284b73e6d76dd36758a0c8684b1d5be31f92b89d07fd5822175732206fc" 1935 | dependencies = [ 1936 | "thiserror-impl", 1937 | ] 1938 | 1939 | [[package]] 1940 | name = "thiserror-impl" 1941 | version = "2.0.11" 1942 | source = "registry+https://github.com/rust-lang/crates.io-index" 1943 | checksum = "26afc1baea8a989337eeb52b6e72a039780ce45c3edfcc9c5b9d112feeb173c2" 1944 | dependencies = [ 1945 | "proc-macro2", 1946 | "quote", 1947 | "syn", 1948 | ] 1949 | 1950 | [[package]] 1951 | name = "time" 1952 | version = "0.3.37" 1953 | source = "registry+https://github.com/rust-lang/crates.io-index" 1954 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 1955 | dependencies = [ 1956 | "deranged", 1957 | "itoa", 1958 | "num-conv", 1959 | "powerfmt", 1960 | "serde", 1961 | "time-core", 1962 | "time-macros", 1963 | ] 1964 | 1965 | [[package]] 1966 | name = "time-core" 1967 | version = "0.1.2" 1968 | source = "registry+https://github.com/rust-lang/crates.io-index" 1969 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 1970 | 1971 | [[package]] 1972 | name = "time-macros" 1973 | version = "0.2.19" 1974 | source = "registry+https://github.com/rust-lang/crates.io-index" 1975 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 1976 | dependencies = [ 1977 | "num-conv", 1978 | "time-core", 1979 | ] 1980 | 1981 | [[package]] 1982 | name = "tinystr" 1983 | version = "0.7.6" 1984 | source = "registry+https://github.com/rust-lang/crates.io-index" 1985 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 1986 | dependencies = [ 1987 | "displaydoc", 1988 | "zerovec", 1989 | ] 1990 | 1991 | [[package]] 1992 | name = "tinyvec" 1993 | version = "1.8.1" 1994 | source = "registry+https://github.com/rust-lang/crates.io-index" 1995 | checksum = "022db8904dfa342efe721985167e9fcd16c29b226db4397ed752a761cfce81e8" 1996 | dependencies = [ 1997 | "tinyvec_macros", 1998 | ] 1999 | 2000 | [[package]] 2001 | name = "tinyvec_macros" 2002 | version = "0.1.1" 2003 | source = "registry+https://github.com/rust-lang/crates.io-index" 2004 | checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" 2005 | 2006 | [[package]] 2007 | name = "tokio" 2008 | version = "1.43.0" 2009 | source = "registry+https://github.com/rust-lang/crates.io-index" 2010 | checksum = "3d61fa4ffa3de412bfea335c6ecff681de2b609ba3c77ef3e00e521813a9ed9e" 2011 | dependencies = [ 2012 | "backtrace", 2013 | "bytes", 2014 | "libc", 2015 | "mio", 2016 | "parking_lot", 2017 | "pin-project-lite", 2018 | "signal-hook-registry", 2019 | "socket2", 2020 | "windows-sys 0.52.0", 2021 | ] 2022 | 2023 | [[package]] 2024 | name = "tokio-postgres" 2025 | version = "0.7.12" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "3b5d3742945bc7d7f210693b0c58ae542c6fd47b17adbbda0885f3dcb34a6bdb" 2028 | dependencies = [ 2029 | "async-trait", 2030 | "byteorder", 2031 | "bytes", 2032 | "fallible-iterator", 2033 | "futures-channel", 2034 | "futures-util", 2035 | "log", 2036 | "parking_lot", 2037 | "percent-encoding", 2038 | "phf", 2039 | "pin-project-lite", 2040 | "postgres-protocol", 2041 | "postgres-types", 2042 | "rand", 2043 | "socket2", 2044 | "tokio", 2045 | "tokio-util", 2046 | "whoami", 2047 | ] 2048 | 2049 | [[package]] 2050 | name = "tokio-rustls" 2051 | version = "0.26.1" 2052 | source = "registry+https://github.com/rust-lang/crates.io-index" 2053 | checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37" 2054 | dependencies = [ 2055 | "rustls", 2056 | "tokio", 2057 | ] 2058 | 2059 | [[package]] 2060 | name = "tokio-util" 2061 | version = "0.7.13" 2062 | source = "registry+https://github.com/rust-lang/crates.io-index" 2063 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2064 | dependencies = [ 2065 | "bytes", 2066 | "futures-core", 2067 | "futures-sink", 2068 | "pin-project-lite", 2069 | "tokio", 2070 | ] 2071 | 2072 | [[package]] 2073 | name = "tower" 2074 | version = "0.5.2" 2075 | source = "registry+https://github.com/rust-lang/crates.io-index" 2076 | checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9" 2077 | dependencies = [ 2078 | "futures-core", 2079 | "futures-util", 2080 | "pin-project-lite", 2081 | "sync_wrapper", 2082 | "tokio", 2083 | "tower-layer", 2084 | "tower-service", 2085 | ] 2086 | 2087 | [[package]] 2088 | name = "tower-layer" 2089 | version = "0.3.3" 2090 | source = "registry+https://github.com/rust-lang/crates.io-index" 2091 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" 2092 | 2093 | [[package]] 2094 | name = "tower-service" 2095 | version = "0.3.3" 2096 | source = "registry+https://github.com/rust-lang/crates.io-index" 2097 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" 2098 | 2099 | [[package]] 2100 | name = "tracing" 2101 | version = "0.1.41" 2102 | source = "registry+https://github.com/rust-lang/crates.io-index" 2103 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2104 | dependencies = [ 2105 | "log", 2106 | "pin-project-lite", 2107 | "tracing-attributes", 2108 | "tracing-core", 2109 | ] 2110 | 2111 | [[package]] 2112 | name = "tracing-attributes" 2113 | version = "0.1.28" 2114 | source = "registry+https://github.com/rust-lang/crates.io-index" 2115 | checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" 2116 | dependencies = [ 2117 | "proc-macro2", 2118 | "quote", 2119 | "syn", 2120 | ] 2121 | 2122 | [[package]] 2123 | name = "tracing-core" 2124 | version = "0.1.33" 2125 | source = "registry+https://github.com/rust-lang/crates.io-index" 2126 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2127 | dependencies = [ 2128 | "once_cell", 2129 | ] 2130 | 2131 | [[package]] 2132 | name = "try-lock" 2133 | version = "0.2.5" 2134 | source = "registry+https://github.com/rust-lang/crates.io-index" 2135 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" 2136 | 2137 | [[package]] 2138 | name = "typenum" 2139 | version = "1.17.0" 2140 | source = "registry+https://github.com/rust-lang/crates.io-index" 2141 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2142 | 2143 | [[package]] 2144 | name = "unicase" 2145 | version = "2.8.1" 2146 | source = "registry+https://github.com/rust-lang/crates.io-index" 2147 | checksum = "75b844d17643ee918803943289730bec8aac480150456169e647ed0b576ba539" 2148 | 2149 | [[package]] 2150 | name = "unicode-bidi" 2151 | version = "0.3.18" 2152 | source = "registry+https://github.com/rust-lang/crates.io-index" 2153 | checksum = "5c1cb5db39152898a79168971543b1cb5020dff7fe43c8dc468b0885f5e29df5" 2154 | 2155 | [[package]] 2156 | name = "unicode-ident" 2157 | version = "1.0.16" 2158 | source = "registry+https://github.com/rust-lang/crates.io-index" 2159 | checksum = "a210d160f08b701c8721ba1c726c11662f877ea6b7094007e1ca9a1041945034" 2160 | 2161 | [[package]] 2162 | name = "unicode-normalization" 2163 | version = "0.1.24" 2164 | source = "registry+https://github.com/rust-lang/crates.io-index" 2165 | checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" 2166 | dependencies = [ 2167 | "tinyvec", 2168 | ] 2169 | 2170 | [[package]] 2171 | name = "unicode-properties" 2172 | version = "0.1.3" 2173 | source = "registry+https://github.com/rust-lang/crates.io-index" 2174 | checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" 2175 | 2176 | [[package]] 2177 | name = "untrusted" 2178 | version = "0.9.0" 2179 | source = "registry+https://github.com/rust-lang/crates.io-index" 2180 | checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" 2181 | 2182 | [[package]] 2183 | name = "url" 2184 | version = "2.5.4" 2185 | source = "registry+https://github.com/rust-lang/crates.io-index" 2186 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2187 | dependencies = [ 2188 | "form_urlencoded", 2189 | "idna", 2190 | "percent-encoding", 2191 | ] 2192 | 2193 | [[package]] 2194 | name = "utf16_iter" 2195 | version = "1.0.5" 2196 | source = "registry+https://github.com/rust-lang/crates.io-index" 2197 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2198 | 2199 | [[package]] 2200 | name = "utf8_iter" 2201 | version = "1.0.4" 2202 | source = "registry+https://github.com/rust-lang/crates.io-index" 2203 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2204 | 2205 | [[package]] 2206 | name = "utf8parse" 2207 | version = "0.2.2" 2208 | source = "registry+https://github.com/rust-lang/crates.io-index" 2209 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2210 | 2211 | [[package]] 2212 | name = "v_htmlescape" 2213 | version = "0.15.8" 2214 | source = "registry+https://github.com/rust-lang/crates.io-index" 2215 | checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" 2216 | 2217 | [[package]] 2218 | name = "version_check" 2219 | version = "0.9.5" 2220 | source = "registry+https://github.com/rust-lang/crates.io-index" 2221 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2222 | 2223 | [[package]] 2224 | name = "want" 2225 | version = "0.3.1" 2226 | source = "registry+https://github.com/rust-lang/crates.io-index" 2227 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" 2228 | dependencies = [ 2229 | "try-lock", 2230 | ] 2231 | 2232 | [[package]] 2233 | name = "wasi" 2234 | version = "0.11.0+wasi-snapshot-preview1" 2235 | source = "registry+https://github.com/rust-lang/crates.io-index" 2236 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2237 | 2238 | [[package]] 2239 | name = "wasite" 2240 | version = "0.1.0" 2241 | source = "registry+https://github.com/rust-lang/crates.io-index" 2242 | checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" 2243 | 2244 | [[package]] 2245 | name = "wasm-bindgen" 2246 | version = "0.2.100" 2247 | source = "registry+https://github.com/rust-lang/crates.io-index" 2248 | checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" 2249 | dependencies = [ 2250 | "cfg-if", 2251 | "once_cell", 2252 | "rustversion", 2253 | "wasm-bindgen-macro", 2254 | ] 2255 | 2256 | [[package]] 2257 | name = "wasm-bindgen-backend" 2258 | version = "0.2.100" 2259 | source = "registry+https://github.com/rust-lang/crates.io-index" 2260 | checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" 2261 | dependencies = [ 2262 | "bumpalo", 2263 | "log", 2264 | "proc-macro2", 2265 | "quote", 2266 | "syn", 2267 | "wasm-bindgen-shared", 2268 | ] 2269 | 2270 | [[package]] 2271 | name = "wasm-bindgen-futures" 2272 | version = "0.4.50" 2273 | source = "registry+https://github.com/rust-lang/crates.io-index" 2274 | checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" 2275 | dependencies = [ 2276 | "cfg-if", 2277 | "js-sys", 2278 | "once_cell", 2279 | "wasm-bindgen", 2280 | "web-sys", 2281 | ] 2282 | 2283 | [[package]] 2284 | name = "wasm-bindgen-macro" 2285 | version = "0.2.100" 2286 | source = "registry+https://github.com/rust-lang/crates.io-index" 2287 | checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" 2288 | dependencies = [ 2289 | "quote", 2290 | "wasm-bindgen-macro-support", 2291 | ] 2292 | 2293 | [[package]] 2294 | name = "wasm-bindgen-macro-support" 2295 | version = "0.2.100" 2296 | source = "registry+https://github.com/rust-lang/crates.io-index" 2297 | checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" 2298 | dependencies = [ 2299 | "proc-macro2", 2300 | "quote", 2301 | "syn", 2302 | "wasm-bindgen-backend", 2303 | "wasm-bindgen-shared", 2304 | ] 2305 | 2306 | [[package]] 2307 | name = "wasm-bindgen-shared" 2308 | version = "0.2.100" 2309 | source = "registry+https://github.com/rust-lang/crates.io-index" 2310 | checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" 2311 | dependencies = [ 2312 | "unicode-ident", 2313 | ] 2314 | 2315 | [[package]] 2316 | name = "wasm-streams" 2317 | version = "0.4.2" 2318 | source = "registry+https://github.com/rust-lang/crates.io-index" 2319 | checksum = "15053d8d85c7eccdbefef60f06769760a563c7f0a9d6902a13d35c7800b0ad65" 2320 | dependencies = [ 2321 | "futures-util", 2322 | "js-sys", 2323 | "wasm-bindgen", 2324 | "wasm-bindgen-futures", 2325 | "web-sys", 2326 | ] 2327 | 2328 | [[package]] 2329 | name = "web-sys" 2330 | version = "0.3.77" 2331 | source = "registry+https://github.com/rust-lang/crates.io-index" 2332 | checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" 2333 | dependencies = [ 2334 | "js-sys", 2335 | "wasm-bindgen", 2336 | ] 2337 | 2338 | [[package]] 2339 | name = "web-time" 2340 | version = "1.1.0" 2341 | source = "registry+https://github.com/rust-lang/crates.io-index" 2342 | checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" 2343 | dependencies = [ 2344 | "js-sys", 2345 | "wasm-bindgen", 2346 | ] 2347 | 2348 | [[package]] 2349 | name = "webpki-roots" 2350 | version = "0.26.7" 2351 | source = "registry+https://github.com/rust-lang/crates.io-index" 2352 | checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" 2353 | dependencies = [ 2354 | "rustls-pki-types", 2355 | ] 2356 | 2357 | [[package]] 2358 | name = "whoami" 2359 | version = "1.5.2" 2360 | source = "registry+https://github.com/rust-lang/crates.io-index" 2361 | checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" 2362 | dependencies = [ 2363 | "redox_syscall", 2364 | "wasite", 2365 | "web-sys", 2366 | ] 2367 | 2368 | [[package]] 2369 | name = "windows-registry" 2370 | version = "0.2.0" 2371 | source = "registry+https://github.com/rust-lang/crates.io-index" 2372 | checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0" 2373 | dependencies = [ 2374 | "windows-result", 2375 | "windows-strings", 2376 | "windows-targets", 2377 | ] 2378 | 2379 | [[package]] 2380 | name = "windows-result" 2381 | version = "0.2.0" 2382 | source = "registry+https://github.com/rust-lang/crates.io-index" 2383 | checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" 2384 | dependencies = [ 2385 | "windows-targets", 2386 | ] 2387 | 2388 | [[package]] 2389 | name = "windows-strings" 2390 | version = "0.1.0" 2391 | source = "registry+https://github.com/rust-lang/crates.io-index" 2392 | checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" 2393 | dependencies = [ 2394 | "windows-result", 2395 | "windows-targets", 2396 | ] 2397 | 2398 | [[package]] 2399 | name = "windows-sys" 2400 | version = "0.52.0" 2401 | source = "registry+https://github.com/rust-lang/crates.io-index" 2402 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2403 | dependencies = [ 2404 | "windows-targets", 2405 | ] 2406 | 2407 | [[package]] 2408 | name = "windows-sys" 2409 | version = "0.59.0" 2410 | source = "registry+https://github.com/rust-lang/crates.io-index" 2411 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2412 | dependencies = [ 2413 | "windows-targets", 2414 | ] 2415 | 2416 | [[package]] 2417 | name = "windows-targets" 2418 | version = "0.52.6" 2419 | source = "registry+https://github.com/rust-lang/crates.io-index" 2420 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2421 | dependencies = [ 2422 | "windows_aarch64_gnullvm", 2423 | "windows_aarch64_msvc", 2424 | "windows_i686_gnu", 2425 | "windows_i686_gnullvm", 2426 | "windows_i686_msvc", 2427 | "windows_x86_64_gnu", 2428 | "windows_x86_64_gnullvm", 2429 | "windows_x86_64_msvc", 2430 | ] 2431 | 2432 | [[package]] 2433 | name = "windows_aarch64_gnullvm" 2434 | version = "0.52.6" 2435 | source = "registry+https://github.com/rust-lang/crates.io-index" 2436 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2437 | 2438 | [[package]] 2439 | name = "windows_aarch64_msvc" 2440 | version = "0.52.6" 2441 | source = "registry+https://github.com/rust-lang/crates.io-index" 2442 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2443 | 2444 | [[package]] 2445 | name = "windows_i686_gnu" 2446 | version = "0.52.6" 2447 | source = "registry+https://github.com/rust-lang/crates.io-index" 2448 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2449 | 2450 | [[package]] 2451 | name = "windows_i686_gnullvm" 2452 | version = "0.52.6" 2453 | source = "registry+https://github.com/rust-lang/crates.io-index" 2454 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2455 | 2456 | [[package]] 2457 | name = "windows_i686_msvc" 2458 | version = "0.52.6" 2459 | source = "registry+https://github.com/rust-lang/crates.io-index" 2460 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2461 | 2462 | [[package]] 2463 | name = "windows_x86_64_gnu" 2464 | version = "0.52.6" 2465 | source = "registry+https://github.com/rust-lang/crates.io-index" 2466 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2467 | 2468 | [[package]] 2469 | name = "windows_x86_64_gnullvm" 2470 | version = "0.52.6" 2471 | source = "registry+https://github.com/rust-lang/crates.io-index" 2472 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2473 | 2474 | [[package]] 2475 | name = "windows_x86_64_msvc" 2476 | version = "0.52.6" 2477 | source = "registry+https://github.com/rust-lang/crates.io-index" 2478 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2479 | 2480 | [[package]] 2481 | name = "write16" 2482 | version = "1.0.0" 2483 | source = "registry+https://github.com/rust-lang/crates.io-index" 2484 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2485 | 2486 | [[package]] 2487 | name = "writeable" 2488 | version = "0.5.5" 2489 | source = "registry+https://github.com/rust-lang/crates.io-index" 2490 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2491 | 2492 | [[package]] 2493 | name = "yoke" 2494 | version = "0.7.5" 2495 | source = "registry+https://github.com/rust-lang/crates.io-index" 2496 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2497 | dependencies = [ 2498 | "serde", 2499 | "stable_deref_trait", 2500 | "yoke-derive", 2501 | "zerofrom", 2502 | ] 2503 | 2504 | [[package]] 2505 | name = "yoke-derive" 2506 | version = "0.7.5" 2507 | source = "registry+https://github.com/rust-lang/crates.io-index" 2508 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2509 | dependencies = [ 2510 | "proc-macro2", 2511 | "quote", 2512 | "syn", 2513 | "synstructure", 2514 | ] 2515 | 2516 | [[package]] 2517 | name = "zerocopy" 2518 | version = "0.7.35" 2519 | source = "registry+https://github.com/rust-lang/crates.io-index" 2520 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2521 | dependencies = [ 2522 | "byteorder", 2523 | "zerocopy-derive", 2524 | ] 2525 | 2526 | [[package]] 2527 | name = "zerocopy-derive" 2528 | version = "0.7.35" 2529 | source = "registry+https://github.com/rust-lang/crates.io-index" 2530 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2531 | dependencies = [ 2532 | "proc-macro2", 2533 | "quote", 2534 | "syn", 2535 | ] 2536 | 2537 | [[package]] 2538 | name = "zerofrom" 2539 | version = "0.1.5" 2540 | source = "registry+https://github.com/rust-lang/crates.io-index" 2541 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 2542 | dependencies = [ 2543 | "zerofrom-derive", 2544 | ] 2545 | 2546 | [[package]] 2547 | name = "zerofrom-derive" 2548 | version = "0.1.5" 2549 | source = "registry+https://github.com/rust-lang/crates.io-index" 2550 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 2551 | dependencies = [ 2552 | "proc-macro2", 2553 | "quote", 2554 | "syn", 2555 | "synstructure", 2556 | ] 2557 | 2558 | [[package]] 2559 | name = "zeroize" 2560 | version = "1.8.1" 2561 | source = "registry+https://github.com/rust-lang/crates.io-index" 2562 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" 2563 | 2564 | [[package]] 2565 | name = "zerovec" 2566 | version = "0.10.4" 2567 | source = "registry+https://github.com/rust-lang/crates.io-index" 2568 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2569 | dependencies = [ 2570 | "yoke", 2571 | "zerofrom", 2572 | "zerovec-derive", 2573 | ] 2574 | 2575 | [[package]] 2576 | name = "zerovec-derive" 2577 | version = "0.10.3" 2578 | source = "registry+https://github.com/rust-lang/crates.io-index" 2579 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2580 | dependencies = [ 2581 | "proc-macro2", 2582 | "quote", 2583 | "syn", 2584 | ] 2585 | 2586 | [[package]] 2587 | name = "zstd" 2588 | version = "0.13.2" 2589 | source = "registry+https://github.com/rust-lang/crates.io-index" 2590 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 2591 | dependencies = [ 2592 | "zstd-safe", 2593 | ] 2594 | 2595 | [[package]] 2596 | name = "zstd-safe" 2597 | version = "7.2.1" 2598 | source = "registry+https://github.com/rust-lang/crates.io-index" 2599 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 2600 | dependencies = [ 2601 | "zstd-sys", 2602 | ] 2603 | 2604 | [[package]] 2605 | name = "zstd-sys" 2606 | version = "2.0.13+zstd.1.5.6" 2607 | source = "registry+https://github.com/rust-lang/crates.io-index" 2608 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 2609 | dependencies = [ 2610 | "cc", 2611 | "pkg-config", 2612 | ] 2613 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "ai" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | actix-cors = "0.7.0" 8 | actix-files = "0.6.6" 9 | actix-web = "4.9.0" 10 | async-stream = "0.3.6" 11 | deadpool-postgres = "0.14.1" 12 | env_logger = "0.11.6" 13 | futures = "0.3.31" 14 | minijinja = { version = "2.6.0", features = ["loader"] } 15 | once_cell = "1.20.2" 16 | reqwest = { version = "0.12.12", default-features = false, features = ["json", "rustls-tls"] } 17 | reqwest-streams = { version = "0.9.0", features = ["json"] } 18 | serde = { version = "1.0.217", features = ["derive"] } 19 | serde_json = "1.0.137" 20 | tokio = "1.43.0" 21 | tokio-postgres = { version = "0.7.12", features = ["with-serde_json-1"] } 22 | 23 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | # Build stage 2 | FROM rust:1.75-slim-bookworm AS builder 3 | 4 | WORKDIR /usr/src/app 5 | 6 | # Install pkg-config and openssl for potential dependencies 7 | RUN apt-get update && \ 8 | apt-get install -y pkg-config libssl-dev && \ 9 | rm -rf /var/lib/apt/lists/* 10 | 11 | # Copy over your manifests 12 | COPY Cargo.toml Cargo.lock ./ 13 | 14 | # Copy your source code 15 | COPY src ./src 16 | COPY templates ./templates 17 | 18 | # Build the actual application 19 | RUN cargo build --release 20 | 21 | # Final stage 22 | FROM debian:bookworm-slim 23 | 24 | # Install SSL certificates for HTTPS requests 25 | RUN apt-get update && \ 26 | apt-get install -y ca-certificates && \ 27 | rm -rf /var/lib/apt/lists/* 28 | 29 | WORKDIR /app 30 | 31 | COPY --from=builder /usr/src/app/target/release/ai . 32 | COPY --from=builder /usr/src/app/templates ./templates 33 | 34 | # Set the startup command 35 | ENV KEY="" 36 | EXPOSE 8080 37 | 38 | CMD ["./ai"] 39 | 40 | -------------------------------------------------------------------------------- /README.txt: -------------------------------------------------------------------------------- 1 | ai.hackclub.com 2 | 3 | An experimental service providing unlimited /chat/completions for free, for teens in Hack Club. 4 | No API key needed. 5 | 6 | Example usage: 7 | 8 | curl -X POST https://ai.hackclub.com/chat/completions \ 9 | -H "Content-Type: application/json" \ 10 | -d '{ 11 | "messages": [{"role": "user", "content": "Tell me a joke!"}] 12 | }' 13 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use actix_files::NamedFile; 2 | use actix_web::error::ErrorBadRequest; 3 | use actix_web::{ 4 | get, 5 | middleware::Logger, 6 | post, 7 | web::{self, Bytes}, 8 | App, HttpRequest, HttpResponse, HttpServer, Responder, 9 | }; 10 | use async_stream::stream; 11 | use deadpool_postgres::{Config, ManagerConfig, Pool, RecyclingMethod, Runtime}; 12 | use futures::stream::BoxStream as _; 13 | use futures::StreamExt; 14 | use minijinja::{context, path_loader, Environment}; 15 | use reqwest::{header, Client}; 16 | use reqwest_streams::JsonStreamResponse as _; 17 | use serde::{Deserialize, Serialize}; 18 | use std::path::PathBuf; 19 | 20 | fn remove_field(value: &mut serde_json::Value, key: &str) { 21 | if let serde_json::Value::Object(ref mut map) = value { 22 | map.remove(key); 23 | } 24 | } 25 | 26 | #[get("/")] 27 | async fn index(data: web::Data) -> Result> { 28 | let conn = data.db_pool.get().await.map_err(|e| { 29 | eprintln!("Failed to get DB connection: {:?}", e); 30 | actix_web::error::ErrorInternalServerError("Database error") 31 | })?; 32 | let sum: f32 = conn 33 | .query( 34 | "SELECT SUM((response->'usage'->>'total_tokens')::real) FROM api_request_logs;", 35 | &[], 36 | ) 37 | .await?[0] 38 | .get("sum"); 39 | println!("{:#?}", sum as i32); 40 | 41 | let mut env = Environment::new(); 42 | env.set_loader(path_loader("templates")); 43 | let tmpl = env.get_template("index.jinja")?; 44 | let page = tmpl.render( 45 | context!(total_tokens => (sum as i32), model => std::env::var("COMPLETIONS_MODEL")?), 46 | )?; 47 | 48 | Ok(HttpResponse::Ok().content_type("text/html").body(page)) 49 | } 50 | 51 | #[post("/echo")] 52 | async fn echo(req_body: String) -> impl Responder { 53 | HttpResponse::Ok().body(req_body) 54 | } 55 | 56 | async fn manual_hello() -> impl Responder { 57 | HttpResponse::Ok().body("Hey there!") 58 | } 59 | 60 | mod chat { 61 | use super::*; 62 | 63 | #[derive(Serialize, Deserialize, Debug, Clone)] 64 | pub struct ChatCompletionMessage { 65 | role: String, 66 | content: String, 67 | } 68 | 69 | #[derive(Serialize, Deserialize, Debug, Clone)] 70 | pub struct RequestPayload { 71 | model: Option, 72 | messages: Vec, 73 | stream: Option, 74 | } 75 | 76 | pub async fn completions( 77 | data: web::Data, 78 | body: web::Json, 79 | req: HttpRequest, 80 | ) -> Result> { 81 | // let messages = serde_json::to_string(&body.messages)?; 82 | 83 | if let Some(peer_addr) = req.peer_addr() { 84 | println!("Address: {:?}", peer_addr.ip().to_string()); 85 | } 86 | 87 | println!("{:?}", req.headers()); 88 | 89 | let mut res = data 90 | .client 91 | .post(std::env::var("COMPLETIONS_URL").unwrap()) 92 | .json(&RequestPayload { 93 | model: Some(std::env::var("COMPLETIONS_MODEL").unwrap().to_string()), 94 | messages: body.messages.clone(), 95 | stream: body.stream, 96 | }) 97 | .send() 98 | .await?; 99 | 100 | if body.stream == Some(true) { 101 | let mut stream_res = res.json_array_stream::(64 * 16); 102 | 103 | let processed_stream = stream! { 104 | while let Some(item) = stream_res.next().await { 105 | match item { 106 | Ok(mut val) => { 107 | // Save to DB 108 | log_reqres(data.clone(), body.clone(), req.clone(), val.clone()); 109 | 110 | remove_field(&mut val, "usage"); 111 | println!("val: {:#?}", val); 112 | 113 | match serde_json::to_vec(&val) { 114 | Ok(mut bytes) => { 115 | bytes.extend(b"\n"); 116 | yield Ok::>(Bytes::from(bytes)); 117 | }, 118 | Err(e) => yield Err::(e.into()), 119 | } 120 | }, 121 | Err(e) => yield Err::(e.into()), 122 | } 123 | // Force flush after each chunk 124 | //tokio::time::sleep(tokio::time::Duration::from_millis(10)).await; 125 | } 126 | }; 127 | 128 | return Ok(HttpResponse::Ok() 129 | .content_type("application/x-ndjson") 130 | .streaming(Box::pin(processed_stream))); 131 | } else { 132 | let mut res_json = res.json::().await?; 133 | println!("non-streaming resp: {:#?}", res_json); 134 | log_reqres(data.clone(), body.clone(), req.clone(), res_json.clone()); 135 | 136 | remove_field(&mut res_json, "usage"); 137 | Ok(HttpResponse::Ok() 138 | .content_type("application/json") 139 | .json(res_json)) 140 | } 141 | } 142 | 143 | fn log_reqres( 144 | data: web::Data, 145 | body: RequestPayload, 146 | req: HttpRequest, 147 | res: serde_json::Value, 148 | ) { 149 | // Extract needed values from HttpRequest before moving into async block 150 | let peer_ip = req 151 | .peer_addr() 152 | .map(|a| a.ip()) 153 | .unwrap_or_else(|| "0.0.0.0".parse().unwrap()); 154 | 155 | let user_agent = req 156 | .headers() 157 | .get("user-agent") 158 | .and_then(|v| v.to_str().ok()) 159 | .map(String::from); 160 | 161 | println!("Spawning log task"); 162 | tokio::task::spawn(async move { 163 | let conn = match data.db_pool.get().await { 164 | Ok(c) => c, 165 | Err(e) => { 166 | eprintln!("Failed to get DB connection: {}", e); 167 | return; 168 | } 169 | }; 170 | 171 | let body_value = match serde_json::to_value(body /*.into_inner()*/) { 172 | Ok(v) => v, 173 | Err(e) => { 174 | eprintln!("Failed to serialize body: {}", e); 175 | return; 176 | } 177 | }; 178 | 179 | if let Err(e) = conn.execute( 180 | "INSERT INTO api_request_logs (request, response, ip, user_agent) VALUES ($1, $2, $3, $4)", 181 | &[&body_value, &res, &peer_ip, &user_agent] 182 | ).await { 183 | eprintln!("Failed to insert log: {}", e); 184 | } 185 | }); 186 | } 187 | } 188 | 189 | struct AppState { 190 | client: Client, 191 | db_pool: Pool, 192 | } 193 | 194 | #[get("/model")] 195 | async fn get_model() -> Result> { 196 | let model = std::env::var("COMPLETIONS_MODEL")?; 197 | Ok(HttpResponse::Ok().body(model)) 198 | } 199 | 200 | #[actix_web::main] 201 | pub async fn main() -> std::io::Result<()> { 202 | env_logger::init_from_env(env_logger::Env::new().default_filter_or("debug")); 203 | 204 | //#region DB setup 205 | let mut db_cfg = Config::new(); 206 | db_cfg.url = Some(std::env::var("DB_URL").expect("a Postgres URL").to_string()); 207 | db_cfg.manager = Some(ManagerConfig { 208 | recycling_method: RecyclingMethod::Fast, 209 | }); 210 | let db_pool = db_cfg 211 | .create_pool(Some(Runtime::Tokio1), tokio_postgres::NoTls) 212 | .unwrap(); 213 | db_pool 214 | .get() 215 | .await 216 | .unwrap() 217 | .batch_execute( 218 | "CREATE TABLE IF NOT EXISTS api_request_logs ( 219 | id SERIAL PRIMARY KEY, 220 | request JSONB NOT NULL, 221 | response JSONB NOT NULL, 222 | ip INET NOT NULL, 223 | user_agent VARCHAR(512), 224 | created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP 225 | );", 226 | ) 227 | .await 228 | .unwrap(); 229 | //#endregion 230 | 231 | HttpServer::new(move || { 232 | let mut headers = header::HeaderMap::new(); 233 | headers.insert( 234 | header::CONTENT_TYPE, 235 | header::HeaderValue::from_static("application/json"), 236 | ); 237 | 238 | let bearer = format!("Bearer {}", std::env::var("KEY").expect("an API key")); 239 | let mut token = header::HeaderValue::from_str(&bearer).unwrap(); 240 | token.set_sensitive(true); 241 | headers.insert(header::AUTHORIZATION, token); 242 | let client = reqwest::Client::builder() 243 | .default_headers(headers) 244 | .build() 245 | .expect("a successfully built client"); 246 | 247 | let app_state = AppState { 248 | client, 249 | db_pool: db_pool.clone(), 250 | }; 251 | 252 | App::new() 253 | .wrap(actix_cors::Cors::permissive()) 254 | .app_data(web::Data::new(app_state)) 255 | .service(index) 256 | .service(echo) 257 | .service(get_model) 258 | .route("/chat/completions", web::post().to(chat::completions)) 259 | .route("/hey", web::get().to(manual_hello)) 260 | .wrap(Logger::default()) 261 | }) 262 | .bind(("0.0.0.0", 8080))? 263 | .run() 264 | .await 265 | } 266 | 267 | /* 268 | * curl https://api.deepseek.com/chat/completions \ 269 | -H "Content-Type: application/json" \ 270 | -H "Authorization: Bearer " \ 271 | -d '{ 272 | "model": "deepseek-chat", 273 | "messages": [ 274 | {"role": "system", "content": "You are a helpful assistant."}, 275 | {"role": "user", "content": "Hello!"} 276 | ], 277 | "stream": false 278 | }' 279 | */ 280 | -------------------------------------------------------------------------------- /templates/index.jinja: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Hack Club | AI 7 | 8 | 9 |
10 |

ai.hackclub.com

11 |

12 | An experimental service providing unlimited 13 | /chat/completions for free, for teens in 14 | Hack Club. No API 15 | key needed. 16 |

17 |

18 | {{ total_tokens }} tokens processed since January 2025. Current 19 | model: 20 | {{ model }}. 23 |

24 |

25 | Open source at 26 | github.com/hackclub/ai! 27 |

28 |
29 | 30 |
31 |

Usage

32 |

Chat Completions

33 |
curl -X POST https://ai.hackclub.com/chat/completions \
34 |     -H "Content-Type: application/json" \
35 |     -d '{
36 |         "messages": [{"role": "user", "content": "Tell me a joke!"}]
37 |     }'
38 | 39 |

Get Current Model

40 |

To get current model:

41 |
curl https://ai.hackclub.com/model
42 |

Example response: {{ model }}

43 |
44 | 45 |
46 |

Terms

47 |

48 | You must be a teenager in the Hack Club Slack. 49 | All requests and responses are logged to prevent abuse. 50 | Projects only - no personal use. This means you can't use it in Cursor or anything similar for the moment! 51 | Abuse means this will get shut down - we're a nonprofit funded by donations. 52 |

53 |
54 | 55 | 56 | -------------------------------------------------------------------------------- /tests/node/.gitignore: -------------------------------------------------------------------------------- 1 | # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore 2 | 3 | # Logs 4 | 5 | logs 6 | _.log 7 | npm-debug.log_ 8 | yarn-debug.log* 9 | yarn-error.log* 10 | lerna-debug.log* 11 | .pnpm-debug.log* 12 | 13 | # Caches 14 | 15 | .cache 16 | 17 | # Diagnostic reports (https://nodejs.org/api/report.html) 18 | 19 | report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json 20 | 21 | # Runtime data 22 | 23 | pids 24 | _.pid 25 | _.seed 26 | *.pid.lock 27 | 28 | # Directory for instrumented libs generated by jscoverage/JSCover 29 | 30 | lib-cov 31 | 32 | # Coverage directory used by tools like istanbul 33 | 34 | coverage 35 | *.lcov 36 | 37 | # nyc test coverage 38 | 39 | .nyc_output 40 | 41 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 42 | 43 | .grunt 44 | 45 | # Bower dependency directory (https://bower.io/) 46 | 47 | bower_components 48 | 49 | # node-waf configuration 50 | 51 | .lock-wscript 52 | 53 | # Compiled binary addons (https://nodejs.org/api/addons.html) 54 | 55 | build/Release 56 | 57 | # Dependency directories 58 | 59 | node_modules/ 60 | jspm_packages/ 61 | 62 | # Snowpack dependency directory (https://snowpack.dev/) 63 | 64 | web_modules/ 65 | 66 | # TypeScript cache 67 | 68 | *.tsbuildinfo 69 | 70 | # Optional npm cache directory 71 | 72 | .npm 73 | 74 | # Optional eslint cache 75 | 76 | .eslintcache 77 | 78 | # Optional stylelint cache 79 | 80 | .stylelintcache 81 | 82 | # Microbundle cache 83 | 84 | .rpt2_cache/ 85 | .rts2_cache_cjs/ 86 | .rts2_cache_es/ 87 | .rts2_cache_umd/ 88 | 89 | # Optional REPL history 90 | 91 | .node_repl_history 92 | 93 | # Output of 'npm pack' 94 | 95 | *.tgz 96 | 97 | # Yarn Integrity file 98 | 99 | .yarn-integrity 100 | 101 | # dotenv environment variable files 102 | 103 | .env 104 | .env.development.local 105 | .env.test.local 106 | .env.production.local 107 | .env.local 108 | 109 | # parcel-bundler cache (https://parceljs.org/) 110 | 111 | .parcel-cache 112 | 113 | # Next.js build output 114 | 115 | .next 116 | out 117 | 118 | # Nuxt.js build / generate output 119 | 120 | .nuxt 121 | dist 122 | 123 | # Gatsby files 124 | 125 | # Comment in the public line in if your project uses Gatsby and not Next.js 126 | 127 | # https://nextjs.org/blog/next-9-1#public-directory-support 128 | 129 | # public 130 | 131 | # vuepress build output 132 | 133 | .vuepress/dist 134 | 135 | # vuepress v2.x temp and cache directory 136 | 137 | .temp 138 | 139 | # Docusaurus cache and generated files 140 | 141 | .docusaurus 142 | 143 | # Serverless directories 144 | 145 | .serverless/ 146 | 147 | # FuseBox cache 148 | 149 | .fusebox/ 150 | 151 | # DynamoDB Local files 152 | 153 | .dynamodb/ 154 | 155 | # TernJS port file 156 | 157 | .tern-port 158 | 159 | # Stores VSCode versions used for testing VSCode extensions 160 | 161 | .vscode-test 162 | 163 | # yarn v2 164 | 165 | .yarn/cache 166 | .yarn/unplugged 167 | .yarn/build-state.yml 168 | .yarn/install-state.gz 169 | .pnp.* 170 | 171 | # IntelliJ based IDEs 172 | .idea 173 | 174 | # Finder (MacOS) folder config 175 | .DS_Store 176 | -------------------------------------------------------------------------------- /tests/node/README.md: -------------------------------------------------------------------------------- 1 | # node 2 | 3 | To install dependencies: 4 | 5 | ```bash 6 | bun install 7 | ``` 8 | 9 | To run: 10 | 11 | ```bash 12 | bun run index.ts 13 | ``` 14 | 15 | This project was created using `bun init` in bun v1.1.38. [Bun](https://bun.sh) is a fast all-in-one JavaScript runtime. 16 | -------------------------------------------------------------------------------- /tests/node/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackclub/ai/9ed4f29484cb07dc096d25e49ce495388dcfcfa4/tests/node/bun.lockb -------------------------------------------------------------------------------- /tests/node/index.ts: -------------------------------------------------------------------------------- 1 | import OpenAI from 'openai'; 2 | 3 | const client = new OpenAI({ 4 | baseURL: 'http://localhost:8080/', 5 | apiKey: 'ollama', 6 | }) 7 | 8 | 9 | const stream = await client.chat.completions.create({ 10 | messages: [{ role: 'user', content: 'Say this is a test' }], 11 | model: "test", 12 | stream: true 13 | }); 14 | 15 | for await (const chunk of stream) { 16 | console.log(chunk); 17 | } 18 | 19 | //console.log(chatCompletion) 20 | 21 | -------------------------------------------------------------------------------- /tests/node/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "node", 3 | "module": "index.ts", 4 | "type": "module", 5 | "devDependencies": { 6 | "@types/bun": "latest" 7 | }, 8 | "peerDependencies": { 9 | "typescript": "^5.0.0" 10 | }, 11 | "dependencies": { 12 | "openai": "^4.80.1" 13 | } 14 | } -------------------------------------------------------------------------------- /tests/node/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | // Enable latest features 4 | "lib": ["ESNext", "DOM"], 5 | "target": "ESNext", 6 | "module": "ESNext", 7 | "moduleDetection": "force", 8 | "jsx": "react-jsx", 9 | "allowJs": true, 10 | 11 | // Bundler mode 12 | "moduleResolution": "bundler", 13 | "allowImportingTsExtensions": true, 14 | "verbatimModuleSyntax": true, 15 | "noEmit": true, 16 | 17 | // Best practices 18 | "strict": true, 19 | "skipLibCheck": true, 20 | "noFallthroughCasesInSwitch": true, 21 | 22 | // Some stricter flags (disabled by default) 23 | "noUnusedLocals": false, 24 | "noUnusedParameters": false, 25 | "noPropertyAccessFromIndexSignature": false 26 | } 27 | } 28 | --------------------------------------------------------------------------------