mq-bridge-basic 0.4.19__tar.gz → 0.4.20__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (402) hide show
  1. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.dockerignore +1 -1
  2. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/dependabot.yml +2 -1
  3. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/app.yml +5 -0
  4. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/ci.yml +5 -0
  5. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/docs.yml +13 -9
  6. mq_bridge_basic-0.4.20/.github/workflows/examples.yml +62 -0
  7. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/AGENTS.md +2 -2
  8. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CHANGELOG.md +149 -1
  9. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/Cargo.lock +185 -154
  10. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/Cargo.toml +16 -10
  11. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/PKG-INFO +1 -1
  12. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/README.md +17 -9
  13. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/DELIVERY.md +5 -7
  14. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/PLUGINS.md +35 -0
  15. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/REFERENCE.md +18 -1
  16. mq_bridge_basic-0.4.20/examples/c-library/publish.c +40 -0
  17. mq_bridge_basic-0.4.20/examples/c-library/smoke.c +371 -0
  18. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/README.md +55 -0
  19. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/docker-compose.yml +53 -0
  20. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/init.sql +11 -0
  21. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/routes.yaml +53 -0
  22. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/search.sh +16 -0
  23. mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/test.sh +43 -0
  24. mq_bridge_basic-0.4.20/examples/transactional-outbox/README.md +49 -0
  25. mq_bridge_basic-0.4.20/examples/transactional-outbox/consume.sh +6 -0
  26. mq_bridge_basic-0.4.20/examples/transactional-outbox/docker-compose.yml +38 -0
  27. mq_bridge_basic-0.4.20/examples/transactional-outbox/init.sql +17 -0
  28. mq_bridge_basic-0.4.20/examples/transactional-outbox/routes.yaml +17 -0
  29. mq_bridge_basic-0.4.20/examples/transactional-outbox/test.sh +50 -0
  30. mq_bridge_basic-0.4.20/include/mq_bridge.h +252 -0
  31. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq-bridge.schema.json +45 -1
  32. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/config.py +2 -0
  33. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/config.pyi +4 -0
  34. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/IBM_MQ.md +1 -1
  35. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/sync-version.mjs +1 -0
  36. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/amqp.rs +1 -1
  37. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/mod.rs +174 -13
  38. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/tests.rs +113 -0
  39. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/mod.rs +78 -19
  40. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/publisher.rs +45 -7
  41. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/stream.rs +24 -81
  42. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/tests.rs +498 -42
  43. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/consumer.rs +542 -61
  44. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/mod.rs +12 -7
  45. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/presets.rs +53 -3
  46. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/kafka.rs +7 -2
  47. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mod.rs +139 -11
  48. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/mod.rs +0 -16
  49. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/readers.rs +3 -54
  50. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/tests.rs +40 -12
  51. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mqtt.rs +1 -1
  52. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/mod.rs +113 -6
  53. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/columns.rs +1 -1
  54. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/mod.rs +38 -26
  55. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/tests.rs +29 -0
  56. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/websocket.rs +9 -3
  57. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/buffer.rs +119 -18
  58. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/cookie_jar.rs +34 -7
  59. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/dlq.rs +108 -0
  60. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/metrics.rs +71 -0
  61. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/mod.rs +164 -0
  62. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/random_panic.rs +117 -0
  63. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/timeout.rs +51 -0
  64. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/builders.rs +261 -0
  65. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/tests.rs +98 -0
  66. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models.rs +25 -3
  67. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/discovery.rs +7 -2
  68. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/mod.rs +79 -6
  69. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/publisher.rs +97 -0
  70. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/crypto_envelope.rs +1 -0
  71. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/mod.rs +10 -0
  72. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/parallel.rs +7 -0
  73. mq_bridge_basic-0.4.20/src/support/redact.rs +57 -0
  74. mq_bridge_basic-0.4.20/src/support/sse.rs +74 -0
  75. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/test_utils.rs +3 -0
  76. mq_bridge_basic-0.4.20/tests/full_plugin_fallback_test.rs +49 -0
  77. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/http.rs +4 -4
  78. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/kafka.rs +11 -6
  79. mq_bridge_basic-0.4.20/tests/plugin_loading_latch_test.rs +28 -0
  80. mq_bridge_basic-0.4.19/benches/ETL_BENCHMARKS.md +0 -85
  81. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.cargo/config.toml +0 -0
  82. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.coderabbit.yaml +0 -0
  83. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  84. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  85. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  86. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/benchmark.yml +0 -0
  87. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/build-node.yml +0 -0
  88. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/conda.yml +0 -0
  89. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/ibm-mq.yml +0 -0
  90. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/node.yml +0 -0
  91. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/publish-node.yml +0 -0
  92. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/publish-python.yml +0 -0
  93. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/python.yml +0 -0
  94. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/release.yml +0 -0
  95. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/test-matrix.yml +0 -0
  96. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.gitignore +0 -0
  97. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.justfile +0 -0
  98. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CLAUDE.md +0 -0
  99. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CONTRIBUTING.md +0 -0
  100. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE +0 -0
  101. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-APACHE +0 -0
  102. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-APACHE.python +0 -0
  103. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-MIT +0 -0
  104. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-MIT.python +0 -0
  105. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE.python +0 -0
  106. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/SECURITY.md +0 -0
  107. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/THIRD_PARTY_LICENSES.txt +0 -0
  108. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/csv_to_json_bench.rs +0 -0
  109. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/middleware_expr_bench.rs +0 -0
  110. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/pack_bench.rs +0 -0
  111. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/performance_bench.rs +0 -0
  112. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/router_bench.rs +0 -0
  113. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/zeromq_backends.rs +0 -0
  114. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/Cargo.toml +0 -0
  115. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/src/lib.rs +0 -0
  116. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/src/logging.rs +0 -0
  117. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/build.rs +0 -0
  118. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/deny.toml +0 -0
  119. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/ARCHITECTURE.md +0 -0
  120. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/CONFIGURATION.md +0 -0
  121. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/EXTENDING.md +0 -0
  122. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/GRPC.md +0 -0
  123. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/THIRD_PARTY_LICENSES.md +0 -0
  124. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/assets/copy-demo.png +0 -0
  125. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/CMakeLists.txt +0 -0
  126. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/README.md +0 -0
  127. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_ledger.c +0 -0
  128. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_ledger.h +0 -0
  129. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_parser.c +0 -0
  130. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_parser.h +0 -0
  131. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/minimal.c +0 -0
  132. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/plugin.c +0 -0
  133. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/ipc_worker_queue.yaml +0 -0
  134. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/cbindgen.toml +0 -0
  135. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/mq_bridge_plugin.h +0 -0
  136. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/mq_bridge_plugin_helpers.h +0 -0
  137. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/llms.txt +0 -0
  138. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/__init__.py +0 -0
  139. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/__init__.pyi +0 -0
  140. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/plugin_packaging.py +0 -0
  141. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/py.typed +0 -0
  142. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/package-lock.json +0 -0
  143. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/pyproject.toml +0 -0
  144. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/Cargo.toml +0 -0
  145. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE-APACHE.python +0 -0
  146. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE-MIT.python +0 -0
  147. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE.python +0 -0
  148. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/README.md +0 -0
  149. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +0 -0
  150. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
  151. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/example.py +0 -0
  152. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/bench_memory.py +0 -0
  153. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
  154. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/consume_pull.py +0 -0
  155. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/dlt_source.py +0 -0
  156. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/ibm-mq-input.py +0 -0
  157. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/json_route.py +0 -0
  158. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/memory.yaml +0 -0
  159. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/raw_route.py +0 -0
  160. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/pyproject-basic.toml +0 -0
  161. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
  162. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
  163. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/src/lib.rs +0 -0
  164. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_config_types.py +0 -0
  165. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
  166. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_logging.py +0 -0
  167. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_packaging.py +0 -0
  168. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
  169. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
  170. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_public_api.py +0 -0
  171. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_routes.py +0 -0
  172. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_shutdown.py +0 -0
  173. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/uv.lock +0 -0
  174. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/benches/metadata_bench.rs +0 -0
  175. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
  176. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
  177. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/http_flamegraph.py +0 -0
  178. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
  179. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/run_http_ladder.sh +0 -0
  180. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/ci/format_bench_output.sh +0 -0
  181. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/README.md +0 -0
  182. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
  183. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
  184. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
  185. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +0 -0
  186. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/mqb-agent.py +0 -0
  187. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
  188. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
  189. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
  190. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
  191. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/README.md +0 -0
  192. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/postgres.yml +0 -0
  193. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/seed.sql +0 -0
  194. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/verify.sh +0 -0
  195. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/README.md +0 -0
  196. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
  197. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
  198. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
  199. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/canonical_message.rs +0 -0
  200. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/checkpoint.rs +0 -0
  201. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/command_handler.rs +0 -0
  202. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/config_file.rs +0 -0
  203. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/aws.rs +0 -0
  204. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/clickhouse.rs +0 -0
  205. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/dir_spool/mod.rs +0 -0
  206. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/dir_spool/tests.rs +0 -0
  207. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/csv_dialect.rs +0 -0
  208. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/consumer.rs +0 -0
  209. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/dynamic.rs +0 -0
  210. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/mod.rs +0 -0
  211. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/proto/mqbridge/bridge.proto +0 -0
  212. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/publisher.rs +0 -0
  213. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/server.rs +0 -0
  214. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/tests.rs +0 -0
  215. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/auth.rs +0 -0
  216. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/publisher.rs +0 -0
  217. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/query.rs +0 -0
  218. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/ibm_mq.rs +0 -0
  219. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/endpoint.rs +0 -0
  220. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/framed.rs +0 -0
  221. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/ipc_unix.rs +0 -0
  222. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/ipc_windows.rs +0 -0
  223. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/memory_transport.rs +0 -0
  224. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/mod.rs +0 -0
  225. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/transport.rs +0 -0
  226. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/aggregate.rs +0 -0
  227. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/consumer.rs +0 -0
  228. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/dedup.rs +0 -0
  229. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/publisher.rs +0 -0
  230. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/nats.rs +0 -0
  231. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/object_store.rs +0 -0
  232. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/poll.rs +0 -0
  233. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/VENDORED.md +0 -0
  234. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
  235. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
  236. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
  237. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
  238. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/values.rs +0 -0
  239. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/replication.rs +0 -0
  240. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/state.rs +0 -0
  241. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/redis_streams.rs +0 -0
  242. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sled.rs +0 -0
  243. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/aggregate.rs +0 -0
  244. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/dedup.rs +0 -0
  245. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/fanout.rs +0 -0
  246. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/mod.rs +0 -0
  247. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/null.rs +0 -0
  248. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/reader.rs +0 -0
  249. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/request.rs +0 -0
  250. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/response.rs +0 -0
  251. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/sequence.rs +0 -0
  252. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/static_endpoint.rs +0 -0
  253. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/stream_buffer.rs +0 -0
  254. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/switch.rs +0 -0
  255. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/codec.rs +0 -0
  256. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/mod.rs +0 -0
  257. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/omq.rs +0 -0
  258. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/zmq.rs +0 -0
  259. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/errors.rs +0 -0
  260. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/event_handler.rs +0 -0
  261. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/event_store.rs +0 -0
  262. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/extensions.rs +0 -0
  263. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/lib.rs +0 -0
  264. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/mod.rs +0 -0
  265. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/states.rs +0 -0
  266. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/store.rs +0 -0
  267. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/tests.rs +0 -0
  268. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/writer.rs +0 -0
  269. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/compression.rs +0 -0
  270. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deduplication/memory.rs +0 -0
  271. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deduplication.rs +0 -0
  272. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deferred_commit.rs +0 -0
  273. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/delay.rs +0 -0
  274. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/encryption.rs +0 -0
  275. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/filter.rs +0 -0
  276. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/id.rs +0 -0
  277. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/limiter.rs +0 -0
  278. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/lookup.rs +0 -0
  279. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/otel.rs +0 -0
  280. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/pack.rs +0 -0
  281. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/raw_json.rs +0 -0
  282. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/retry.rs +0 -0
  283. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/coerce.rs +0 -0
  284. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/compiled.rs +0 -0
  285. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/error.rs +0 -0
  286. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/mod.rs +0 -0
  287. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/path.rs +0 -0
  288. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/schema.rs +0 -0
  289. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/tests.rs +0 -0
  290. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/weak_join.rs +0 -0
  291. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/defaults.rs +0 -0
  292. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/secrets.rs +0 -0
  293. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/serde_support.rs +0 -0
  294. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/outcomes.rs +0 -0
  295. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/completion.rs +0 -0
  296. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/conformance.rs +0 -0
  297. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/crash.rs +0 -0
  298. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/endpoint.rs +0 -0
  299. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/forward.rs +0 -0
  300. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/host.rs +0 -0
  301. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/message.rs +0 -0
  302. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/middleware.rs +0 -0
  303. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/sdk.rs +0 -0
  304. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/test_support.rs +0 -0
  305. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/response.rs +0 -0
  306. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/route.rs +0 -0
  307. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/shutdown.rs +0 -0
  308. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/base64_engine.rs +0 -0
  309. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/change_op.rs +0 -0
  310. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/compression.rs +0 -0
  311. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/compression_pool.rs +0 -0
  312. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/config_schema.rs +0 -0
  313. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/connection_registry.rs +0 -0
  314. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/crypto.rs +0 -0
  315. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/http_status.rs +0 -0
  316. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/interpolation.rs +0 -0
  317. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/lookup_batch.rs +0 -0
  318. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/ndjson.rs +0 -0
  319. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/pack.rs +0 -0
  320. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/parquet.rs +0 -0
  321. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/plugin_abi.rs +0 -0
  322. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/poll_job.rs +0 -0
  323. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/source_ranges.rs +0 -0
  324. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/stream_batch.rs +0 -0
  325. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/traits.rs +0 -0
  326. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/type_handler.rs +0 -0
  327. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/README.md +0 -0
  328. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/armature_integration.rs +0 -0
  329. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/compat/python/bridge_client.py +0 -0
  330. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/dedup_store_bench.rs +0 -0
  331. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/delivery_guarantee_test.rs +0 -0
  332. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/amqp.rs +0 -0
  333. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/aws.rs +0 -0
  334. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/clickhouse.rs +0 -0
  335. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/config.toml +0 -0
  336. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/amqp.yml +0 -0
  337. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/aws.yml +0 -0
  338. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/clickhouse.yml +0 -0
  339. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
  340. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
  341. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
  342. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
  343. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
  344. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm_mq.yml +0 -0
  345. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
  346. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/kafka-tls.yml +0 -0
  347. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/kafka.yml +0 -0
  348. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mariadb.yml +0 -0
  349. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
  350. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
  351. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb.yml +0 -0
  352. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto.conf +0 -0
  353. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
  354. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
  355. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mq_init.mqsc +0 -0
  356. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
  357. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mqtt.yml +0 -0
  358. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
  359. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mysql.yml +0 -0
  360. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/nats.yml +0 -0
  361. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/object_store.yml +0 -0
  362. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/postgres.yml +0 -0
  363. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
  364. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/redis.yml +0 -0
  365. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/file.rs +0 -0
  366. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/grpc.rs +0 -0
  367. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/grpc_tls.rs +0 -0
  368. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/http_tls.rs +0 -0
  369. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ibm_mq.rs +0 -0
  370. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ibm_mq_tls.rs +0 -0
  371. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ipc.rs +0 -0
  372. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/kafka_tls.rs +0 -0
  373. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/logic_test.rs +0 -0
  374. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mariadb.rs +0 -0
  375. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/memory.rs +0 -0
  376. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mod.rs +0 -0
  377. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb.rs +0 -0
  378. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb_raw.rs +0 -0
  379. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb_tls.rs +0 -0
  380. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mqtt.rs +0 -0
  381. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mysql.rs +0 -0
  382. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/nats.rs +0 -0
  383. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/object_store.rs +0 -0
  384. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/performance_static.rs +0 -0
  385. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/postgres.rs +0 -0
  386. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/postgres_cdc.rs +0 -0
  387. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/redis_streams.rs +0 -0
  388. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/route.rs +0 -0
  389. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/scripts/gen_certs.sh +0 -0
  390. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/sqlite.rs +0 -0
  391. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/tls_helpers.rs +0 -0
  392. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/websocket.rs +0 -0
  393. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/zeromq.rs +0 -0
  394. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration_test.rs +0 -0
  395. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/memory_leak_test.rs +0 -0
  396. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/otel_test.rs +0 -0
  397. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/ref_test.rs +0 -0
  398. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/reference_docs_test.rs +0 -0
  399. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/sqlite_test.rs +0 -0
  400. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/tls_example.rs +0 -0
  401. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/unit_tests.md +0 -0
  402. {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/websocket_test.rs +0 -0
@@ -5,7 +5,7 @@ logs
5
5
  target
6
6
  **/target
7
7
  **/node_modules
8
- apps/mq-bridge-app/dev/docs/book
8
+ docs/book/book
9
9
 
10
10
  # Local build output
11
11
  **/.venv
@@ -9,7 +9,8 @@ updates:
9
9
  directory: "/" # Location of package manifests
10
10
  target-branch: "dev"
11
11
  schedule:
12
- interval: "monthly"
12
+ # Same cadence as the app workspace below, so the two lockfiles do not drift.
13
+ interval: "weekly"
13
14
  groups:
14
15
  minor-and-patch:
15
16
  applies-to: version-updates
@@ -51,6 +51,7 @@ jobs:
51
51
  cache-workspace-crates: true
52
52
 
53
53
  - name: Install system dependencies
54
+ timeout-minutes: 5
54
55
  run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
55
56
 
56
57
  - name: Test desktop crate
@@ -116,6 +117,7 @@ jobs:
116
117
  cache-dependency-path: apps/mq-bridge-app/package-lock.json
117
118
 
118
119
  - name: Install system dependencies
120
+ timeout-minutes: 5
119
121
  run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
120
122
 
121
123
  - name: Install frontend dependencies
@@ -193,6 +195,7 @@ jobs:
193
195
  cache-workspace-crates: true
194
196
 
195
197
  - name: Install system dependencies
198
+ timeout-minutes: 5
196
199
  run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
197
200
 
198
201
  - name: Run integration suite
@@ -224,6 +227,7 @@ jobs:
224
227
  cache-workspace-crates: true
225
228
 
226
229
  - name: Install system dependencies
230
+ timeout-minutes: 5
227
231
  run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
228
232
 
229
233
  # The test drives the CLI through `env!("CARGO_BIN_EXE_mq-bridge-app")`, an
@@ -294,6 +298,7 @@ jobs:
294
298
  chmod +x "$cli" docker-suite/test-binary
295
299
 
296
300
  - name: Install runtime libraries
301
+ timeout-minutes: 5
297
302
  run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev
298
303
 
299
304
  # The engine's own integration stacks, so there is one definition per
@@ -120,6 +120,11 @@ jobs:
120
120
  - name: C plugin header is current and a C plugin loads
121
121
  run: cargo test -p mq-bridge-plugin-fixture --test plugin_c_header --test plugin_c_abi
122
122
 
123
+ - name: C library header is current and a C program links and runs
124
+ run: cargo test -p mq-bridge-c --no-default-features
125
+ env:
126
+ MQB_C_ASAN: "1" # AddressSanitizer; on Linux it also fails on leaks
127
+
123
128
  - name: Memory leak soak (route commit-task JoinSet)
124
129
  run: cargo test --test memory_leak_test --features=full -- --ignored --nocapture
125
130
 
@@ -5,7 +5,7 @@ on:
5
5
  branches: [main]
6
6
  paths:
7
7
  - "docs/**"
8
- - "apps/mq-bridge-app/dev/docs/**"
8
+ - "llms.txt"
9
9
  - "apps/mq-bridge-app/crates/cli/examples/gen_url_docs.rs"
10
10
  - ".github/workflows/docs.yml"
11
11
  # The benchmark workflow pushes new data to the gh-pages branch; republish the
@@ -38,14 +38,18 @@ jobs:
38
38
  mdbook-version: "0.5.4"
39
39
 
40
40
  - name: Vendor engine docs
41
- run: bash apps/mq-bridge-app/dev/docs/sync-engine-docs.sh
41
+ run: bash docs/book/sync-engine-docs.sh
42
42
 
43
43
  - name: Build book
44
- run: mdbook build apps/mq-bridge-app/dev/docs
44
+ run: mdbook build docs/book
45
45
 
46
- # mdbook copies non-Markdown files from the book source; fail if that ever stops.
47
- - name: Check llms.txt is published
48
- run: test -s apps/mq-bridge-app/dev/docs/book/llms.txt
46
+ # llms.txt lives at the repository root; publish it with the book.
47
+ - name: Publish llms.txt
48
+ run: cp llms.txt docs/book/book/llms.txt
49
+
50
+ # Canonical URLs, meta descriptions, sitemap.xml and llms-full.txt.
51
+ - name: Postprocess book
52
+ run: python3 docs/book/postprocess.py
49
53
 
50
54
  # The benchmark dashboard lives on the gh-pages branch. Copy it into the
51
55
  # book so this workflow is the only thing that publishes to Pages.
@@ -61,8 +65,8 @@ jobs:
61
65
  run: |
62
66
  src=.benchmark-data/dev/bench
63
67
  if [ -d "$src" ]; then
64
- mkdir -p apps/mq-bridge-app/dev/docs/book/dev
65
- cp -R "$src" apps/mq-bridge-app/dev/docs/book/dev/bench
68
+ mkdir -p docs/book/book/dev
69
+ cp -R "$src" docs/book/book/dev/bench
66
70
  else
67
71
  echo "::warning::no benchmark data on gh-pages; /dev/bench/ will be missing"
68
72
  fi
@@ -70,7 +74,7 @@ jobs:
70
74
  - name: Upload Pages artifact
71
75
  uses: actions/upload-pages-artifact@v5
72
76
  with:
73
- path: apps/mq-bridge-app/dev/docs/book
77
+ path: docs/book/book
74
78
 
75
79
  deploy:
76
80
  name: Deploy to Pages
@@ -0,0 +1,62 @@
1
+ name: Examples
2
+
3
+ # Runs the use-case examples under examples/ the way their READMEs describe.
4
+ on:
5
+ push:
6
+ branches: [main]
7
+ paths:
8
+ - "examples/postgres-cdc-to-qdrant/**"
9
+ - "examples/transactional-outbox/**"
10
+ - "examples/test-without-a-broker/**"
11
+ - ".github/workflows/examples.yml"
12
+ pull_request:
13
+ paths:
14
+ - "examples/postgres-cdc-to-qdrant/**"
15
+ - "examples/transactional-outbox/**"
16
+ - "examples/test-without-a-broker/**"
17
+ - ".github/workflows/examples.yml"
18
+ workflow_dispatch:
19
+
20
+ permissions:
21
+ contents: read
22
+
23
+ concurrency:
24
+ group: examples-${{ github.ref }}
25
+ cancel-in-progress: true
26
+
27
+ jobs:
28
+ docker:
29
+ name: ${{ matrix.example }}
30
+ runs-on: ubuntu-latest
31
+ timeout-minutes: 20
32
+ strategy:
33
+ fail-fast: false
34
+ matrix:
35
+ example: [postgres-cdc-to-qdrant, transactional-outbox]
36
+ steps:
37
+ - uses: actions/checkout@v7
38
+ with:
39
+ persist-credentials: false
40
+ - name: Run the example's smoke test
41
+ working-directory: examples/${{ matrix.example }}
42
+ run: ./test.sh
43
+
44
+ test-without-a-broker:
45
+ name: test-without-a-broker
46
+ runs-on: ubuntu-latest
47
+ timeout-minutes: 20
48
+ steps:
49
+ - uses: actions/checkout@v7
50
+ with:
51
+ persist-credentials: false
52
+ - name: Rust
53
+ working-directory: examples/test-without-a-broker
54
+ run: cargo test --locked
55
+ - uses: actions/setup-python@v7
56
+ with:
57
+ python-version: "3.12"
58
+ - name: Python
59
+ working-directory: examples/test-without-a-broker/python
60
+ run: |
61
+ pip install -r requirements.txt
62
+ pytest -q
@@ -186,8 +186,8 @@ The grammar and examples are in [CONFIGURATION.md](docs/CONFIGURATION.md).
186
186
  2. **New middleware**: Add to `middleware/mod.rs`, implement middleware wrapper types
187
187
  3. **Configuration changes**: Update `models.rs` with new config structs, add to `EndpointType`/`Middleware` enums
188
188
  4. **Tests**: Add integration tests in `tests/integration/`, update Docker Compose if needed
189
- 5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `apps/mq-bridge-app/dev/docs/cookbook` and `operations`
189
+ 5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `docs/book/cookbook` and `operations`
190
190
 
191
191
  ### Dependencies
192
192
 
193
- Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The crate has no default features.
193
+ Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The only default features are `file` and `dir-spool`; an endpoint whose feature is off is served by a registered factory of the same name if there is one (see `plugins/full`).
@@ -2,6 +2,154 @@
2
2
 
3
3
  All notable changes to `mq-bridge`. Newest first.
4
4
 
5
+ ## 0.4.20
6
+
7
+ Kafka outputs publish faster with their default settings. If you depend on `mq-bridge` with
8
+ `default-features = false` and use the `file` or `dir_spool` endpoint, read "Behaviour
9
+ changes" first: both are Cargo features now.
10
+
11
+ ### Behaviour changes
12
+
13
+ - **`mqb --ui` listens on `127.0.0.1:9091`, not on `0.0.0.0:9091`.** The UI has no login,
14
+ and the old default put it on the network. The Docker image keeps `0.0.0.0:9091` through
15
+ `ENV MQB_UI_DEFAULT_ADDR`. To reach the UI from another machine, set `ui_addr` in the
16
+ config; a start on such an address logs a warning.
17
+ - **A web UI on a loopback address refuses a request with a foreign `Host` header** (403).
18
+ This stops a web page from reaching the UI through DNS rebinding. Behind a reverse proxy
19
+ or a port forward that sends another host name, list the names in `MQB_UI_ALLOWED_HOSTS`.
20
+ - **`GET /config` of the web UI no longer returns secrets** in any storage mode except
21
+ `unencrypted` and `temporary_messages`. Each secret is shown as a reference to the key it
22
+ is stored under, such as `${MQB__PUBLISHERS__<id>__HTTP__BASIC_AUTH__1}`; a URL keeps
23
+ everything but its password. A save replaces each reference by the stored value, so
24
+ cloning, copying and renaming an endpoint keep its secrets. A reference to a key that is
25
+ not stored is refused with 400. A config exported from the UI holds references, and a
26
+ script that read secrets from this endpoint no longer gets them.
27
+ - **An HTTP output with `tls.required: true` and an `http://` URL fails at start.** It sent
28
+ its requests unencrypted before. An `http://` output to another host that carries
29
+ `basic_auth` or custom headers logs a warning.
30
+
31
+ - **`file` and `dir_spool` are Cargo features: `file` and `dir-spool`.** Both endpoints
32
+ were compiled into every build. They are now in the default features, and in `full` and
33
+ `portable`; `object-store` enables `file`.
34
+ - A dependency with default features, `full` or `portable` builds what it built before.
35
+ - A dependency with `default-features = false` loses both endpoints. A route that names
36
+ one fails at start with `Unsupported consumer endpoint type` (or `publisher`), and code
37
+ that names `endpoints::file` or `endpoints::dir_spool` no longer compiles. To keep them:
38
+
39
+ ```toml
40
+ mq-bridge = { version = "0.4", default-features = false, features = ["file", "dir-spool"] }
41
+ ```
42
+
43
+ - The config types (`FileConfig`, `DirSpoolConfig`) and the `EndpointType` variants stay
44
+ in every build, so a configuration still parses.
45
+ - `mq-bridge-app`, the Python package and the Node.js package are unchanged; they enable
46
+ both.
47
+
48
+ ### Added
49
+
50
+ - **A C library.** The new `c/mq-bridge-c` crate builds `libmq_bridge` (shared and static)
51
+ with the header `include/mq_bridge.h`: messages, publishers (send, batch, request/reply),
52
+ pull consumers with commit and per-batch ack/nack, and routes with handlers, configured
53
+ with the same YAML or JSON as the other bindings. Every call blocks. The header is
54
+ generated and carries no ABI stability promise: it ships with its library, and
55
+ `mqb_api_version()` detects a mismatch. There are no prebuilt archives yet; see
56
+ `c/mq-bridge-c/README.md`.
57
+ - **Plugin tables registered from the host program.** `plugin::register_plugin_table`
58
+ (C: `mqb_register_plugin`) registers an `MqbPluginVTable` that lives in the running
59
+ program, so a C or C++ application defines custom endpoints and middleware without
60
+ building a separate plugin library.
61
+ - **Live status in the CLI, the UI and MCP.** `mqb status` lists every route and consumer that
62
+ any `mqb` process of your user is running on the machine, with state, current and average
63
+ rate, total, pending and uptime. On a terminal it redraws every second; `--no-watch` prints
64
+ once and `--json` prints the records. The
65
+ UI has a **Status** tab with the same rows and the last 60 seconds of each rate, and the MCP
66
+ server has a read-only `bridge_status` tool. `mqb copy` and headless config runs now report
67
+ rates and totals too. Error text stays out of these records unless
68
+ `MQB_STATUS_SHOW_ERRORS=1` is set for both the reporting and the reading process.
69
+ - **`http_bulk` reads an open stream.** `read.stream: sse` or `ndjson` sends one request and
70
+ turns every server-sent event or line of the response into a message, instead of asking
71
+ for pages. An SSE source resumes with `Last-Event-ID` from the last acknowledged event, an
72
+ NDJSON source from a field named by `cursor.item`; both save the position in
73
+ `checkpoint_store` and connect again when the response ends. With a stream,
74
+ `request_timeout_ms` is the longest silence, not the length of the response. This is the
75
+ way to consume a remote SSE feed or a one-response export; the `http` endpoint's
76
+ `receive_streamable` and `stream_response_to` are unchanged.
77
+ - **Named `http_bulk` endpoints from your own crate.** `typesense` and `elasticsearch` are
78
+ `http_bulk` configurations behind a name, and that table was closed.
79
+ `endpoints::http_bulk::register_preset_with(name, schema, resolve)` registers one of your
80
+ own as a `custom` endpoint; `preset_schema`, `preset_base_url` and `preset_segment` are the
81
+ helpers the built-in ones use.
82
+ - **Every built-in endpoint as one plugin library.** The new `plugins/full` crate builds
83
+ `libmq_bridge_full`, which registers a factory for each built-in endpoint under its own
84
+ name. A host compiled without an endpoint's feature and with this library loaded keeps
85
+ using `kafka:`, `file:` and the rest unchanged: a built-in the build has no feature for
86
+ is now served by a factory registered under the same name, and fails as before when there
87
+ is none. The library has its own engine, so `memory` channels, `ref` names and factories
88
+ registered in the host are not shared with the endpoints it creates.
89
+ - **`plugin::disable_plugin_loading()`.** After this call the process opens no plugin
90
+ library any more, neither by path nor by discovery, and there is no way to switch it back
91
+ on. `MQB_PLUGIN_DISCOVERY=0` only covers discovery and has to be set in the environment;
92
+ this is for a host that must rule out native code loaded at runtime.
93
+ - **HTTP input: `header_read_timeout_ms` and `max_body_bytes`.** The first closes an HTTP/1
94
+ connection whose request head is not complete in time, the second sets the largest request
95
+ body, also after decompression (default 256 MiB, as before). The timeout is off by default:
96
+ with `30000` set, a debug build served about 15 to 20 % fewer requests per second on a
97
+ `http` to `response` route. Set it on a listener that is reachable from an untrusted network.
98
+
99
+ ### Changed
100
+
101
+ - **CSV files read at their 0.4.15 speed again.** The quote scan that decides where a CSV
102
+ record ends had become about 15% slower in 0.4.16, when it learned to handle a record
103
+ read in pieces. It now jumps from quote to quote instead of visiting every byte, with the
104
+ same result. A 1,000,000-row CSV → JSONL copy on an Apple M1 takes 0.35 s, against 0.41 s
105
+ with 0.4.19.
106
+ - **CSV files and objects are written faster.** A row whose keys follow the header's
107
+ columns, as every row after the first usually does, is written without building a key
108
+ map first, nested objects under `nested: flatten` included. A 1,000,000-row JSONL → CSV
109
+ copy on an Apple M1 takes 1.12 s instead of 1.45 s, and 0.96 s instead of 2.03 s when
110
+ each row flattens a nested object. The output is byte-identical.
111
+ - **`mqb copy --drain` exits within 5 ms of the last row.** It noticed the end of a route by
112
+ polling every 50 ms, which added up to 50 ms to every copy, noticeable on short ones.
113
+ - **Kafka publishing no longer waits 5 ms per batch.** A Kafka output awaits the delivery of
114
+ every batch, and the producer's `linger.ms` of 5 held each batch back for that long before
115
+ sending it. The default is now 1 ms, which still sends a batch as one request per partition.
116
+ With the defaults (`batch_size: 512`, `concurrency: 1`) a local broker took about 71,000
117
+ messages per second instead of 29,000. `delayed_ack: true`, which awaits nothing, keeps
118
+ 5 ms; the producer a Kafka input uses for replies also moves to 1 ms. A
119
+ `linger.ms` in `producer_options` overrides the default as before.
120
+
121
+ ### Fixed
122
+
123
+ - `mq-bridge-app`: saving a config in `sensitive` or `durable` mode removes the secrets
124
+ that an earlier `balanced` save left in the `.env` file.
125
+ - Desktop app: the list of stored secrets keeps the keys of earlier saves, so "delete
126
+ secrets" also reaches the secret of a renamed or removed endpoint.
127
+ - **Passwords no longer appear in connect logs and error text.** The AMQP and MQTT connect
128
+ lines at INFO printed the broker URL with its password. Errors from the HTTP and WebSocket
129
+ outputs quoted it too. All now show `user:***@host`; the HTTP output's `status()` target
130
+ does the same.
131
+ - **`mqb copy` hides more credentials.** The `copy route started` line now also blanks
132
+ `basic_auth`, `custom_headers`, `headers`, API keys and the credentials of a nested endpoint
133
+ URI (`fanout:?to=…`), percent-encoded or not. Errors about a URI or a middleware spec quote
134
+ it with the same redaction instead of as typed.
135
+ - **`cookie_jar` stores every cookie of a response.** A response with several `Set-Cookie`
136
+ headers left only the last one in the jar. The HTTP output now keeps them all in the
137
+ `set-cookie` metadata, one per line, and an HTTP input that replies with that metadata
138
+ sends one header per line.
139
+ - **HTTP `stream_response_to`: a response that breaks before its first item no longer writes
140
+ to the stream.** The send already failed as retryable, but an error and an end marker went to
141
+ the stream first, so its reader saw a closed stream and a retry refilled it behind the
142
+ reader's back. Now nothing is written until the first item. A response that breaks later is
143
+ unchanged: it ends with an item marked `http_stream_error` and the send is acknowledged.
144
+ - **`postgres_cdc`: a `truncate` event no longer carries `postgres.key`.** It had `[null]`, one
145
+ `null` per key column, which a sink that deletes or upserts by key would take for a row. The
146
+ event keeps a deterministic `message_id`, also on tables without a primary key; that id
147
+ differs from the one earlier versions produced.
148
+ - **A large batch no longer fails a SQL output with an `insert_query`.** A batch that needed
149
+ more bind parameters than the database takes in one statement (65,535 on Postgres) failed
150
+ with `too many arguments for query`. It is now written as several statements in one
151
+ transaction, as `columns: auto` already did.
152
+
5
153
  ## 0.4.19
6
154
 
7
155
  CSV in more shapes: the reader takes other separators and quoting, and a CSV sink no longer
@@ -368,7 +516,7 @@ Each of these changes what an existing setup sees. Check them before upgrading.
368
516
  SOURCE, TARGET and `--filter` of a `copy --resume` job. `reset` prints the old value so
369
517
  `set --value` can undo it. Works for SQL, ClickHouse and object-store cursor readers and
370
518
  MongoDB change streams; Postgres CDC is refused, its slot is authoritative. See
371
- [Checkpoints](apps/mq-bridge-app/dev/docs/cookbook/checkpoints.md#inspecting-and-editing-a-checkpoint).
519
+ [Checkpoints](docs/book/cookbook/checkpoints.md#inspecting-and-editing-a-checkpoint).
372
520
  - **`CheckpointStore::clear`**, implemented for the file, SQL, MongoDB and object-store
373
521
  backends. The default returns an error, so existing implementations still compile.
374
522