solace-agent-mesh 1.11.2__py3-none-any.whl → 1.12.0__py3-none-any.whl
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.
- solace_agent_mesh/agent/adk/callbacks.py +177 -10
- solace_agent_mesh/agent/adk/embed_resolving_mcp_toolset.py +3 -0
- solace_agent_mesh/agent/adk/models/lite_llm.py +34 -16
- solace_agent_mesh/agent/adk/runner.py +66 -8
- solace_agent_mesh/agent/adk/setup.py +61 -26
- solace_agent_mesh/agent/protocol/event_handlers.py +48 -0
- solace_agent_mesh/agent/proxies/a2a/component.py +27 -0
- solace_agent_mesh/agent/sac/component.py +84 -2
- solace_agent_mesh/agent/tools/builtin_artifact_tools.py +41 -22
- solace_agent_mesh/agent/tools/peer_agent_tool.py +19 -12
- solace_agent_mesh/agent/tools/tool_config_types.py +21 -1
- solace_agent_mesh/agent/utils/artifact_helpers.py +54 -0
- solace_agent_mesh/assets/docs/404.html +3 -3
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.e186750d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/240a0364.83e37aa8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.2f0db237.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.7e61915d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/{3ac1795d.28b7c67b.js → 3ac1795d.dc006e20.js} +1 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.f08618fb.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/4667dc50.bf2ad456.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/547e15cc.8e6da617.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5b8d9c11.d4eb37b8.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.1ee87753.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/64195356.09dbd087.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/66d4869e.30340bd3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/729898df.7249e9fd.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/7e294c01.7c5f6906.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/8024126c.e3467286.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/81a99df0.95be65d4.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/9bb13469.4523ae20.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/a7d42657.a956689d.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.3e563275.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e04b235d.06d23db6.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.deb2b62e.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.acc800d3.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/e92d0134.c147a429.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/ee0c2fe7.94d0a351.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/f284c35a.08fab659.js +1 -0
- solace_agent_mesh/assets/docs/assets/js/main.b241af3e.js +2 -0
- solace_agent_mesh/assets/docs/assets/js/runtime~main.4ca7d2e2.js +1 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/artifact-management/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/audio-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/data-analysis-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/embeds/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/image-tools/index.html +81 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/builtin-tools/index.html +14 -12
- solace_agent_mesh/assets/docs/docs/documentation/components/cli/index.html +30 -9
- solace_agent_mesh/assets/docs/docs/documentation/components/gateways/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/index.html +6 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/orchestrator/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/platform-service/index.html +33 -0
- solace_agent_mesh/assets/docs/docs/documentation/components/plugins/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/projects/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/prompts/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/proxies/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/components/speech/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/debugging/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/deployment-options/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/deploying/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/{kubernetes-deployment → kubernetes}/index.html +6 -6
- solace_agent_mesh/assets/docs/docs/documentation/deploying/kubernetes/kubernetes-deployment-guide/index.html +197 -0
- solace_agent_mesh/assets/docs/docs/documentation/deploying/logging/index.html +11 -6
- solace_agent_mesh/assets/docs/docs/documentation/deploying/observability/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/deploying/proxy_configuration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/create-gateways/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-python-tools/index.html +23 -5
- solace_agent_mesh/assets/docs/docs/documentation/developing/creating-service-providers/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/evaluations/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/structure/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/bedrock-agents/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/custom-agent/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/event-mesh-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mcp-integration/index.html +17 -8
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/mongodb-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rag-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/rest-gateway/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/slack-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/sql-database/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/developing/tutorials/teams-integration/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/agent-builder/index.html +5 -5
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/connectors/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/openapi-tools/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/rbac-setup-guide/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/secure-user-delegated-access/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/single-sign-on/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/enterprise/wheel-installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/architecture/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/index.html +6 -5
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/introduction/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/try-agent-mesh/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/getting-started/vibe_coding/index.html +62 -0
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/artifact-storage/index.html +25 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/configurations/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/installation/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/large_language_models/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/run-project/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/session-storage/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/installing-and-configuring/user-feedback/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-gateway-upgrade-to-0.3.0/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/a2a-upgrade/a2a-technical-migration-map/index.html +4 -4
- solace_agent_mesh/assets/docs/docs/documentation/migrations/platform-service-split/index.html +85 -0
- solace_agent_mesh/assets/docs/lunr-index-1767712284328.json +1 -0
- solace_agent_mesh/assets/docs/lunr-index.json +1 -1
- solace_agent_mesh/assets/docs/search-doc-1767712284328.json +1 -0
- solace_agent_mesh/assets/docs/search-doc.json +1 -1
- solace_agent_mesh/assets/docs/sitemap.xml +1 -1
- solace_agent_mesh/cli/__init__.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/__init__.py +15 -0
- solace_agent_mesh/cli/commands/init_cmd/directory_step.py +1 -1
- solace_agent_mesh/cli/commands/init_cmd/env_step.py +29 -2
- solace_agent_mesh/cli/commands/init_cmd/platform_service_step.py +85 -0
- solace_agent_mesh/cli/commands/tools_cmd.py +315 -0
- solace_agent_mesh/cli/main.py +2 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{authCallback-Dj3JtK42.js → authCallback-8Nihi8rv.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/{client-ZKk9kEJ5.js → client-DYtZN8p-.js} +1 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-BYGUHQMk.js +435 -0
- solace_agent_mesh/client/webui/frontend/static/assets/main-D2CSH1bp.css +1 -0
- solace_agent_mesh/client/webui/frontend/static/assets/{vendor-BNV4kZN0.js → vendor-XBWAmrun.js} +106 -101
- solace_agent_mesh/client/webui/frontend/static/auth-callback.html +3 -3
- solace_agent_mesh/client/webui/frontend/static/index.html +4 -4
- solace_agent_mesh/client/webui/frontend/static/ui-version.json +1 -1
- solace_agent_mesh/common/a2a/types.py +1 -1
- solace_agent_mesh/common/agent_registry.py +38 -11
- solace_agent_mesh/common/data_parts.py +28 -0
- solace_agent_mesh/common/error_handlers.py +83 -0
- solace_agent_mesh/common/sam_events/event_service.py +2 -2
- solace_agent_mesh/config_portal/backend/common.py +2 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-ZV-jX48T.js +103 -0
- solace_agent_mesh/config_portal/frontend/static/client/assets/{manifest-ba77705e.js → manifest-ce5bc5da.js} +1 -1
- solace_agent_mesh/config_portal/frontend/static/client/index.html +1 -1
- solace_agent_mesh/core_a2a/service.py +3 -2
- solace_agent_mesh/gateway/adapter/base.py +28 -1
- solace_agent_mesh/gateway/adapter/types.py +9 -0
- solace_agent_mesh/gateway/base/auth_interface.py +103 -0
- solace_agent_mesh/gateway/base/component.py +68 -1
- solace_agent_mesh/gateway/generic/component.py +195 -30
- solace_agent_mesh/gateway/http_sse/app.py +23 -6
- solace_agent_mesh/gateway/http_sse/component.py +9 -61
- solace_agent_mesh/gateway/http_sse/dependencies.py +9 -51
- solace_agent_mesh/gateway/http_sse/main.py +28 -418
- solace_agent_mesh/gateway/http_sse/repository/chat_task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/entities/project.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/project_user.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/entities/session.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/feedback_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/interfaces.py +2 -2
- solace_agent_mesh/gateway/http_sse/repository/models/prompt_model.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/models/session_model.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/project_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/project_user_repository.py +1 -1
- solace_agent_mesh/gateway/http_sse/repository/session_repository.py +4 -4
- solace_agent_mesh/gateway/http_sse/repository/task_repository.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/artifacts.py +16 -15
- solace_agent_mesh/gateway/http_sse/routers/auth.py +61 -132
- solace_agent_mesh/gateway/http_sse/routers/config.py +12 -8
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/session_requests.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/base_responses.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/session_responses.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/feedback.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/people.py +2 -2
- solace_agent_mesh/gateway/http_sse/routers/projects.py +2 -1
- solace_agent_mesh/gateway/http_sse/routers/prompts.py +2 -1
- solace_agent_mesh/gateway/http_sse/routers/sessions.py +3 -3
- solace_agent_mesh/gateway/http_sse/routers/speech.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/tasks.py +3 -2
- solace_agent_mesh/gateway/http_sse/routers/users.py +1 -1
- solace_agent_mesh/gateway/http_sse/routers/visualization.py +2 -1
- solace_agent_mesh/gateway/http_sse/services/background_task_monitor.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/data_retention_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/feedback_service.py +1 -1
- solace_agent_mesh/gateway/http_sse/services/session_service.py +4 -4
- solace_agent_mesh/gateway/http_sse/services/task_logger_service.py +1 -1
- solace_agent_mesh/services/platform/__init__.py +23 -12
- solace_agent_mesh/services/platform/api/dependencies.py +23 -16
- solace_agent_mesh/services/platform/api/main.py +118 -43
- solace_agent_mesh/services/platform/api/routers/__init__.py +12 -3
- solace_agent_mesh/services/platform/api/routers/health_router.py +31 -0
- solace_agent_mesh/services/platform/app.py +101 -7
- solace_agent_mesh/services/platform/component.py +552 -33
- solace_agent_mesh/shared/__init__.py +14 -0
- solace_agent_mesh/shared/api/__init__.py +42 -0
- solace_agent_mesh/shared/auth/__init__.py +26 -0
- solace_agent_mesh/shared/auth/dependencies.py +204 -0
- solace_agent_mesh/shared/auth/middleware.py +291 -0
- solace_agent_mesh/shared/database/__init__.py +20 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/base_repository.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_exceptions.py +1 -1
- solace_agent_mesh/{gateway/http_sse/shared → shared/database}/database_helpers.py +1 -1
- solace_agent_mesh/shared/exceptions/__init__.py +36 -0
- solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exception_handlers.py +1 -1
- solace_agent_mesh/shared/utils/__init__.py +21 -0
- solace_agent_mesh/templates/platform.yaml +49 -0
- solace_agent_mesh/templates/webui.yaml +12 -3
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/METADATA +2 -1
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/RECORD +214 -258
- solace_agent_mesh/agent/adk/adk_llm.txt +0 -226
- solace_agent_mesh/agent/adk/adk_llm_detail.txt +0 -566
- solace_agent_mesh/agent/adk/artifacts/artifacts_llm.txt +0 -171
- solace_agent_mesh/agent/adk/models/models_llm.txt +0 -189
- solace_agent_mesh/agent/agent_llm.txt +0 -369
- solace_agent_mesh/agent/agent_llm_detail.txt +0 -1702
- solace_agent_mesh/agent/protocol/protocol_llm.txt +0 -81
- solace_agent_mesh/agent/protocol/protocol_llm_detail.txt +0 -92
- solace_agent_mesh/agent/proxies/a2a/a2a_llm.txt +0 -190
- solace_agent_mesh/agent/proxies/base/base_llm.txt +0 -148
- solace_agent_mesh/agent/proxies/proxies_llm.txt +0 -283
- solace_agent_mesh/agent/sac/sac_llm.txt +0 -189
- solace_agent_mesh/agent/sac/sac_llm_detail.txt +0 -200
- solace_agent_mesh/agent/testing/testing_llm.txt +0 -58
- solace_agent_mesh/agent/testing/testing_llm_detail.txt +0 -68
- solace_agent_mesh/agent/tools/tools_llm.txt +0 -276
- solace_agent_mesh/agent/tools/tools_llm_detail.txt +0 -275
- solace_agent_mesh/agent/utils/utils_llm.txt +0 -152
- solace_agent_mesh/agent/utils/utils_llm_detail.txt +0 -149
- solace_agent_mesh/assets/docs/assets/js/15ba94aa.92fea363.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/240a0364.9ad94d1b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/2e32b5e0.33f5d75b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3a6c6137.f5940cfa.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/3ff0015d.2ddc75c0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/547e15cc.2f7790c1.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/5c2bd65f.90a87880.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/64195356.c498c4d0.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/66d4869e.b77431fc.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/8024126c.fa0e7186.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/81a99df0.2484b8d9.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/9bb13469.b2333011.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/ab9708a8.245ae0ef.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/db5d6442.3daf1696.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e04b235d.52cb25ed.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e1b6eeb4.b1068f9b.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e6f9706b.4488e34c.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/e92d0134.3bda61dd.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/f284c35a.250993bf.js +0 -1
- solace_agent_mesh/assets/docs/assets/js/main.7acf7ace.js +0 -2
- solace_agent_mesh/assets/docs/assets/js/runtime~main.9e0813a2.js +0 -1
- solace_agent_mesh/assets/docs/lunr-index-1765810064709.json +0 -1
- solace_agent_mesh/assets/docs/search-doc-1765810064709.json +0 -1
- solace_agent_mesh/cli/commands/add_cmd/add_cmd_llm.txt +0 -250
- solace_agent_mesh/cli/commands/init_cmd/init_cmd_llm.txt +0 -365
- solace_agent_mesh/cli/commands/plugin_cmd/plugin_cmd_llm.txt +0 -305
- solace_agent_mesh/client/webui/frontend/static/assets/main-BcUaNZ-Q.css +0 -1
- solace_agent_mesh/client/webui/frontend/static/assets/main-vjch4RYc.js +0 -435
- solace_agent_mesh/common/a2a/a2a_llm.txt +0 -175
- solace_agent_mesh/common/a2a/a2a_llm_detail.txt +0 -193
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm.txt +0 -445
- solace_agent_mesh/common/a2a_spec/a2a_spec_llm_detail.txt +0 -736
- solace_agent_mesh/common/a2a_spec/schemas/schemas_llm.txt +0 -330
- solace_agent_mesh/common/common_llm.txt +0 -230
- solace_agent_mesh/common/common_llm_detail.txt +0 -2562
- solace_agent_mesh/common/middleware/middleware_llm.txt +0 -174
- solace_agent_mesh/common/middleware/middleware_llm_detail.txt +0 -185
- solace_agent_mesh/common/sac/sac_llm.txt +0 -71
- solace_agent_mesh/common/sac/sac_llm_detail.txt +0 -82
- solace_agent_mesh/common/sam_events/sam_events_llm.txt +0 -104
- solace_agent_mesh/common/sam_events/sam_events_llm_detail.txt +0 -115
- solace_agent_mesh/common/services/providers/providers_llm.txt +0 -81
- solace_agent_mesh/common/services/services_llm.txt +0 -368
- solace_agent_mesh/common/services/services_llm_detail.txt +0 -459
- solace_agent_mesh/common/utils/embeds/embeds_llm.txt +0 -220
- solace_agent_mesh/common/utils/utils_llm.txt +0 -335
- solace_agent_mesh/common/utils/utils_llm_detail.txt +0 -572
- solace_agent_mesh/config_portal/frontend/static/client/assets/_index-DiOiAjzL.js +0 -103
- solace_agent_mesh/core_a2a/core_a2a_llm.txt +0 -90
- solace_agent_mesh/core_a2a/core_a2a_llm_detail.txt +0 -101
- solace_agent_mesh/gateway/base/base_llm.txt +0 -226
- solace_agent_mesh/gateway/base/base_llm_detail.txt +0 -235
- solace_agent_mesh/gateway/gateway_llm.txt +0 -369
- solace_agent_mesh/gateway/gateway_llm_detail.txt +0 -3885
- solace_agent_mesh/gateway/http_sse/alembic/alembic_llm.txt +0 -345
- solace_agent_mesh/gateway/http_sse/alembic/versions/versions_llm.txt +0 -161
- solace_agent_mesh/gateway/http_sse/components/components_llm.txt +0 -105
- solace_agent_mesh/gateway/http_sse/http_sse_llm.txt +0 -299
- solace_agent_mesh/gateway/http_sse/http_sse_llm_detail.txt +0 -3278
- solace_agent_mesh/gateway/http_sse/repository/entities/entities_llm.txt +0 -221
- solace_agent_mesh/gateway/http_sse/repository/models/models_llm.txt +0 -257
- solace_agent_mesh/gateway/http_sse/repository/repository_llm.txt +0 -308
- solace_agent_mesh/gateway/http_sse/routers/dto/dto_llm.txt +0 -450
- solace_agent_mesh/gateway/http_sse/routers/dto/requests/requests_llm.txt +0 -133
- solace_agent_mesh/gateway/http_sse/routers/dto/responses/responses_llm.txt +0 -123
- solace_agent_mesh/gateway/http_sse/routers/routers_llm.txt +0 -312
- solace_agent_mesh/gateway/http_sse/services/services_llm.txt +0 -303
- solace_agent_mesh/gateway/http_sse/shared/__init__.py +0 -146
- solace_agent_mesh/gateway/http_sse/shared/shared_llm.txt +0 -319
- solace_agent_mesh/gateway/http_sse/utils/utils_llm.txt +0 -47
- solace_agent_mesh/llm.txt +0 -228
- solace_agent_mesh/llm_detail.txt +0 -2835
- solace_agent_mesh/solace_agent_mesh_llm.txt +0 -362
- solace_agent_mesh/solace_agent_mesh_llm_detail.txt +0 -8599
- solace_agent_mesh/templates/templates_llm.txt +0 -147
- /solace_agent_mesh/assets/docs/assets/js/{main.7acf7ace.js.LICENSE.txt → main.b241af3e.js.LICENSE.txt} +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/auth_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/pagination.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/api}/response_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/error_dto.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/exceptions}/exceptions.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/enums.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/timestamp_utils.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/types.py +0 -0
- /solace_agent_mesh/{gateway/http_sse/shared → shared/utils}/utils.py +0 -0
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/WHEEL +0 -0
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/entry_points.txt +0 -0
- {solace_agent_mesh-1.11.2.dist-info → solace_agent_mesh-1.12.0.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,335 +0,0 @@
|
|
|
1
|
-
# DEVELOPER GUIDE: utils
|
|
2
|
-
|
|
3
|
-
## Quick Summary
|
|
4
|
-
The `utils` directory provides essential utility functions and tools for the Solace Agent Mesh system. It contains both direct utility files for common operations (MIME type handling, caching, message validation, authentication) and a sophisticated `embeds` subdirectory that implements a dynamic expression evaluation system. The utilities work together to provide platform compatibility, security features, data processing capabilities, and dynamic content generation for agent workflows.
|
|
5
|
-
|
|
6
|
-
## Files and Subdirectories Overview
|
|
7
|
-
|
|
8
|
-
### Direct Files:
|
|
9
|
-
- **`__init__.py`** - Main entry point exporting commonly used utilities like MIME type checking
|
|
10
|
-
- **`artifact_utils.py`** - Utilities for working with ADK artifacts, including version resolution
|
|
11
|
-
- **`asyncio_macos_fix.py`** - Automatic fix for asyncio subprocess issues on macOS
|
|
12
|
-
- **`in_memory_cache.py`** - Thread-safe singleton cache with TTL support
|
|
13
|
-
- **`initializer.py`** - Enterprise feature initialization and configuration loading
|
|
14
|
-
- **`log_formatters.py`** - Custom logging formatters for platforms like Datadog
|
|
15
|
-
- **`message_utils.py`** - Message size calculation and validation utilities
|
|
16
|
-
- **`mime_helpers.py`** - MIME type classification and file extension utilities
|
|
17
|
-
- **`push_notification_auth.py`** - JWT-based authentication for push notifications
|
|
18
|
-
- **`pydantic_utils.py`** - Pydantic BaseModel with dict-like access for configuration
|
|
19
|
-
- **`type_utils.py`** - Robust type checking utilities for development environments
|
|
20
|
-
|
|
21
|
-
### Subdirectories:
|
|
22
|
-
- **`embeds/`** - Dynamic expression evaluation system using `«...»` syntax for mathematical calculations, datetime formatting, UUID generation, and artifact content processing
|
|
23
|
-
|
|
24
|
-
## Developer API Reference
|
|
25
|
-
|
|
26
|
-
### Direct Files
|
|
27
|
-
|
|
28
|
-
#### __init__.py
|
|
29
|
-
**Purpose:** Main entry point for the utils package, exporting the most commonly used utility functions
|
|
30
|
-
**Import:** `from solace_agent_mesh.common.utils import is_text_based_mime_type`
|
|
31
|
-
|
|
32
|
-
**Functions:**
|
|
33
|
-
- `is_text_based_mime_type(mime_type: Optional[str]) -> bool` - Checks if a MIME type represents text-based content
|
|
34
|
-
|
|
35
|
-
#### artifact_utils.py
|
|
36
|
-
**Purpose:** Common utility functions for working with ADK artifacts
|
|
37
|
-
**Import:** `from solace_agent_mesh.common.utils.artifact_utils import get_latest_artifact_version`
|
|
38
|
-
|
|
39
|
-
**Functions:**
|
|
40
|
-
- `get_latest_artifact_version(artifact_service: BaseArtifactService, app_name: str, user_id: str, session_id: str, filename: str) -> Optional[int]` - Resolves the latest version number for a given artifact
|
|
41
|
-
|
|
42
|
-
#### asyncio_macos_fix.py
|
|
43
|
-
**Purpose:** Automatic fix for asyncio subprocess creation issues on macOS (imported for side effects)
|
|
44
|
-
**Import:** `from solace_agent_mesh.common.utils import asyncio_macos_fix`
|
|
45
|
-
|
|
46
|
-
**Functions:**
|
|
47
|
-
- `apply_macos_asyncio_fix() -> bool` - Applies the asyncio fix for macOS subprocess support
|
|
48
|
-
- `ensure_asyncio_compatibility() -> bool` - Ensures asyncio compatibility for subprocess creation
|
|
49
|
-
|
|
50
|
-
#### in_memory_cache.py
|
|
51
|
-
**Purpose:** Thread-safe singleton in-memory cache with TTL support
|
|
52
|
-
**Import:** `from solace_agent_mesh.common.utils.in_memory_cache import InMemoryCache`
|
|
53
|
-
|
|
54
|
-
**Classes:**
|
|
55
|
-
- **`InMemoryCache`** - Singleton cache class
|
|
56
|
-
- `set(key: str, value: Any, ttl: Optional[int] = None) -> None` - Store value with optional TTL
|
|
57
|
-
- `get(key: str, default: Any = None) -> Any` - Retrieve value or default
|
|
58
|
-
- `delete(key: str) -> bool` - Delete specific key
|
|
59
|
-
- `clear() -> bool` - Clear all cached data
|
|
60
|
-
|
|
61
|
-
#### initializer.py
|
|
62
|
-
**Purpose:** Handles initialization of enterprise features if available
|
|
63
|
-
**Import:** `from solace_agent_mesh.common.utils.initializer import initialize`
|
|
64
|
-
|
|
65
|
-
**Functions:**
|
|
66
|
-
- `initialize() -> None` - Initializes enterprise features using SAM_AUTHORIZATION_CONFIG environment variable
|
|
67
|
-
|
|
68
|
-
#### log_formatters.py
|
|
69
|
-
**Purpose:** Custom logging formatters for structured output
|
|
70
|
-
**Import:** `from solace_agent_mesh.common.utils.log_formatters import DatadogJsonFormatter`
|
|
71
|
-
|
|
72
|
-
**Classes:**
|
|
73
|
-
- **`DatadogJsonFormatter(logging.Formatter)`** - JSON formatter with Datadog-compatible attributes including trace IDs
|
|
74
|
-
|
|
75
|
-
#### message_utils.py
|
|
76
|
-
**Purpose:** Message size calculation and validation utilities
|
|
77
|
-
**Import:** `from solace_agent_mesh.common.utils.message_utils import calculate_message_size, validate_message_size`
|
|
78
|
-
|
|
79
|
-
**Functions:**
|
|
80
|
-
- `calculate_message_size(payload: Dict[str, Any]) -> int` - Calculate exact message size using JSON + UTF-8 encoding
|
|
81
|
-
- `validate_message_size(payload: Dict[str, Any], max_size_bytes: int, component_identifier: str = "Unknown") -> Tuple[bool, int]` - Validate message doesn't exceed size limits
|
|
82
|
-
|
|
83
|
-
**Constants:**
|
|
84
|
-
- `MAX_UTF8_BYTES_PER_CHARACTER: int` - Maximum UTF-8 bytes per character (4)
|
|
85
|
-
|
|
86
|
-
#### mime_helpers.py
|
|
87
|
-
**Purpose:** MIME type classification and file extension utilities
|
|
88
|
-
**Import:** `from solace_agent_mesh.common.utils.mime_helpers import is_text_based_mime_type, get_extension_for_mime_type, is_text_based_file`
|
|
89
|
-
|
|
90
|
-
**Functions:**
|
|
91
|
-
- `is_text_based_mime_type(mime_type: Optional[str]) -> bool` - Check if MIME type is text-based
|
|
92
|
-
- `is_text_based_file(mime_type: Optional[str], content_bytes: Optional[bytes] = None) -> bool` - Determine if file is text-based using MIME type and content analysis
|
|
93
|
-
- `get_extension_for_mime_type(mime_type: Optional[str], default_extension: str = ".dat") -> str` - Get file extension for MIME type
|
|
94
|
-
|
|
95
|
-
**Constants:**
|
|
96
|
-
- `TEXT_CONTAINER_MIME_TYPES: Set[str]` - Set of non-text/* MIME types that contain text
|
|
97
|
-
|
|
98
|
-
#### push_notification_auth.py
|
|
99
|
-
**Purpose:** JWT-based authentication for push notifications with request integrity verification
|
|
100
|
-
**Import:** `from solace_agent_mesh.common.utils.push_notification_auth import PushNotificationSenderAuth, PushNotificationReceiverAuth`
|
|
101
|
-
|
|
102
|
-
**Classes:**
|
|
103
|
-
- **`PushNotificationSenderAuth`** - Handles sending authenticated notifications
|
|
104
|
-
- `generate_jwk() -> None` - Generate RSA key pair for signing
|
|
105
|
-
- `handle_jwks_endpoint(request: Request) -> JSONResponse` - Serve public keys endpoint
|
|
106
|
-
- `send_push_notification(url: str, data: dict[str, Any]) -> None` - Send authenticated notification
|
|
107
|
-
- `verify_push_notification_url(url: str) -> bool` - Verify notification URL
|
|
108
|
-
- **`PushNotificationReceiverAuth`** - Handles receiving and verifying notifications
|
|
109
|
-
- `load_jwks(jwks_url: str) -> None` - Load public keys from JWKS endpoint
|
|
110
|
-
- `verify_push_notification(request: Request) -> bool` - Verify notification authenticity
|
|
111
|
-
|
|
112
|
-
#### pydantic_utils.py
|
|
113
|
-
**Purpose:** Provides a Pydantic BaseModel for SAM configuration with dict-like access
|
|
114
|
-
**Import:** `from solace_agent_mesh.common.utils.pydantic_utils import SamConfigBase`
|
|
115
|
-
|
|
116
|
-
**Classes:**
|
|
117
|
-
- **`SamConfigBase(BaseModel)`** - Pydantic BaseModel with dict-like access
|
|
118
|
-
- `model_validate_and_clean(cls: Type[T], obj: Any) -> T` - Validates dict after removing None values
|
|
119
|
-
- `get(key: str, default: Any = None) -> Any` - Dict-like .get() method
|
|
120
|
-
- `__getitem__(key: str) -> Any` - Dict-like ['key'] access
|
|
121
|
-
- `__setitem__(key: str, value: Any)` - Dict-like ['key'] = value assignment
|
|
122
|
-
- `__contains__(key: str) -> bool` - Dict-like 'in' support
|
|
123
|
-
- `keys()`, `values()`, `items()`, `__iter__()` - Dict-like iteration methods
|
|
124
|
-
- `pop(key: str, default: Any = None) -> Any` - Dict-like .pop() method
|
|
125
|
-
|
|
126
|
-
#### type_utils.py
|
|
127
|
-
**Purpose:** Utilities for robust type checking, especially in development environments
|
|
128
|
-
**Import:** `from solace_agent_mesh.common.utils.type_utils import is_subclass_by_name`
|
|
129
|
-
|
|
130
|
-
**Functions:**
|
|
131
|
-
- `is_subclass_by_name(cls_to_check: type, base_class_name: str) -> bool` - Checks if a class is a subclass by looking for the base class name in the MRO
|
|
132
|
-
|
|
133
|
-
### Subdirectory APIs
|
|
134
|
-
|
|
135
|
-
#### embeds/
|
|
136
|
-
**Purpose:** Comprehensive dynamic expression evaluation system using `«...»` syntax for mathematical calculations, datetime formatting, UUID generation, and artifact content processing with transformation pipelines
|
|
137
|
-
**Key Exports:** Main resolution functions, evaluator registry, modifier system, and type constants
|
|
138
|
-
**Import Examples:**
|
|
139
|
-
```python
|
|
140
|
-
from solace_agent_mesh.common.utils.embeds import resolve_embeds_recursively_in_string, evaluate_embed, EMBED_REGEX
|
|
141
|
-
from solace_agent_mesh.common.utils.embeds.constants import EARLY_EMBED_TYPES, LATE_EMBED_TYPES
|
|
142
|
-
from solace_agent_mesh.common.utils.embeds.types import DataFormat
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
## Complete Usage Guide
|
|
146
|
-
|
|
147
|
-
### 1. Basic Utility Operations
|
|
148
|
-
|
|
149
|
-
```python
|
|
150
|
-
# Import commonly used utilities
|
|
151
|
-
from solace_agent_mesh.common.utils import is_text_based_mime_type
|
|
152
|
-
from solace_agent_mesh.common.utils.in_memory_cache import InMemoryCache
|
|
153
|
-
from solace_agent_mesh.common.utils.message_utils import validate_message_size, calculate_message_size
|
|
154
|
-
from solace_agent_mesh.common.utils.mime_helpers import get_extension_for_mime_type, is_text_based_file
|
|
155
|
-
|
|
156
|
-
# MIME type checking
|
|
157
|
-
if is_text_based_mime_type("application/json"):
|
|
158
|
-
print("JSON is text-based")
|
|
159
|
-
|
|
160
|
-
# File analysis with content
|
|
161
|
-
with open("data.bin", "rb") as f:
|
|
162
|
-
content = f.read()
|
|
163
|
-
if is_text_based_file("application/octet-stream", content):
|
|
164
|
-
print("File contains text despite binary MIME type")
|
|
165
|
-
|
|
166
|
-
# Singleton cache usage
|
|
167
|
-
cache = InMemoryCache()
|
|
168
|
-
cache.set("user_session", {"user_id": "123", "role": "admin"}, ttl=3600) # 1 hour TTL
|
|
169
|
-
session_data = cache.get("user_session", {})
|
|
170
|
-
|
|
171
|
-
# Message size validation
|
|
172
|
-
payload = {"message": "Hello world", "data": [1, 2, 3], "metadata": {"timestamp": "2024-01-15"}}
|
|
173
|
-
is_valid, size = validate_message_size(payload, max_size_bytes=1024, component_identifier="MessageProcessor")
|
|
174
|
-
if not is_valid:
|
|
175
|
-
print(f"Message too large: {size} bytes exceeds 1024 byte limit")
|
|
176
|
-
|
|
177
|
-
# Get appropriate file extension
|
|
178
|
-
extension = get_extension_for_mime_type("image/png") # Returns ".png"
|
|
179
|
-
filename = f"image_{uuid.uuid4()}{extension}"
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
### 2. Configuration and Type Utilities
|
|
183
|
-
|
|
184
|
-
```python
|
|
185
|
-
from solace_agent_mesh.common.utils.pydantic_utils import SamConfigBase
|
|
186
|
-
from solace_agent_mesh.common.utils.type_utils import is_subclass_by_name
|
|
187
|
-
from pydantic import Field
|
|
188
|
-
from typing import Optional
|
|
189
|
-
|
|
190
|
-
# Define configuration with Pydantic validation and dict-like access
|
|
191
|
-
class AgentConfig(SamConfigBase):
|
|
192
|
-
name: str
|
|
193
|
-
timeout: int = 30
|
|
194
|
-
debug: bool = False
|
|
195
|
-
api_key: Optional[str] = None
|
|
196
|
-
|
|
197
|
-
# Load config from YAML/dict with None value cleaning
|
|
198
|
-
config_dict = {
|
|
199
|
-
"name": "my_agent",
|
|
200
|
-
"timeout": None, # Will use default value of 30
|
|
201
|
-
"debug": True,
|
|
202
|
-
"api_key": None # Will use default value of None
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
config = AgentConfig.model_validate_and_clean(config_dict)
|
|
206
|
-
|
|
207
|
-
# Use both Pydantic and dict-style access
|
|
208
|
-
print(config.name) # Pydantic style: "my_agent"
|
|
209
|
-
print(config["timeout"]) # Dict style: 30 (default applied)
|
|
210
|
-
print(config.get("debug", False)) # Dict .get(): True
|
|
211
|
-
|
|
212
|
-
# Check if field was explicitly set
|
|
213
|
-
if "api_key" in config:
|
|
214
|
-
print("API key was provided")
|
|
215
|
-
else:
|
|
216
|
-
print("API key not provided, using default")
|
|
217
|
-
|
|
218
|
-
# Robust type checking for development
|
|
219
|
-
class BaseAgent:
|
|
220
|
-
pass
|
|
221
|
-
|
|
222
|
-
class MyAgent(BaseAgent):
|
|
223
|
-
pass
|
|
224
|
-
|
|
225
|
-
# This works even if BaseAgent is loaded from different paths
|
|
226
|
-
if is_subclass_by_name(MyAgent, "BaseAgent"):
|
|
227
|
-
print("MyAgent is a BaseAgent subclass")
|
|
228
|
-
```
|
|
229
|
-
|
|
230
|
-
### 3. Platform Compatibility and System Initialization
|
|
231
|
-
|
|
232
|
-
```python
|
|
233
|
-
# Early in application startup - import for side effects
|
|
234
|
-
from solace_agent_mesh.common.utils import asyncio_macos_fix # Auto-applies macOS fix
|
|
235
|
-
from solace_agent_mesh.common.utils.initializer import initialize
|
|
236
|
-
|
|
237
|
-
# Initialize enterprise features if available
|
|
238
|
-
try:
|
|
239
|
-
initialize()
|
|
240
|
-
print("Enterprise features initialized")
|
|
241
|
-
except Exception as e:
|
|
242
|
-
print(f"Running in community mode: {e}")
|
|
243
|
-
|
|
244
|
-
# Now asyncio subprocess creation works reliably on macOS
|
|
245
|
-
import asyncio
|
|
246
|
-
|
|
247
|
-
async def run_command(cmd: str):
|
|
248
|
-
process = await asyncio.create_subprocess_exec(
|
|
249
|
-
*cmd.split(),
|
|
250
|
-
stdout=asyncio.subprocess.PIPE,
|
|
251
|
-
stderr=asyncio.subprocess.PIPE
|
|
252
|
-
)
|
|
253
|
-
stdout, stderr = await process.communicate()
|
|
254
|
-
return stdout.decode(), stderr.decode(), process.returncode
|
|
255
|
-
|
|
256
|
-
# This will work on macOS without NotImplementedError
|
|
257
|
-
result = await run_command("echo Hello World")
|
|
258
|
-
```
|
|
259
|
-
|
|
260
|
-
### 4. Structured Logging Setup
|
|
261
|
-
|
|
262
|
-
```python
|
|
263
|
-
import logging
|
|
264
|
-
import os
|
|
265
|
-
from solace_agent_mesh.common.utils.log_formatters import DatadogJsonFormatter
|
|
266
|
-
|
|
267
|
-
# Configure structured JSON logging
|
|
268
|
-
logger = logging.getLogger("my_application")
|
|
269
|
-
handler = logging.StreamHandler()
|
|
270
|
-
handler.setFormatter(DatadogJsonFormatter())
|
|
271
|
-
logger.addHandler(handler)
|
|
272
|
-
logger.setLevel(logging.INFO)
|
|
273
|
-
|
|
274
|
-
# Set service name for Datadog
|
|
275
|
-
os.environ["SERVICE_NAME"] = "my_agent_service"
|
|
276
|
-
|
|
277
|
-
# Log with structured data - automatically includes trace IDs if available
|
|
278
|
-
logger.info("User action completed", extra={
|
|
279
|
-
"user_id": "user123",
|
|
280
|
-
"action": "file_upload",
|
|
281
|
-
"file_size": 1024,
|
|
282
|
-
"dd.trace_id": "abc123" # Will be included in JSON output
|
|
283
|
-
})
|
|
284
|
-
|
|
285
|
-
# Output will be JSON with timestamp, level, service, code location, etc.
|
|
286
|
-
```
|
|
287
|
-
|
|
288
|
-
### 5. Secure Push Notification System
|
|
289
|
-
|
|
290
|
-
```python
|
|
291
|
-
from solace_agent_mesh.common.utils.push_notification_auth import (
|
|
292
|
-
PushNotificationSenderAuth,
|
|
293
|
-
PushNotificationReceiverAuth
|
|
294
|
-
)
|
|
295
|
-
from starlette.applications import Starlette
|
|
296
|
-
from starlette.requests import Request
|
|
297
|
-
from starlette.responses import Response, JSONResponse
|
|
298
|
-
|
|
299
|
-
# Sender setup and usage
|
|
300
|
-
sender_auth = PushNotificationSenderAuth()
|
|
301
|
-
sender_auth.generate_jwk() # Generate RSA key pair
|
|
302
|
-
|
|
303
|
-
async def notify_clients(event_data: dict):
|
|
304
|
-
client_urls = ["https://client1.example.com/webhook", "https://client2.example.com/webhook"]
|
|
305
|
-
|
|
306
|
-
for url in client_urls:
|
|
307
|
-
# Verify URL accepts notifications
|
|
308
|
-
if await sender_auth.verify_push_notification_url(url):
|
|
309
|
-
# Send authenticated notification
|
|
310
|
-
await sender_auth.send_push_notification(url, {
|
|
311
|
-
"event": "data_updated",
|
|
312
|
-
"timestamp": "2024-01-15T10:30:00Z",
|
|
313
|
-
"data": event_data
|
|
314
|
-
})
|
|
315
|
-
else:
|
|
316
|
-
print(f"Failed to verify URL: {url}")
|
|
317
|
-
|
|
318
|
-
# Receiver setup
|
|
319
|
-
app = Starlette()
|
|
320
|
-
receiver_auth = PushNotificationReceiverAuth()
|
|
321
|
-
|
|
322
|
-
# Load sender's public keys
|
|
323
|
-
await receiver_auth.load_jwks("https://sender.example.com/.well-known/jwks.json")
|
|
324
|
-
|
|
325
|
-
@app.route("/webhook", methods=["POST"])
|
|
326
|
-
async def webhook_handler(request: Request):
|
|
327
|
-
try:
|
|
328
|
-
# Verify JWT signature and request integrity
|
|
329
|
-
if await receiver_auth.verify_push_notification(request):
|
|
330
|
-
data = await request.json()
|
|
331
|
-
# Process authenticated notification
|
|
332
|
-
print(f"Received verified notification: {data}")
|
|
333
|
-
return Response
|
|
334
|
-
|
|
335
|
-
# content_hash: c5bd94fc53429706fd6649d3dcf489665da150cfed54fd6961472c7b57dfc910
|