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.
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/PKG-INFO +2 -2
- langgraph_api-0.16.0.dev1/benchmark/multer.test.js +115 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/package.json +2 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/yarn.lock +30 -74
- langgraph_api-0.16.0.dev1/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui.py +12 -4
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/backend.py +2 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/studio_user.py +6 -1
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/__init__.py +4 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/middleware.py +4 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/graph.py +14 -2
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/package.json +3 -3
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/yarn.lock +70 -130
- langgraph_api-0.16.0.dev1/langgraph_api/runner/__init__.py +10 -0
- langgraph_api-0.16.0.dev1/langgraph_api/runner/__main__.py +275 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_logs.py +4 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/__init__.py +4 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.py +50 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.pyi +167 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.py +108 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.pyi +73 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/pyproject.toml +1 -1
- langgraph_api-0.15.0rc1/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/.gitignore +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/LICENSE +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/Makefile +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/README.md +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/.gitignore +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/Makefile +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/README.md +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.test.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta_turns.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/store.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.test.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/clean.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.test.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/graphs.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.test.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/ramp.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/staircase.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/benchmark/weather.js +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/constraints.txt +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/custom_store.sql +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/forbidden.txt +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/hatch_build.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/healthcheck.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/README.md +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/command.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/service.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.yarnclean +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_collector.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_otlp.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/route.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/server.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/state.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/tracing_session.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/worker_runtime.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {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
- {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
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/logging.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/openapi.json +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/create_license.py +0 -0
- {langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/scripts/run_a2a_tck.py +0 -0
- {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.
|
|
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.
|
|
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
|
+
});
|
|
@@ -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.
|
|
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@^
|
|
140
|
-
version "
|
|
141
|
-
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-
|
|
142
|
-
integrity sha512-
|
|
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 "^
|
|
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
|
|
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 "
|
|
500
|
-
resolved "https://registry.yarnpkg.com/multer/-/multer-
|
|
501
|
-
integrity sha512-
|
|
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.
|
|
505
|
-
concat-stream "^
|
|
506
|
-
|
|
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
|
|
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@^
|
|
596
|
-
version "
|
|
597
|
-
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-
|
|
598
|
-
integrity sha512-
|
|
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
|
-
|
|
601
|
-
|
|
602
|
-
|
|
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
|
|
733
|
-
version "1.
|
|
734
|
-
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.
|
|
735
|
-
integrity sha512-
|
|
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.
|
|
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.
|
|
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
|
|
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(
|
|
76
|
-
|
|
77
|
-
|
|
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
|
|
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
|
{langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/backend.py
RENAMED
|
@@ -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
|
-
|
|
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",
|
{langgraph_api-0.15.0rc1 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/middleware.py
RENAMED
|
@@ -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(
|
|
506
|
-
|
|
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.
|
|
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": "^
|
|
45
|
+
"vitest": "^5.0.0"
|
|
46
46
|
},
|
|
47
47
|
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
|
|
48
48
|
}
|