adcp 2.13.0__tar.gz → 2.15.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. {adcp-2.13.0/src/adcp.egg-info → adcp-2.15.0}/PKG-INFO +2 -2
  2. {adcp-2.13.0 → adcp-2.15.0}/pyproject.toml +2 -2
  3. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/__init__.py +14 -1
  4. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/adagents.py +53 -9
  5. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/client.py +361 -57
  6. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/mcp.py +1 -3
  7. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/__init__.py +30 -34
  8. adcp-2.15.0/src/adcp/types/_ergonomic.py +279 -0
  9. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/_generated.py +82 -13
  10. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/aliases.py +23 -0
  11. adcp-2.15.0/src/adcp/types/coercion.py +194 -0
  12. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/adagents.py +9 -13
  13. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/activation_key.py +12 -2
  14. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/daast_asset.py +12 -2
  15. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/image_asset.py +9 -5
  16. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/vast_asset.py +12 -2
  17. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/video_asset.py +9 -5
  18. adcp-2.15.0/src/adcp/types/generated_poc/core/async_response_data.py +72 -0
  19. adcp-2.15.0/src/adcp/types/generated_poc/core/brand_manifest_ref.py +35 -0
  20. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_asset.py +4 -6
  21. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_manifest.py +4 -6
  22. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/deployment.py +16 -8
  23. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/destination.py +12 -2
  24. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format.py +3 -3
  25. adcp-2.13.0/src/adcp/types/generated_poc/core/webhook_payload.py → adcp-2.15.0/src/adcp/types/generated_poc/core/mcp_webhook_payload.py +8 -33
  26. adcp-2.15.0/src/adcp/types/generated_poc/core/pricing_option.py +51 -0
  27. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product.py +4 -29
  28. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_offerings.py +5 -21
  29. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property.py +4 -6
  30. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/publisher_property_selector.py +15 -2
  31. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/push_notification_config.py +1 -4
  32. adcp-2.15.0/src/adcp/types/generated_poc/core/start_timing.py +18 -0
  33. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/sub_asset.py +12 -2
  34. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_response.py +3 -14
  35. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_render.py +3 -11
  36. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_input_required.py +37 -0
  37. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_submitted.py +19 -0
  38. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/create_media_buy_async_response_working.py +31 -0
  39. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_request.py +7 -26
  40. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_response.py +4 -2
  41. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_input_required.py +38 -0
  42. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_submitted.py +24 -0
  43. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/get_products_async_response_working.py +35 -0
  44. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_request.py +5 -20
  45. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_response.py +5 -7
  46. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_input_required.py +31 -0
  47. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_submitted.py +19 -0
  48. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/sync_creatives_async_response_working.py +37 -0
  49. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_input_required.py +30 -0
  50. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_submitted.py +19 -0
  51. adcp-2.15.0/src/adcp/types/generated_poc/media_buy/update_media_buy_async_response_working.py +31 -0
  52. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_request.py +4 -14
  53. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_request.py +2 -2
  54. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/activate_signal_response.py +2 -2
  55. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_request.py +2 -2
  56. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/get_signals_response.py +2 -3
  57. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/preview_cache.py +6 -4
  58. adcp-2.15.0/src/adcp/webhooks.py +508 -0
  59. {adcp-2.13.0 → adcp-2.15.0/src/adcp.egg-info}/PKG-INFO +2 -2
  60. {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/SOURCES.txt +23 -3
  61. {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/requires.txt +1 -1
  62. {adcp-2.13.0 → adcp-2.15.0}/tests/test_adagents.py +275 -26
  63. {adcp-2.13.0 → adcp-2.15.0}/tests/test_preview_html.py +2 -1
  64. adcp-2.15.0/tests/test_type_coercion.py +396 -0
  65. adcp-2.15.0/tests/test_webhook_handling.py +1033 -0
  66. adcp-2.13.0/src/adcp/types/generated_poc/core/dimensions.py +0 -18
  67. {adcp-2.13.0 → adcp-2.15.0}/LICENSE +0 -0
  68. {adcp-2.13.0 → adcp-2.15.0}/MANIFEST.in +0 -0
  69. {adcp-2.13.0 → adcp-2.15.0}/README.md +0 -0
  70. {adcp-2.13.0 → adcp-2.15.0}/setup.cfg +0 -0
  71. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/ADCP_VERSION +0 -0
  72. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/__main__.py +0 -0
  73. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/config.py +0 -0
  74. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/exceptions.py +0 -0
  75. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/__init__.py +0 -0
  76. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/a2a.py +0 -0
  77. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/protocols/base.py +0 -0
  78. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/py.typed +0 -0
  79. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/simple.py +0 -0
  80. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/testing/__init__.py +0 -0
  81. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/testing/test_helpers.py +0 -0
  82. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/base.py +0 -0
  83. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/core.py +0 -0
  84. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/__init__.py +0 -0
  85. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/__init__.py +0 -0
  86. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/__init__.py +0 -0
  87. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/audio_asset.py +0 -0
  88. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/css_asset.py +0 -0
  89. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/html_asset.py +0 -0
  90. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/javascript_asset.py +0 -0
  91. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/text_asset.py +0 -0
  92. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/url_asset.py +0 -0
  93. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/assets/webhook_asset.py +0 -0
  94. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/brand_manifest.py +0 -0
  95. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/context.py +0 -0
  96. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_assignment.py +0 -0
  97. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_filters.py +0 -0
  98. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/creative_policy.py +0 -0
  99. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/delivery_metrics.py +0 -0
  100. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/error.py +0 -0
  101. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/ext.py +0 -0
  102. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/format_id.py +0 -0
  103. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/frequency_cap.py +0 -0
  104. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/measurement.py +0 -0
  105. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/media_buy.py +0 -0
  106. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/package.py +0 -0
  107. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/performance_feedback.py +0 -0
  108. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/placement.py +0 -0
  109. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/product_filters.py +0 -0
  110. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/promoted_products.py +0 -0
  111. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_id.py +0 -0
  112. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/property_tag.py +0 -0
  113. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/protocol_envelope.py +0 -0
  114. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/reporting_capabilities.py +0 -0
  115. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/response.py +0 -0
  116. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/signal_filters.py +0 -0
  117. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/core/targeting.py +0 -0
  118. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/__init__.py +0 -0
  119. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_request.py +0 -0
  120. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/list_creative_formats_response.py +0 -0
  121. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/creative/preview_creative_request.py +0 -0
  122. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/__init__.py +0 -0
  123. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/adcp_domain.py +0 -0
  124. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/asset_content_type.py +0 -0
  125. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/auth_scheme.py +0 -0
  126. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/available_metric.py +0 -0
  127. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/channels.py +0 -0
  128. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/co_branding_requirement.py +0 -0
  129. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_action.py +0 -0
  130. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_agent_capability.py +0 -0
  131. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_sort_field.py +0 -0
  132. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/creative_status.py +0 -0
  133. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_tracking_event.py +0 -0
  134. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/daast_version.py +0 -0
  135. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/delivery_type.py +0 -0
  136. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/dimension_unit.py +0 -0
  137. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feed_format.py +0 -0
  138. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/feedback_source.py +0 -0
  139. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_category.py +0 -0
  140. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/format_id_parameter.py +0 -0
  141. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/frequency_cap_scope.py +0 -0
  142. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/history_entry_type.py +0 -0
  143. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/http_method.py +0 -0
  144. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/identifier_types.py +0 -0
  145. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/javascript_module_type.py +0 -0
  146. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/landing_page_requirement.py +0 -0
  147. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/markdown_flavor.py +0 -0
  148. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/media_buy_status.py +0 -0
  149. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/metric_type.py +0 -0
  150. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/notification_type.py +0 -0
  151. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pacing.py +0 -0
  152. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/preview_output_format.py +0 -0
  153. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/pricing_model.py +0 -0
  154. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/property_type.py +0 -0
  155. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/publisher_identifier_types.py +0 -0
  156. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/reporting_frequency.py +0 -0
  157. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/signal_catalog_type.py +0 -0
  158. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/sort_direction.py +0 -0
  159. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/standard_format_ids.py +0 -0
  160. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_status.py +0 -0
  161. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/task_type.py +0 -0
  162. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/update_frequency.py +0 -0
  163. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/url_asset_type.py +0 -0
  164. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/validation_mode.py +0 -0
  165. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_tracking_event.py +0 -0
  166. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/vast_version.py +0 -0
  167. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_response_type.py +0 -0
  168. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/enums/webhook_security_method.py +0 -0
  169. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/__init__.py +0 -0
  170. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_request.py +0 -0
  171. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/build_creative_response.py +0 -0
  172. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/create_media_buy_response.py +0 -0
  173. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_media_buy_delivery_request.py +0 -0
  174. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/get_products_response.py +0 -0
  175. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_request.py +0 -0
  176. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_authorized_properties_response.py +0 -0
  177. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_request.py +0 -0
  178. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creative_formats_response.py +0 -0
  179. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/list_creatives_request.py +0 -0
  180. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/package_request.py +0 -0
  181. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_request.py +0 -0
  182. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/provide_performance_feedback_response.py +0 -0
  183. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_request.py +0 -0
  184. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/sync_creatives_response.py +0 -0
  185. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/media_buy/update_media_buy_response.py +0 -0
  186. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/__init__.py +0 -0
  187. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpc_option.py +0 -0
  188. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpcv_option.py +0 -0
  189. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_auction_option.py +0 -0
  190. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpm_fixed_option.py +0 -0
  191. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpp_option.py +0 -0
  192. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/cpv_option.py +0 -0
  193. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/flat_rate_option.py +0 -0
  194. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_auction_option.py +0 -0
  195. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/pricing_options/vcpm_fixed_option.py +0 -0
  196. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/__init__.py +0 -0
  197. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/protocols/adcp_extension.py +0 -0
  198. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/types/generated_poc/signals/__init__.py +0 -0
  199. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/__init__.py +0 -0
  200. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/operation_id.py +0 -0
  201. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/utils/response_parser.py +0 -0
  202. {adcp-2.13.0 → adcp-2.15.0}/src/adcp/validation.py +0 -0
  203. {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/dependency_links.txt +0 -0
  204. {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/entry_points.txt +0 -0
  205. {adcp-2.13.0 → adcp-2.15.0}/src/adcp.egg-info/top_level.txt +0 -0
  206. {adcp-2.13.0 → adcp-2.15.0}/tests/test_cli.py +0 -0
  207. {adcp-2.13.0 → adcp-2.15.0}/tests/test_client.py +0 -0
  208. {adcp-2.13.0 → adcp-2.15.0}/tests/test_code_generation.py +0 -0
  209. {adcp-2.13.0 → adcp-2.15.0}/tests/test_discriminated_unions.py +0 -0
  210. {adcp-2.13.0 → adcp-2.15.0}/tests/test_format_id_validation.py +0 -0
  211. {adcp-2.13.0 → adcp-2.15.0}/tests/test_helpers.py +0 -0
  212. {adcp-2.13.0 → adcp-2.15.0}/tests/test_protocols.py +0 -0
  213. {adcp-2.13.0 → adcp-2.15.0}/tests/test_public_api.py +0 -0
  214. {adcp-2.13.0 → adcp-2.15.0}/tests/test_response_parser.py +0 -0
  215. {adcp-2.13.0 → adcp-2.15.0}/tests/test_response_str.py +0 -0
  216. {adcp-2.13.0 → adcp-2.15.0}/tests/test_simple_api.py +0 -0
  217. {adcp-2.13.0 → adcp-2.15.0}/tests/test_type_aliases.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: adcp
3
- Version: 2.13.0
3
+ Version: 2.15.0
4
4
  Summary: Official Python client for the Ad Context Protocol (AdCP)
5
5
  Author-email: AdCP Community <maintainers@adcontextprotocol.org>
6
6
  License: Apache-2.0
@@ -25,7 +25,7 @@ Requires-Dist: httpx>=0.24.0
25
25
  Requires-Dist: pydantic>=2.0.0
26
26
  Requires-Dist: typing-extensions>=4.5.0
27
27
  Requires-Dist: a2a-sdk>=0.3.0
28
- Requires-Dist: mcp>=0.9.0
28
+ Requires-Dist: mcp>=1.23.2
29
29
  Requires-Dist: email-validator>=2.0.0
30
30
  Provides-Extra: dev
31
31
  Requires-Dist: pytest>=7.0.0; extra == "dev"
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "adcp"
7
- version = "2.13.0"
7
+ version = "2.15.0"
8
8
  description = "Official Python client for the Ad Context Protocol (AdCP)"
9
9
  authors = [
10
10
  {name = "AdCP Community", email = "maintainers@adcontextprotocol.org"}
@@ -30,7 +30,7 @@ dependencies = [
30
30
  "pydantic>=2.0.0",
31
31
  "typing-extensions>=4.5.0",
32
32
  "a2a-sdk>=0.3.0",
33
- "mcp>=0.9.0",
33
+ "mcp>=1.23.2",
34
34
  "email-validator>=2.0.0",
35
35
  ]
36
36
 
@@ -101,6 +101,7 @@ from adcp.types import (
101
101
  ListCreativeFormatsResponse,
102
102
  ListCreativesRequest,
103
103
  ListCreativesResponse,
104
+ McpWebhookPayload,
104
105
  MediaBuy,
105
106
  MediaBuyStatus,
106
107
  Package,
@@ -178,8 +179,14 @@ from adcp.validation import (
178
179
  validate_product,
179
180
  validate_publisher_properties_item,
180
181
  )
182
+ from adcp.webhooks import (
183
+ create_a2a_webhook_payload,
184
+ create_mcp_webhook_payload,
185
+ extract_webhook_result_data,
186
+ get_adcp_signed_headers_for_webhook,
187
+ )
181
188
 
182
- __version__ = "2.13.0"
189
+ __version__ = "2.15.0"
183
190
 
184
191
 
185
192
  def get_adcp_version() -> str:
@@ -215,6 +222,12 @@ __all__ = [
215
222
  "TaskResult",
216
223
  "TaskStatus",
217
224
  "WebhookMetadata",
225
+ # Webhook utilities
226
+ "create_mcp_webhook_payload",
227
+ "create_a2a_webhook_payload",
228
+ "get_adcp_signed_headers_for_webhook",
229
+ "extract_webhook_result_data",
230
+ "McpWebhookPayload",
218
231
  # Common request/response types (re-exported for convenience)
219
232
  "CreateMediaBuyRequest",
220
233
  "CreateMediaBuyResponse",
@@ -478,12 +478,19 @@ def get_all_tags(adagents_data: dict[str, Any]) -> set[str]:
478
478
  def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> list[dict[str, Any]]:
479
479
  """Get all properties authorized for a specific agent.
480
480
 
481
+ Handles all authorization types per the AdCP specification:
482
+ - inline_properties: Properties defined directly in the agent's properties array
483
+ - property_ids: Filter top-level properties by property_id
484
+ - property_tags: Filter top-level properties by tags
485
+ - publisher_properties: References properties from other publisher domains
486
+ (returns the selector objects, not resolved properties)
487
+
481
488
  Args:
482
489
  adagents_data: Parsed adagents.json data
483
490
  agent_url: URL of the agent to filter by
484
491
 
485
492
  Returns:
486
- List of properties for the specified agent (empty if agent not found or no properties)
493
+ List of properties for the specified agent (empty if agent not found)
487
494
 
488
495
  Raises:
489
496
  AdagentsValidationError: If adagents_data is malformed
@@ -495,6 +502,11 @@ def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> li
495
502
  if not isinstance(authorized_agents, list):
496
503
  raise AdagentsValidationError("adagents.json must have 'authorized_agents' array")
497
504
 
505
+ # Get top-level properties for reference-based authorization types
506
+ top_level_properties = adagents_data.get("properties", [])
507
+ if not isinstance(top_level_properties, list):
508
+ top_level_properties = []
509
+
498
510
  # Normalize the agent URL for comparison
499
511
  normalized_agent_url = normalize_url(agent_url)
500
512
 
@@ -510,12 +522,44 @@ def get_properties_by_agent(adagents_data: dict[str, Any], agent_url: str) -> li
510
522
  if normalize_url(agent_url_from_json) != normalized_agent_url:
511
523
  continue
512
524
 
513
- # Found the agent - return their properties
514
- properties = agent.get("properties", [])
515
- if not isinstance(properties, list):
516
- return []
517
-
518
- return [p for p in properties if isinstance(p, dict)]
525
+ # Found the agent - determine authorization type
526
+ authorization_type = agent.get("authorization_type", "")
527
+
528
+ # Handle inline_properties (properties array directly on agent)
529
+ if authorization_type == "inline_properties" or "properties" in agent:
530
+ properties = agent.get("properties", [])
531
+ if not isinstance(properties, list):
532
+ return []
533
+ return [p for p in properties if isinstance(p, dict)]
534
+
535
+ # Handle property_ids (filter top-level properties by property_id)
536
+ if authorization_type == "property_ids":
537
+ authorized_ids = set(agent.get("property_ids", []))
538
+ return [
539
+ p
540
+ for p in top_level_properties
541
+ if isinstance(p, dict) and p.get("property_id") in authorized_ids
542
+ ]
543
+
544
+ # Handle property_tags (filter top-level properties by tags)
545
+ if authorization_type == "property_tags":
546
+ authorized_tags = set(agent.get("property_tags", []))
547
+ return [
548
+ p
549
+ for p in top_level_properties
550
+ if isinstance(p, dict) and set(p.get("tags", [])) & authorized_tags
551
+ ]
552
+
553
+ # Handle publisher_properties (cross-domain references)
554
+ # Returns the selector objects; caller must resolve against other domains
555
+ if authorization_type == "publisher_properties":
556
+ publisher_props = agent.get("publisher_properties", [])
557
+ if not isinstance(publisher_props, list):
558
+ return []
559
+ return [p for p in publisher_props if isinstance(p, dict)]
560
+
561
+ # No recognized authorization type - return empty
562
+ return []
519
563
 
520
564
  return []
521
565
 
@@ -544,8 +588,8 @@ class AuthorizationContext:
544
588
  if not isinstance(prop, dict):
545
589
  continue
546
590
 
547
- # Extract property ID
548
- prop_id = prop.get("id")
591
+ # Extract property ID (per AdCP v2 schema, the field is "property_id")
592
+ prop_id = prop.get("property_id")
549
593
  if prop_id and isinstance(prop_id, str):
550
594
  self.property_ids.append(prop_id)
551
595