langgraph-api 0.15.0rc1__tar.gz → 0.16.0.dev1__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 (314) hide show
  1. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/PKG-INFO +2 -2
  2. langgraph_api-0.16.0.dev1/benchmark/multer.test.js +115 -0
  3. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/package.json +2 -0
  4. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/yarn.lock +30 -74
  5. langgraph_api-0.16.0.dev1/langgraph_api/__init__.py +1 -0
  6. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui.py +12 -4
  7. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/backend.py +2 -0
  8. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/studio_user.py +6 -1
  9. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/__init__.py +4 -0
  10. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/middleware.py +4 -0
  11. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/graph.py +14 -2
  12. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/package.json +3 -3
  13. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/yarn.lock +70 -130
  14. langgraph_api-0.16.0.dev1/langgraph_api/runner/__init__.py +10 -0
  15. langgraph_api-0.16.0.dev1/langgraph_api/runner/__main__.py +275 -0
  16. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_logs.py +4 -0
  17. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/__init__.py +4 -0
  18. langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.py +50 -0
  19. langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.pyi +167 -0
  20. langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.py +108 -0
  21. langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.pyi +73 -0
  22. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/pyproject.toml +1 -1
  23. langgraph_api-0.15.0rc1/langgraph_api/__init__.py +0 -1
  24. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/.gitignore +0 -0
  25. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/LICENSE +0 -0
  26. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/Makefile +0 -0
  27. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/README.md +0 -0
  28. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/.gitignore +0 -0
  29. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/Makefile +0 -0
  30. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/README.md +0 -0
  31. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/assistant.ts +0 -0
  32. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  33. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  34. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  35. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  36. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.test.js +0 -0
  37. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.ts +0 -0
  38. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
  39. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
  40. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta_turns.ts +0 -0
  41. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  42. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/log-failure.ts +0 -0
  43. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  44. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/store.ts +0 -0
  45. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/stream_write.ts +0 -0
  46. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread.ts +0 -0
  47. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  48. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  49. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/types.ts +0 -0
  50. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/wait_write.ts +0 -0
  51. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.js +0 -0
  52. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.test.js +0 -0
  53. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/clean-cli.js +0 -0
  54. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/clean.js +0 -0
  55. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/README.md +0 -0
  56. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/pyproject.toml +0 -0
  57. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/runner.py +0 -0
  58. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/uv.lock +0 -0
  59. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.js +0 -0
  60. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.test.js +0 -0
  61. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/graphs.js +0 -0
  62. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.js +0 -0
  63. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.test.js +0 -0
  64. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/ramp.js +0 -0
  65. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/reporting/dd_reporting.py +0 -0
  66. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/staircase.py +0 -0
  67. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/staircase_step_k6.js +0 -0
  68. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/tsconfig.json +0 -0
  69. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/update-revision.js +0 -0
  70. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/weather.js +0 -0
  71. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/constraints.txt +0 -0
  72. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/custom_store.sql +0 -0
  73. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/forbidden.txt +0 -0
  74. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/hatch_build.py +0 -0
  75. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/healthcheck.py +0 -0
  76. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  77. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/__init__.py +0 -0
  78. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/_adapter.py +0 -0
  79. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/protocol.py +0 -0
  80. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_factory_utils.py +0 -0
  81. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/__init__.py +0 -0
  82. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2a.py +0 -0
  83. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/README.md +0 -0
  84. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
  85. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
  86. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
  87. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
  88. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/assistants.py +0 -0
  89. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/event_streaming.py +0 -0
  90. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/__init__.py +0 -0
  91. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_constants.py +0 -0
  92. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_handlers.py +0 -0
  93. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_models.py +0 -0
  94. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_routes.py +0 -0
  95. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  96. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/meta.py +0 -0
  97. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/openapi.py +0 -0
  98. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/profile.py +0 -0
  99. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/runs.py +0 -0
  100. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/store.py +0 -0
  101. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/threads.py +0 -0
  102. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/ui.py +0 -0
  103. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/asgi_transport.py +0 -0
  104. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/asyncio.py +0 -0
  105. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/__init__.py +0 -0
  106. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/custom.py +0 -0
  107. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/errors.py +0 -0
  108. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/__init__.py +0 -0
  109. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/client.py +0 -0
  110. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/middleware.py +0 -0
  111. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/noop.py +0 -0
  112. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
  113. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cache.py +0 -0
  114. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cli.py +0 -0
  115. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/command.py +0 -0
  116. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/_parse.py +0 -0
  117. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/schemas.py +0 -0
  118. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cron_scheduler.py +0 -0
  119. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/__init__.py +0 -0
  120. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/aes_json.py +0 -0
  121. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/context.py +0 -0
  122. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/custom.py +0 -0
  123. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/shared.py +0 -0
  124. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/errors.py +0 -0
  125. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/__init__.py +0 -0
  126. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/capabilities.py +0 -0
  127. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/constants.py +0 -0
  128. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  129. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/namespace.py +0 -0
  130. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/service.py +0 -0
  131. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/session.py +0 -0
  132. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  133. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/types.py +0 -0
  134. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/feature_flags.py +0 -0
  135. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/__init__.py +0 -0
  136. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/client.py +0 -0
  137. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  138. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/__init__.py +0 -0
  139. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/assistants.py +0 -0
  140. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/cache.py +0 -0
  141. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/crons.py +0 -0
  142. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/runs.py +0 -0
  143. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/threads.py +0 -0
  144. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/server.py +0 -0
  145. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/__init__.py +0 -0
  146. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  147. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/encryption.py +0 -0
  148. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http.py +0 -0
  149. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics.py +0 -0
  150. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics_utils.py +0 -0
  151. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.gitignore +0 -0
  152. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.prettierrc +0 -0
  153. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.yarnclean +0 -0
  154. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/__init__.py +0 -0
  155. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/base.py +0 -0
  156. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/build.mts +0 -0
  157. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.http.mts +0 -0
  158. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.mts +0 -0
  159. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/errors.py +0 -0
  160. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/global.d.ts +0 -0
  161. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/remote.py +0 -0
  162. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/schema.py +0 -0
  163. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/graph.mts +0 -0
  164. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/load.hooks.mjs +0 -0
  165. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/preload.mjs +0 -0
  166. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  167. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/files.mts +0 -0
  168. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/importMap.mts +0 -0
  169. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  170. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/serde.mts +0 -0
  171. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/sse.py +0 -0
  172. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/traceblock.mts +0 -0
  173. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/tsconfig.json +0 -0
  174. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/ui.py +0 -0
  175. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/__init__.py +0 -0
  176. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/exceptions.py +0 -0
  177. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/policy.py +0 -0
  178. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/transport.py +0 -0
  179. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/logging.py +0 -0
  180. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metadata.py +0 -0
  181. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_collector.py +0 -0
  182. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_otlp.py +0 -0
  183. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/__init__.py +0 -0
  184. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/ensure_store.py +0 -0
  185. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/http_logger.py +0 -0
  186. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/private_network.py +0 -0
  187. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/request_id.py +0 -0
  188. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/models/__init__.py +0 -0
  189. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/models/run.py +0 -0
  190. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/otel_context.py +0 -0
  191. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/patch.py +0 -0
  192. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/queue_entrypoint.py +0 -0
  193. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/release_tags.py +0 -0
  194. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/route.py +0 -0
  195. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/schema.py +0 -0
  196. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_metrics.py +0 -0
  197. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/serde.py +0 -0
  198. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/server.py +0 -0
  199. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/sse.py +0 -0
  200. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/state.py +0 -0
  201. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/store.py +0 -0
  202. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/stream.py +0 -0
  203. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/stream_v2.py +0 -0
  204. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/__init__.py +0 -0
  205. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/profiler.py +0 -0
  206. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/timer.py +0 -0
  207. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/traceblock.py +0 -0
  208. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/tracing_session.py +0 -0
  209. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/tunneling/cloudflare.py +0 -0
  210. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/__init__.py +0 -0
  211. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/cache.py +0 -0
  212. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/config.py +0 -0
  213. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/errors.py +0 -0
  214. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/extract.py +0 -0
  215. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/future.py +0 -0
  216. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/headers.py +0 -0
  217. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/network.py +0 -0
  218. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/retriable_client.py +0 -0
  219. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/stream_codec.py +0 -0
  220. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/uuids.py +0 -0
  221. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/validation.py +0 -0
  222. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/webhook.py +0 -0
  223. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/worker.py +0 -0
  224. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/worker_runtime.py +0 -0
  225. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/__init__.py +0 -0
  226. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/checkpointer.py +0 -0
  227. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/__init__.py +0 -0
  228. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/_compat.py +0 -0
  229. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  230. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/config.py +0 -0
  231. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/durability.py +0 -0
  232. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/store.py +0 -0
  233. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/struct.py +0 -0
  234. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/value.py +0 -0
  235. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  236. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  237. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  238. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  240. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  241. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  242. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  244. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  245. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  246. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  248. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  249. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  250. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  252. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  253. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  254. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  256. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  257. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  258. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  260. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  261. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  262. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  264. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  265. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  266. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  267. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  268. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  269. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  270. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  271. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  272. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  273. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  274. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  275. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  276. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  277. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  278. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  279. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  280. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  281. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  282. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  283. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  284. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  285. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  286. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  287. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  288. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  289. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  290. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  291. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.py +0 -0
  292. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
  293. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
  294. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
  295. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/serde.py +0 -0
  296. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/store.py +0 -0
  297. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_license/__init__.py +0 -0
  298. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_license/validation.py +0 -0
  299. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/__init__.py +0 -0
  300. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/checkpoint.py +0 -0
  301. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/database.py +0 -0
  302. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/lifespan.py +0 -0
  303. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/metrics.py +0 -0
  304. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/ops.py +0 -0
  305. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/queue.py +0 -0
  306. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/retry.py +0 -0
  307. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/routes.py +0 -0
  308. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/store.py +0 -0
  309. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/logging.json +0 -0
  310. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/openapi.json +0 -0
  311. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/build_wheel.py +0 -0
  312. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/create_license.py +0 -0
  313. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/run_a2a_tck.py +0 -0
  314. {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.15.0rc1
3
+ Version: 0.16.0.dev1
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -16,7 +16,7 @@ Requires-Dist: jsonschema-rs<0.45,>=0.20.0
16
16
  Requires-Dist: langchain-core>=0.3.64
17
17
  Requires-Dist: langchain-protocol<0.1,>=0.0.18
18
18
  Requires-Dist: langgraph-checkpoint<5,>=3.0.1
19
- Requires-Dist: langgraph-runtime-inmem<0.36.0.dev0,>=0.35.0.dev0
19
+ Requires-Dist: langgraph-runtime-inmem<0.37.0.dev0,>=0.36.0.dev0
20
20
  Requires-Dist: langgraph-sdk>=0.4.4
21
21
  Requires-Dist: langgraph<2,>=0.4.10
22
22
  Requires-Dist: langsmith[otel]>=0.6.3
@@ -0,0 +1,115 @@
1
+ import assert from "node:assert/strict";
2
+ import { mkdtemp, readFile, rm } from "node:fs/promises";
3
+ import { createRequire } from "node:module";
4
+ import { tmpdir } from "node:os";
5
+ import path from "node:path";
6
+ import { Readable } from "node:stream";
7
+ import test from "node:test";
8
+
9
+ // Check the copy NestJS actually loads, including nested dependency installs.
10
+ const require = createRequire(import.meta.url);
11
+ const nestRequire = createRequire(
12
+ require.resolve("@nestjs/platform-express/package.json"),
13
+ );
14
+ const multer = nestRequire("multer");
15
+
16
+ function upload(middleware, fields = [{ name: "file", content: "benchmark" }]) {
17
+ const boundary = "benchmark-multer-test";
18
+ const body = Buffer.from(
19
+ fields
20
+ .map(
21
+ ({ name, content }) =>
22
+ `--${boundary}\r\nContent-Disposition: form-data; name="${name}"; filename="result.txt"\r\nContent-Type: text/plain\r\n\r\n${content}\r\n`,
23
+ )
24
+ .join("") + `--${boundary}--\r\n`,
25
+ );
26
+ const req = Readable.from([body]);
27
+ req.headers = {
28
+ "content-type": `multipart/form-data; boundary=${boundary}`,
29
+ "content-length": String(body.length),
30
+ };
31
+ return new Promise((resolve, reject) => {
32
+ middleware(req, {}, (error) => (error ? reject(error) : resolve(req)));
33
+ });
34
+ }
35
+
36
+ test("NestJS resolves patched Multer 2.x", () => {
37
+ const [major, minor] = nestRequire("multer/package.json")
38
+ .version.split(".")
39
+ .map(Number);
40
+ assert.equal(major, 2);
41
+ assert.ok(
42
+ minor >= 3,
43
+ "Multer must be >=2.3.0 to address the benchmark alerts",
44
+ );
45
+ });
46
+
47
+ test("single uploads preserve memory storage and fileFilter callbacks", async () => {
48
+ let filtered = false;
49
+ const req = await upload(
50
+ multer({
51
+ limits: { fileSize: 1024, files: 1, fields: 1 },
52
+ fileFilter: (_req, file, done) => {
53
+ filtered = true;
54
+ assert.equal(file.originalname, "result.txt");
55
+ done(null, true);
56
+ },
57
+ }).single("file"),
58
+ );
59
+ assert.ok(filtered);
60
+ assert.equal(req.file.buffer.toString(), "benchmark");
61
+ });
62
+
63
+ for (const mode of ["array", "fields", "any"]) {
64
+ test(`${mode} uploads preserve the API used by NestJS interceptors`, async () => {
65
+ const parser = multer({ limits: { fileSize: 1024, files: 1 } });
66
+ const middleware =
67
+ mode === "array"
68
+ ? parser.array("file", 1)
69
+ : mode === "fields"
70
+ ? parser.fields([{ name: "file", maxCount: 1 }])
71
+ : parser.any();
72
+ const req = await upload(middleware);
73
+ const files = mode === "fields" ? req.files.file : req.files;
74
+ assert.equal(files.length, 1);
75
+ assert.equal(files[0].buffer.toString(), "benchmark");
76
+ });
77
+ }
78
+
79
+ test("disk storage preserves uploaded file contents", async () => {
80
+ const directory = await mkdtemp(path.join(tmpdir(), "benchmark-multer-"));
81
+ try {
82
+ const req = await upload(
83
+ multer({ dest: directory, limits: { fileSize: 1024 } }).single("file"),
84
+ );
85
+ assert.equal(await readFile(req.file.path, "utf8"), "benchmark");
86
+ } finally {
87
+ await rm(directory, { recursive: true, force: true });
88
+ }
89
+ });
90
+
91
+ test("oversized files still return a MulterError", async () => {
92
+ await assert.rejects(
93
+ upload(multer({ limits: { fileSize: 2 } }).single("file")),
94
+ (error) =>
95
+ error instanceof multer.MulterError && error.code === "LIMIT_FILE_SIZE",
96
+ );
97
+ });
98
+
99
+ test("unexpected fields still return a MulterError", async () => {
100
+ await assert.rejects(
101
+ upload(multer().single("expected")),
102
+ (error) =>
103
+ error instanceof multer.MulterError &&
104
+ error.code === "LIMIT_UNEXPECTED_FILE",
105
+ );
106
+ });
107
+
108
+ test("fileFilter rejection does not retain a file", async () => {
109
+ const req = await upload(
110
+ multer({ fileFilter: (_req, _file, done) => done(null, false) }).single(
111
+ "file",
112
+ ),
113
+ );
114
+ assert.equal(req.file, undefined);
115
+ });
@@ -18,9 +18,11 @@
18
18
  "typescript": "^5.9.3"
19
19
  },
20
20
  "overrides": {
21
+ "multer": "^2.3.0",
21
22
  "qs": ">=6.16.0"
22
23
  },
23
24
  "resolutions": {
25
+ "multer": "^2.3.0",
24
26
  "qs": ">=6.16.0",
25
27
  "socket.io-parser": ">=4.2.7"
26
28
  },
@@ -108,7 +108,7 @@ buffer-from@^1.0.0:
108
108
  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
109
109
  integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
110
110
 
111
- busboy@^1.0.0:
111
+ busboy@^1.6.0:
112
112
  version "1.6.0"
113
113
  resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
114
114
  integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
@@ -136,14 +136,14 @@ call-bound@^1.0.2:
136
136
  call-bind-apply-helpers "^1.0.2"
137
137
  get-intrinsic "^1.3.0"
138
138
 
139
- concat-stream@^1.5.2:
140
- version "1.6.2"
141
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34"
142
- integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==
139
+ concat-stream@^2.0.0:
140
+ version "2.0.0"
141
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
142
+ integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
143
143
  dependencies:
144
144
  buffer-from "^1.0.0"
145
145
  inherits "^2.0.3"
146
- readable-stream "^2.2.2"
146
+ readable-stream "^3.0.2"
147
147
  typedarray "^0.0.6"
148
148
 
149
149
  content-disposition@0.5.4:
@@ -173,11 +173,6 @@ cookie@~0.4.1:
173
173
  resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
174
174
  integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
175
175
 
176
- core-util-is@~1.0.0:
177
- version "1.0.3"
178
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
179
- integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
180
-
181
176
  cors@2.8.5:
182
177
  version "2.8.5"
183
178
  resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
@@ -416,7 +411,7 @@ iconv-lite@0.4.24:
416
411
  dependencies:
417
412
  safer-buffer ">= 2.1.2 < 3"
418
413
 
419
- inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3:
414
+ inherits@2.0.4, inherits@^2.0.3:
420
415
  version "2.0.4"
421
416
  resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
422
417
  integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@@ -426,11 +421,6 @@ ipaddr.js@1.9.1:
426
421
  resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
427
422
  integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
428
423
 
429
- isarray@~1.0.0:
430
- version "1.0.0"
431
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
432
- integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
433
-
434
424
  javascript-stringify@^2.1.0:
435
425
  version "2.1.0"
436
426
  resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79"
@@ -473,18 +463,6 @@ mime@1.6.0:
473
463
  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
474
464
  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
475
465
 
476
- minimist@^1.2.6:
477
- version "1.2.8"
478
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
479
- integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
480
-
481
- mkdirp@^0.5.4:
482
- version "0.5.6"
483
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
484
- integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
485
- dependencies:
486
- minimist "^1.2.6"
487
-
488
466
  ms@2.0.0:
489
467
  version "2.0.0"
490
468
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -495,18 +473,15 @@ ms@2.1.3, ms@^2.1.3:
495
473
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
496
474
  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
497
475
 
498
- multer@1.4.4-lts.1:
499
- version "1.4.4-lts.1"
500
- resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.4-lts.1.tgz#24100f701a4611211cfae94ae16ea39bb314e04d"
501
- integrity sha512-WeSGziVj6+Z2/MwQo3GvqzgR+9Uc+qt8SwHKh3gvNPiISKfsMfG4SvCOFYlxxgkXt7yIV2i1yczehm0EOKIxIg==
476
+ multer@1.4.4-lts.1, multer@^2.3.0:
477
+ version "2.3.0"
478
+ resolved "https://registry.yarnpkg.com/multer/-/multer-2.3.0.tgz#46f5a98c34e09661ff089fa49ae487846bd5b4fd"
479
+ integrity sha512-cjNbm3sttszgZeGfJR124D+jFEfkXCVAsoPBmFn9X7UxmDSFHWqE2CoEj0vrmSpuAFnqWR1Szcm9QTsiHr60Xw==
502
480
  dependencies:
503
481
  append-field "^1.0.0"
504
- busboy "^1.0.0"
505
- concat-stream "^1.5.2"
506
- mkdirp "^0.5.4"
507
- object-assign "^4.1.1"
508
- type-is "^1.6.4"
509
- xtend "^4.0.0"
482
+ busboy "^1.6.0"
483
+ concat-stream "^2.0.0"
484
+ type-is "^1.6.18"
510
485
 
511
486
  negotiator@0.6.3:
512
487
  version "0.6.3"
@@ -522,7 +497,7 @@ nodeplotlib@^1.0.4:
522
497
  "@nestjs/platform-socket.io" "^8.2.3"
523
498
  "@types/plotly.js" "^1.54.17"
524
499
 
525
- object-assign@^4, object-assign@^4.1.1:
500
+ object-assign@^4:
526
501
  version "4.1.1"
527
502
  resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
528
503
  integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
@@ -549,11 +524,6 @@ path-to-regexp@0.1.7:
549
524
  resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
550
525
  integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
551
526
 
552
- process-nextick-args@~2.0.0:
553
- version "2.0.1"
554
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
555
- integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
556
-
557
527
  proxy-addr@~2.0.7:
558
528
  version "2.0.7"
559
529
  resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
@@ -592,29 +562,20 @@ raw-body@2.5.1:
592
562
  iconv-lite "0.4.24"
593
563
  unpipe "1.0.0"
594
564
 
595
- readable-stream@^2.2.2:
596
- version "2.3.8"
597
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b"
598
- integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==
565
+ readable-stream@^3.0.2:
566
+ version "3.6.2"
567
+ resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
568
+ integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
599
569
  dependencies:
600
- core-util-is "~1.0.0"
601
- inherits "~2.0.3"
602
- isarray "~1.0.0"
603
- process-nextick-args "~2.0.0"
604
- safe-buffer "~5.1.1"
605
- string_decoder "~1.1.1"
606
- util-deprecate "~1.0.1"
570
+ inherits "^2.0.3"
571
+ string_decoder "^1.1.1"
572
+ util-deprecate "^1.0.1"
607
573
 
608
- safe-buffer@5.2.1:
574
+ safe-buffer@5.2.1, safe-buffer@~5.2.0:
609
575
  version "5.2.1"
610
576
  resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
611
577
  integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
612
578
 
613
- safe-buffer@~5.1.0, safe-buffer@~5.1.1:
614
- version "5.1.2"
615
- resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
616
- integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
617
-
618
579
  "safer-buffer@>= 2.1.2 < 3":
619
580
  version "2.1.2"
620
581
  resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
@@ -729,12 +690,12 @@ streamsearch@^1.1.0:
729
690
  resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
730
691
  integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
731
692
 
732
- string_decoder@~1.1.1:
733
- version "1.1.1"
734
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8"
735
- integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==
693
+ string_decoder@^1.1.1:
694
+ version "1.3.0"
695
+ resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
696
+ integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
736
697
  dependencies:
737
- safe-buffer "~5.1.0"
698
+ safe-buffer "~5.2.0"
738
699
 
739
700
  toidentifier@1.0.1:
740
701
  version "1.0.1"
@@ -746,7 +707,7 @@ tslib@2.4.0:
746
707
  resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
747
708
  integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
748
709
 
749
- type-is@^1.6.4, type-is@~1.6.18:
710
+ type-is@^1.6.18, type-is@~1.6.18:
750
711
  version "1.6.18"
751
712
  resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
752
713
  integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
@@ -774,7 +735,7 @@ unpipe@1.0.0, unpipe@~1.0.0:
774
735
  resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
775
736
  integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
776
737
 
777
- util-deprecate@~1.0.1:
738
+ util-deprecate@^1.0.1:
778
739
  version "1.0.2"
779
740
  resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
780
741
  integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
@@ -793,8 +754,3 @@ ws@~8.2.3:
793
754
  version "8.2.3"
794
755
  resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
795
756
  integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
796
-
797
- xtend@^4.0.0:
798
- version "4.0.2"
799
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
800
- integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
@@ -0,0 +1 @@
1
+ __version__ = "0.16.0.dev1"
@@ -72,9 +72,17 @@ def validate_client_metadata(metadata: dict[str, Any]) -> None:
72
72
  raise A2UIValidationError("Invalid A2UI message metadata") from exc
73
73
 
74
74
 
75
- def validate_payload(data: Any, *, direction: Literal["client", "server"]) -> None:
76
- if not isinstance(data, list):
77
- raise A2UIValidationError("A2UI DataPart data must be an array")
75
+ def validate_payload(
76
+ data: Any,
77
+ *,
78
+ direction: Literal["client", "server"],
79
+ ) -> None:
80
+ if isinstance(data, list):
81
+ messages = data
82
+ elif isinstance(data, dict):
83
+ messages = (data,)
84
+ else:
85
+ raise A2UIValidationError("A2UI DataPart data must be an array or object")
78
86
 
79
87
  validator = (
80
88
  _CLIENT_MESSAGE_VALIDATOR
@@ -82,7 +90,7 @@ def validate_payload(data: Any, *, direction: Literal["client", "server"]) -> No
82
90
  else _SERVER_MESSAGE_VALIDATOR
83
91
  )
84
92
  try:
85
- for message in data:
93
+ for message in messages:
86
94
  validator.validate(message)
87
95
  except ValueError as exc:
88
96
  raise A2UIValidationError(f"Invalid A2UI {direction} message") from exc
@@ -21,6 +21,7 @@ class AuthDict(TypedDict):
21
21
  organization_id: str
22
22
  tenant_id: str
23
23
  user_id: NotRequired[str]
24
+ ls_user_id: NotRequired[str]
24
25
  user_email: NotRequired[str]
25
26
 
26
27
 
@@ -94,6 +95,7 @@ class LangsmithAuthBackend(AuthenticationBackend):
94
95
 
95
96
  credentials = AuthCredentials(["authenticated"])
96
97
  user = StudioUser(auth_dict.get("user_id"), is_authenticated=True)
98
+ user.ls_user_id = auth_dict.get("ls_user_id")
97
99
 
98
100
  # Cache the result
99
101
  self._cache.set(cache_key, AuthCacheEntry(credentials=credentials, user=user))
@@ -5,14 +5,19 @@ from starlette.authentication import BaseUser
5
5
  class StudioUser(StudioUserBase, BaseUser):
6
6
  """StudioUser class."""
7
7
 
8
+ ls_user_id: str | None = None
9
+
8
10
  def dict(self):
9
- return {
11
+ user = {
10
12
  "kind": "StudioUser",
11
13
  "is_authenticated": self.is_authenticated,
12
14
  "display_name": self.display_name,
13
15
  "identity": self.identity,
14
16
  "permissions": self.permissions,
15
17
  }
18
+ if self.ls_user_id is not None:
19
+ user["ls_user_id"] = self.ls_user_id
20
+ return user
16
21
 
17
22
  def __getitem__(self, key):
18
23
  return self.dict()[key]
@@ -650,7 +650,9 @@ EXPOSE_INTERNAL_METRICS_PROMETHEUS = env(
650
650
 
651
651
  # These are only set for internal agents (polly/insights/engine/etc..) deployed in byoc so we can fetch logs (see api/langgraph_api/self_hosted_logs.py)
652
652
  DATA_PLANE_ID: str | None = env("DATA_PLANE_ID", cast=str, default=None)
653
+ DATA_PLANE_NAME: str | None = env("DATA_PLANE_NAME", cast=str, default=None)
653
654
  DATA_PLANE_ORG_ID: str | None = env("DATA_PLANE_ORG_ID", cast=str, default=None)
655
+ DATA_PLANE_ORG_NAME: str | None = env("DATA_PLANE_ORG_NAME", cast=str, default=None)
654
656
  DATA_PLANE_JWT_SECRET: str | None = env("DATA_PLANE_JWT_SECRET", cast=str, default=None)
655
657
  BYOC_HOST = env("BYOC_HOST", cast=str, default="byoc")
656
658
  BYOC_ENV = env("BYOC_ENV", cast=str, default="byoc")
@@ -717,7 +719,9 @@ __all__ = [
717
719
  "DATADOG_METRICS_ENABLED",
718
720
  "DATA_PLANE_ID",
719
721
  "DATA_PLANE_JWT_SECRET",
722
+ "DATA_PLANE_NAME",
720
723
  "DATA_PLANE_ORG_ID",
724
+ "DATA_PLANE_ORG_NAME",
721
725
  "DB_MIGRATION_BY_CORE_API",
722
726
  "DISPATCH_MODE",
723
727
  "EXPOSE_INTERNAL_METRICS_PROMETHEUS",
@@ -18,6 +18,7 @@ from starlette.middleware.base import BaseHTTPMiddleware
18
18
  from starlette.requests import Request # noqa: TC002
19
19
 
20
20
  from langgraph_api.auth.noop import UnauthenticatedUser
21
+ from langgraph_api.auth.studio_user import StudioUser
21
22
  from langgraph_api.config import LANGGRAPH_ENCRYPTION
22
23
  from langgraph_api.encryption.aes_json import (
23
24
  AesEncryptionInstance,
@@ -74,6 +75,9 @@ def _serialize_user_for_encryption(user: BaseUser) -> dict[str, Any]:
74
75
  if hasattr(user, "model_dump") and callable(user.model_dump):
75
76
  return cast("dict[str, Any]", user.model_dump())
76
77
 
78
+ if isinstance(user, StudioUser):
79
+ return user.dict()
80
+
77
81
  # Plain BaseUser subclasses - extract the required properties
78
82
  return {
79
83
  "identity": user.identity,
@@ -502,8 +502,14 @@ def _load_graph_config_from_env() -> dict | None:
502
502
  return config_per_id
503
503
 
504
504
 
505
- async def collect_graphs_from_env(register: bool = False) -> None:
506
- """Return graphs from env."""
505
+ async def collect_graphs_from_env(
506
+ register: bool = False, *, allow_js: bool = True
507
+ ) -> None:
508
+ """Return graphs from env.
509
+
510
+ When ``allow_js`` is False (Python process runner), raise if any JS graph
511
+ specs are configured instead of starting the JS sidecar.
512
+ """
507
513
 
508
514
  # Not in public docs: LANGSERVE_GRAPHS is internal, set by CLI from langgraph.json "graphs" field
509
515
  paths_str = os.getenv("LANGSERVE_GRAPHS")
@@ -595,6 +601,12 @@ async def collect_graphs_from_env(register: bool = False) -> None:
595
601
  js_specs = list(filter(is_js_spec, specs))
596
602
  py_specs = list(filterfalse(is_js_spec, specs))
597
603
 
604
+ if js_specs and not allow_js:
605
+ raise NotImplementedError(
606
+ "JS graphs are not supported in the Python process runner. "
607
+ f"Configured JS graph ids: {[s.id for s in js_specs]}"
608
+ )
609
+
598
610
  if js_specs:
599
611
  if lg_api_config.API_VARIANT == "local_dev":
600
612
  raise NotImplementedError(
@@ -17,9 +17,10 @@
17
17
  "@types/json-schema": "^7.0.15",
18
18
  "dedent": "^1.7.2",
19
19
  "exit-hook": "^5.1.0",
20
- "hono": "^4.12.34",
20
+ "hono": "^4.13.7",
21
21
  "p-queue": "^9.3.1",
22
22
  "p-retry": "^7.1.1",
23
+ "typescript": "^5.9.3",
23
24
  "undici": "^7.28.0",
24
25
  "uuid": "^14.0.1",
25
26
  "winston": "^3.19.0",
@@ -40,9 +41,8 @@
40
41
  "jose": "^6.2.3",
41
42
  "postgres": "^3.4.9",
42
43
  "prettier": "^3.9.5",
43
- "typescript": "^5.9.3",
44
44
  "vite": "^8.1.4",
45
- "vitest": "^4.1.10"
45
+ "vitest": "^5.0.0"
46
46
  },
47
47
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
48
48
  }