growsurf-python 1.3.0__tar.gz → 1.4.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 (192) hide show
  1. growsurf_python-1.4.0/.release-please-manifest.json +3 -0
  2. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/CHANGELOG.md +7 -0
  3. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/PKG-INFO +1 -1
  4. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/pyproject.toml +1 -1
  5. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_version.py +1 -1
  6. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/participant.py +22 -12
  7. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/rewards.py +28 -0
  8. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign.py +7 -0
  9. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_analytics_params.py +10 -5
  10. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_reward.py +1 -1
  11. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward.py +7 -0
  12. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_create_params.py +8 -0
  13. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_update_params.py +8 -0
  14. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/commission_structure.py +2 -1
  15. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/participant_commission_list.py +3 -0
  16. growsurf_python-1.4.0/tests/types/test_lead_reward_events.py +62 -0
  17. growsurf_python-1.3.0/.release-please-manifest.json +0 -3
  18. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/.gitignore +0 -0
  19. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/CONTRIBUTING.md +0 -0
  20. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/LICENSE +0 -0
  21. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/README.md +0 -0
  22. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/SECURITY.md +0 -0
  23. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/api.md +0 -0
  24. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/bin/check-release-environment +0 -0
  25. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/bin/publish-pypi +0 -0
  26. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/examples/.keep +0 -0
  27. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/release-please-config.json +0 -0
  28. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/requirements-dev.lock +0 -0
  29. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/__init__.py +0 -0
  30. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_base_client.py +0 -0
  31. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_client.py +0 -0
  32. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_compat.py +0 -0
  33. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_constants.py +0 -0
  34. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_exceptions.py +0 -0
  35. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_files.py +0 -0
  36. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_models.py +0 -0
  37. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_qs.py +0 -0
  38. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_resource.py +0 -0
  39. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_response.py +0 -0
  40. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_streaming.py +0 -0
  41. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_types.py +0 -0
  42. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/__init__.py +0 -0
  43. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_compat.py +0 -0
  44. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_datetime_parse.py +0 -0
  45. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_json.py +0 -0
  46. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_logs.py +0 -0
  47. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_path.py +0 -0
  48. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_proxy.py +0 -0
  49. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_reflection.py +0 -0
  50. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_resources_proxy.py +0 -0
  51. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_streams.py +0 -0
  52. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_sync.py +0 -0
  53. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_transform.py +0 -0
  54. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_typing.py +0 -0
  55. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/_utils/_utils.py +0 -0
  56. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/lib/.keep +0 -0
  57. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/py.typed +0 -0
  58. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/__init__.py +0 -0
  59. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/account.py +0 -0
  60. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/__init__.py +0 -0
  61. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/campaign.py +0 -0
  62. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/commission.py +0 -0
  63. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/design.py +0 -0
  64. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/emails.py +0 -0
  65. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/installation.py +0 -0
  66. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/options.py +0 -0
  67. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/reward.py +0 -0
  68. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/campaign/webhooks.py +0 -0
  69. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/resources/team.py +0 -0
  70. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/__init__.py +0 -0
  71. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/account_create_params.py +0 -0
  72. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/affiliate_application.py +0 -0
  73. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/affiliate_application_answer.py +0 -0
  74. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/affiliate_application_list_response.py +0 -0
  75. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/affiliate_invite.py +0 -0
  76. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/affiliate_invite_list_response.py +0 -0
  77. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/__init__.py +0 -0
  78. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign_design.py +0 -0
  79. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign_emails.py +0 -0
  80. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign_installation.py +0 -0
  81. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign_options.py +0 -0
  82. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/campaign_reward_list_response.py +0 -0
  83. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/commission_approve_response.py +0 -0
  84. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/commission_delete_response.py +0 -0
  85. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/delete_reward_response.py +0 -0
  86. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/delete_webhook_response.py +0 -0
  87. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/email_participant_response.py +0 -0
  88. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/fraud_risk_level.py +0 -0
  89. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant.py +0 -0
  90. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_activity_logs_response.py +0 -0
  91. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_add_params.py +0 -0
  92. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_analytics_response.py +0 -0
  93. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_bulk_delete_params.py +0 -0
  94. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_bulk_delete_response.py +0 -0
  95. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_delete_response.py +0 -0
  96. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_email_params.py +0 -0
  97. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_get_payout_destination_response.py +0 -0
  98. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_activity_logs_params.py +0 -0
  99. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_commissions_params.py +0 -0
  100. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_payouts_params.py +0 -0
  101. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_referrals_params.py +0 -0
  102. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_rewards_params.py +0 -0
  103. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_list_rewards_response.py +0 -0
  104. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_record_transaction_params.py +0 -0
  105. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_record_transaction_response.py +0 -0
  106. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_refund_transaction_params.py +0 -0
  107. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_refund_transaction_response.py +0 -0
  108. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_params.py +0 -0
  109. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_request_payout_destination_confirmation_response.py +0 -0
  110. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_send_invites_params.py +0 -0
  111. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_send_invites_response.py +0 -0
  112. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_trigger_referral_params.py +0 -0
  113. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_trigger_referral_response.py +0 -0
  114. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/participant_update_params.py +0 -0
  115. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/referral_source.py +0 -0
  116. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/referral_status.py +0 -0
  117. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_approve_params.py +0 -0
  118. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_approve_response.py +0 -0
  119. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_delete_response.py +0 -0
  120. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_fulfill_response.py +0 -0
  121. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/reward_tax_valuation.py +0 -0
  122. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook.py +0 -0
  123. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_create_params.py +0 -0
  124. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_event.py +0 -0
  125. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_list_response.py +0 -0
  126. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_test_params.py +0 -0
  127. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_test_response.py +0 -0
  128. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign/webhook_update_params.py +0 -0
  129. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_create_affiliate_invite_params.py +0 -0
  130. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_create_mobile_participant_token_params.py +0 -0
  131. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_create_mobile_participant_token_response.py +0 -0
  132. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_create_params.py +0 -0
  133. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_affiliate_applications_params.py +0 -0
  134. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_affiliate_invites_params.py +0 -0
  135. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_commissions_params.py +0 -0
  136. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_leaderboard_params.py +0 -0
  137. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_participants_params.py +0 -0
  138. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_payouts_params.py +0 -0
  139. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_referrals_params.py +0 -0
  140. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_list_response.py +0 -0
  141. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_retrieve_analytics_params.py +0 -0
  142. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_retrieve_analytics_response.py +0 -0
  143. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_review_affiliate_application_params.py +0 -0
  144. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/campaign_update_params.py +0 -0
  145. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/create_account_response.py +0 -0
  146. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/email_analytics.py +0 -0
  147. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/participant_list.py +0 -0
  148. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/participant_payout_list.py +0 -0
  149. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/referral_list.py +0 -0
  150. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/rotate_api_key_response.py +0 -0
  151. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/team.py +0 -0
  152. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/team_update_params.py +0 -0
  153. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/src/growsurf/types/verification_email_response.py +0 -0
  154. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/__init__.py +0 -0
  155. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/__init__.py +0 -0
  156. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/__init__.py +0 -0
  157. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_commission.py +0 -0
  158. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_design.py +0 -0
  159. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_emails.py +0 -0
  160. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_installation.py +0 -0
  161. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_options.py +0 -0
  162. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_participant.py +0 -0
  163. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_reward.py +0 -0
  164. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_rewards.py +0 -0
  165. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/campaign/test_webhooks.py +0 -0
  166. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/test_account.py +0 -0
  167. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/test_campaign.py +0 -0
  168. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/api_resources/test_team_contract.py +0 -0
  169. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/conftest.py +0 -0
  170. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/sample_file.txt +0 -0
  171. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_client.py +0 -0
  172. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_extract_files.py +0 -0
  173. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_files.py +0 -0
  174. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_models.py +0 -0
  175. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_qs.py +0 -0
  176. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_required_args.py +0 -0
  177. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_response.py +0 -0
  178. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_streaming.py +0 -0
  179. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_transform.py +0 -0
  180. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_utils/test_datetime_parse.py +0 -0
  181. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_utils/test_json.py +0 -0
  182. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_utils/test_path.py +0 -0
  183. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_utils/test_proxy.py +0 -0
  184. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/test_utils/test_typing.py +0 -0
  185. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_affiliate_application.py +0 -0
  186. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_analytics_reward_status.py +0 -0
  187. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_email_analytics.py +0 -0
  188. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_participant_contract.py +0 -0
  189. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_payout_provider_forward_compat.py +0 -0
  190. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/types/test_referral_source.py +0 -0
  191. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/tests/utils.py +0 -0
  192. {growsurf_python-1.3.0 → growsurf_python-1.4.0}/uv.lock +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "1.4.0"
3
+ }
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [1.4.0](https://github.com/growsurf/growsurf-python/compare/v1.3.0...v1.4.0) (2026-08-25)
4
+
5
+
6
+ ### Features
7
+
8
+ * **api:** add reward and commission event support ([a8b2506](https://github.com/growsurf/growsurf-python/commit/a8b25066fc91b7a144b4a718911f8f2123bdecb3))
9
+
3
10
  ## [1.3.0](https://github.com/growsurf/growsurf-python/compare/v1.2.1...v1.3.0) (2026-08-23)
4
11
 
5
12
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: growsurf-python
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  Summary: The official Python library for the growsurf API
5
5
  Project-URL: Homepage, https://github.com/growsurf/growsurf-python
6
6
  Project-URL: Repository, https://github.com/growsurf/growsurf-python
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "growsurf-python"
3
- version = "1.3.0"
3
+ version = "1.4.0"
4
4
  description = "The official Python library for the growsurf API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "growsurf"
4
- __version__ = "1.3.0" # x-release-please-version
4
+ __version__ = "1.4.0" # x-release-please-version
@@ -1146,13 +1146,17 @@ class ParticipantResource(SyncAPIResource):
1146
1146
  for `sent` (accepted for delivery), `delivered`, `opened`, `clicked`,
1147
1147
  `bounced`, and `spamComplaints` metrics attributed to this participant,
1148
1148
  including invitations they sent. Use `include=email,series` to include the
1149
- same counts in each UTC series bucket.
1149
+ same counts in each UTC series bucket. `days`, `startDate`, and `endDate`
1150
+ filter only the optional `series` and `email` data. They do not filter the
1151
+ top-level `analytics`, `ranks`, or `shareCount` values.
1150
1152
 
1151
1153
  Args:
1152
- days: Last number of days to retrieve analytics for. Defaults to 365. Maximum 1825.
1154
+ days: Last number of days for optional `series` and `email` analytics.
1155
+ Defaults to 365. Maximum 1825. Does not filter the top-level all-time totals.
1153
1156
 
1154
- end_date: End date of the analytics timeframe as a Unix timestamp in milliseconds.
1155
- Required if `days` is not set.
1157
+ end_date: End of a custom `series` and `email` analytics window as a Unix
1158
+ timestamp in milliseconds. Set it together with `startDate`. Does not filter
1159
+ the top-level all-time totals.
1156
1160
 
1157
1161
  include: Comma-separated optional data. `series` returns this participant's own
1158
1162
  activity per period; `email` returns `sent`, `delivered`, `opened`, `clicked`,
@@ -1165,8 +1169,9 @@ class ParticipantResource(SyncAPIResource):
1165
1169
  interval: Bucket size for the `series` (only used when `include` contains `series`).
1166
1170
  Defaults to `day`.
1167
1171
 
1168
- start_date: Start date of the analytics timeframe as a Unix timestamp in milliseconds.
1169
- Required if `days` is not set.
1172
+ start_date: Start of a custom `series` and `email` analytics window as a Unix
1173
+ timestamp in milliseconds. Set it together with `endDate`. Does not filter
1174
+ the top-level all-time totals.
1170
1175
 
1171
1176
  extra_headers: Send extra headers
1172
1177
 
@@ -2393,13 +2398,17 @@ class AsyncParticipantResource(AsyncAPIResource):
2393
2398
  for `sent` (accepted for delivery), `delivered`, `opened`, `clicked`,
2394
2399
  `bounced`, and `spamComplaints` metrics attributed to this participant,
2395
2400
  including invitations they sent. Use `include=email,series` to include the
2396
- same counts in each UTC series bucket.
2401
+ same counts in each UTC series bucket. `days`, `startDate`, and `endDate`
2402
+ filter only the optional `series` and `email` data. They do not filter the
2403
+ top-level `analytics`, `ranks`, or `shareCount` values.
2397
2404
 
2398
2405
  Args:
2399
- days: Last number of days to retrieve analytics for. Defaults to 365. Maximum 1825.
2406
+ days: Last number of days for optional `series` and `email` analytics.
2407
+ Defaults to 365. Maximum 1825. Does not filter the top-level all-time totals.
2400
2408
 
2401
- end_date: End date of the analytics timeframe as a Unix timestamp in milliseconds.
2402
- Required if `days` is not set.
2409
+ end_date: End of a custom `series` and `email` analytics window as a Unix
2410
+ timestamp in milliseconds. Set it together with `startDate`. Does not filter
2411
+ the top-level all-time totals.
2403
2412
 
2404
2413
  include: Comma-separated optional data. `series` returns this participant's own
2405
2414
  activity per period; `email` returns `sent`, `delivered`, `opened`, `clicked`,
@@ -2412,8 +2421,9 @@ class AsyncParticipantResource(AsyncAPIResource):
2412
2421
  interval: Bucket size for the `series` (only used when `include` contains `series`).
2413
2422
  Defaults to `day`.
2414
2423
 
2415
- start_date: Start date of the analytics timeframe as a Unix timestamp in milliseconds.
2416
- Required if `days` is not set.
2424
+ start_date: Start of a custom `series` and `email` analytics window as a Unix
2425
+ timestamp in milliseconds. Set it together with `endDate`. Does not filter
2426
+ the top-level all-time totals.
2417
2427
 
2418
2428
  extra_headers: Send extra headers
2419
2429
 
@@ -59,6 +59,7 @@ class RewardsResource(SyncAPIResource):
59
59
  conversions_required: int | Omit = omit,
60
60
  coupon_code: Optional[str] | Omit = omit,
61
61
  description: str | Omit = omit,
62
+ event: Literal["LEAD", "CONVERSION"] | Omit = omit,
62
63
  image_url: Optional[str] | Omit = omit,
63
64
  is_unlimited: bool | Omit = omit,
64
65
  is_visible: bool | Omit = omit,
@@ -98,6 +99,11 @@ class RewardsResource(SyncAPIResource):
98
99
 
99
100
  description: The reward description shown to the referrer.
100
101
 
102
+ event: The event that earns this Campaign Reward. `SINGLE_SIDED`,
103
+ `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or `CONVERSION`.
104
+ `LEAD` requires `installation.referralTrigger` to be `CUSTOM`. Omitting
105
+ `event` defaults to `CONVERSION`.
106
+
101
107
  image_url: An image URL for the reward.
102
108
 
103
109
  is_unlimited: Whether the reward can be earned an unlimited number of times. Defaults to
@@ -150,6 +156,7 @@ class RewardsResource(SyncAPIResource):
150
156
  "conversions_required": conversions_required,
151
157
  "coupon_code": coupon_code,
152
158
  "description": description,
159
+ "event": event,
153
160
  "image_url": image_url,
154
161
  "is_unlimited": is_unlimited,
155
162
  "is_visible": is_visible,
@@ -184,6 +191,7 @@ class RewardsResource(SyncAPIResource):
184
191
  conversions_required: int | Omit = omit,
185
192
  coupon_code: Optional[str] | Omit = omit,
186
193
  description: str | Omit = omit,
194
+ event: Literal["LEAD", "CONVERSION"] | Omit = omit,
187
195
  image_url: Optional[str] | Omit = omit,
188
196
  is_unlimited: bool | Omit = omit,
189
197
  is_visible: bool | Omit = omit,
@@ -219,6 +227,11 @@ class RewardsResource(SyncAPIResource):
219
227
 
220
228
  conversions_required: The number of referrals required to earn the reward.
221
229
 
230
+ event: The event that earns this Campaign Reward. `SINGLE_SIDED`,
231
+ `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or `CONVERSION`.
232
+ `LEAD` requires `installation.referralTrigger` to be `CUSTOM`. Omitting
233
+ `event` preserves the Campaign Reward's current event.
234
+
222
235
  description: The reward description shown to the referrer.
223
236
 
224
237
  image_url: An image URL for the reward.
@@ -276,6 +289,7 @@ class RewardsResource(SyncAPIResource):
276
289
  "conversions_required": conversions_required,
277
290
  "coupon_code": coupon_code,
278
291
  "description": description,
292
+ "event": event,
279
293
  "image_url": image_url,
280
294
  "is_unlimited": is_unlimited,
281
295
  "is_visible": is_visible,
@@ -410,6 +424,7 @@ class AsyncRewardsResource(AsyncAPIResource):
410
424
  conversions_required: int | Omit = omit,
411
425
  coupon_code: Optional[str] | Omit = omit,
412
426
  description: str | Omit = omit,
427
+ event: Literal["LEAD", "CONVERSION"] | Omit = omit,
413
428
  image_url: Optional[str] | Omit = omit,
414
429
  is_unlimited: bool | Omit = omit,
415
430
  is_visible: bool | Omit = omit,
@@ -449,6 +464,11 @@ class AsyncRewardsResource(AsyncAPIResource):
449
464
 
450
465
  description: The reward description shown to the referrer.
451
466
 
467
+ event: The event that earns this Campaign Reward. `SINGLE_SIDED`,
468
+ `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or `CONVERSION`.
469
+ `LEAD` requires `installation.referralTrigger` to be `CUSTOM`. Omitting
470
+ `event` defaults to `CONVERSION`.
471
+
452
472
  image_url: An image URL for the reward.
453
473
 
454
474
  is_unlimited: Whether the reward can be earned an unlimited number of times. Defaults to
@@ -501,6 +521,7 @@ class AsyncRewardsResource(AsyncAPIResource):
501
521
  "conversions_required": conversions_required,
502
522
  "coupon_code": coupon_code,
503
523
  "description": description,
524
+ "event": event,
504
525
  "image_url": image_url,
505
526
  "is_unlimited": is_unlimited,
506
527
  "is_visible": is_visible,
@@ -535,6 +556,7 @@ class AsyncRewardsResource(AsyncAPIResource):
535
556
  conversions_required: int | Omit = omit,
536
557
  coupon_code: Optional[str] | Omit = omit,
537
558
  description: str | Omit = omit,
559
+ event: Literal["LEAD", "CONVERSION"] | Omit = omit,
538
560
  image_url: Optional[str] | Omit = omit,
539
561
  is_unlimited: bool | Omit = omit,
540
562
  is_visible: bool | Omit = omit,
@@ -570,6 +592,11 @@ class AsyncRewardsResource(AsyncAPIResource):
570
592
 
571
593
  conversions_required: The number of referrals required to earn the reward.
572
594
 
595
+ event: The event that earns this Campaign Reward. `SINGLE_SIDED`,
596
+ `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or `CONVERSION`.
597
+ `LEAD` requires `installation.referralTrigger` to be `CUSTOM`. Omitting
598
+ `event` preserves the Campaign Reward's current event.
599
+
573
600
  description: The reward description shown to the referrer.
574
601
 
575
602
  image_url: An image URL for the reward.
@@ -627,6 +654,7 @@ class AsyncRewardsResource(AsyncAPIResource):
627
654
  "conversions_required": conversions_required,
628
655
  "coupon_code": coupon_code,
629
656
  "description": description,
657
+ "event": event,
630
658
  "image_url": image_url,
631
659
  "is_unlimited": is_unlimited,
632
660
  "is_visible": is_visible,
@@ -30,6 +30,13 @@ class Reward(BaseModel):
30
30
 
31
31
  description: Optional[str] = None
32
32
 
33
+ event: Optional[Literal["LEAD", "CONVERSION"]] = None
34
+ """The event that earns this Campaign Reward.
35
+
36
+ Present only for `SINGLE_SIDED`, `DOUBLE_SIDED`, and `MILESTONE` rewards. Legacy
37
+ Campaign Rewards return `CONVERSION`.
38
+ """
39
+
33
40
  image_url: Optional[str] = FieldInfo(alias="imageUrl", default=None)
34
41
 
35
42
  is_visible: Optional[bool] = FieldInfo(alias="isVisible", default=None)
@@ -13,12 +13,16 @@ class ParticipantAnalyticsParams(TypedDict, total=False):
13
13
  id: Required[str]
14
14
 
15
15
  days: int
16
- """Last number of days to retrieve analytics for. Defaults to 365. Maximum 1825."""
16
+ """Last number of days for optional `series` and `email` analytics.
17
+
18
+ Defaults to 365. Maximum 1825. Does not filter the top-level all-time totals.
19
+ """
17
20
 
18
21
  end_date: Annotated[int, PropertyInfo(alias="endDate")]
19
- """End date of the analytics timeframe as a Unix timestamp in milliseconds.
22
+ """End of a custom `series` and `email` analytics window as a Unix timestamp.
20
23
 
21
- Required if `days` is not set.
24
+ Expressed in milliseconds. Set it together with `startDate`. Does not filter the
25
+ top-level all-time totals.
22
26
  """
23
27
 
24
28
  include: str
@@ -39,7 +43,8 @@ class ParticipantAnalyticsParams(TypedDict, total=False):
39
43
  """
40
44
 
41
45
  start_date: Annotated[int, PropertyInfo(alias="startDate")]
42
- """Start date of the analytics timeframe as a Unix timestamp in milliseconds.
46
+ """Start of a custom `series` and `email` analytics window as a Unix timestamp.
43
47
 
44
- Required if `days` is not set.
48
+ Expressed in milliseconds. Set it together with `endDate`. Does not filter the
49
+ top-level all-time totals.
45
50
  """
@@ -16,7 +16,7 @@ class ParticipantReward(BaseModel):
16
16
 
17
17
  reward_id: str = FieldInfo(alias="rewardId")
18
18
 
19
- status: Literal["PENDING", "FULFILLED"]
19
+ status: Literal["PENDING", "FULFILLED", "CANCELLED"]
20
20
 
21
21
  approved: Optional[bool] = None
22
22
 
@@ -41,6 +41,13 @@ class Reward(BaseModel):
41
41
  description: Optional[str] = None
42
42
  """The reward description shown to the referrer."""
43
43
 
44
+ event: Optional[Literal["LEAD", "CONVERSION"]] = None
45
+ """The event that earns this Campaign Reward.
46
+
47
+ Present only for `SINGLE_SIDED`, `DOUBLE_SIDED`, and `MILESTONE` rewards. Legacy
48
+ Campaign Rewards return `CONVERSION`.
49
+ """
50
+
44
51
  image_url: Optional[str] = FieldInfo(alias="imageUrl", default=None)
45
52
  """The reward image URL."""
46
53
 
@@ -32,6 +32,14 @@ class RewardCreateParams(TypedDict, total=False):
32
32
  description: str
33
33
  """The reward description shown to the referrer."""
34
34
 
35
+ event: Literal["LEAD", "CONVERSION"]
36
+ """The event that earns this Campaign Reward.
37
+
38
+ `SINGLE_SIDED`, `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or
39
+ `CONVERSION`. `LEAD` requires `installation.referralTrigger` to be `CUSTOM`.
40
+ When omitted, the Campaign Reward defaults to `CONVERSION`.
41
+ """
42
+
35
43
  image_url: Annotated[Optional[str], PropertyInfo(alias="imageUrl")]
36
44
  """An image URL for the reward."""
37
45
 
@@ -31,6 +31,14 @@ class RewardUpdateParams(TypedDict, total=False):
31
31
  description: str
32
32
  """The reward description shown to the referrer."""
33
33
 
34
+ event: Literal["LEAD", "CONVERSION"]
35
+ """The event that earns this Campaign Reward.
36
+
37
+ `SINGLE_SIDED`, `DOUBLE_SIDED`, and `MILESTONE` rewards support `LEAD` or
38
+ `CONVERSION`. `LEAD` requires `installation.referralTrigger` to be `CUSTOM`.
39
+ When omitted, the Campaign Reward's current event is preserved.
40
+ """
41
+
34
42
  image_url: Annotated[Optional[str], PropertyInfo(alias="imageUrl")]
35
43
  """An image URL for the reward."""
36
44
 
@@ -21,7 +21,8 @@ class CommissionStructure(BaseModel):
21
21
 
22
22
  duration_in_months: Optional[int] = FieldInfo(alias="durationInMonths", default=None)
23
23
 
24
- event: Optional[str] = None
24
+ event: Optional[Literal["CLICK", "LEAD", "SALE"]] = None
25
+ """The event that generates a commission. Missing legacy values read as `SALE`."""
25
26
 
26
27
  has_intro: Optional[bool] = FieldInfo(alias="hasIntro", default=None)
27
28
 
@@ -19,6 +19,9 @@ class Commission(BaseModel):
19
19
 
20
20
  currency_iso: str = FieldInfo(alias="currencyISO")
21
21
 
22
+ event: Literal["LEAD", "SALE"]
23
+ """The event that generated the commission. Legacy commissions return `SALE`."""
24
+
22
25
  referred_id: str = FieldInfo(alias="referredId")
23
26
 
24
27
  referrer_id: str = FieldInfo(alias="referrerId")
@@ -0,0 +1,62 @@
1
+ from typing_extensions import Literal
2
+
3
+ from growsurf.types.campaign.reward import Reward
4
+ from growsurf.types.campaign.campaign import Reward as CampaignReward
5
+ from growsurf.types.commission_structure import CommissionStructure
6
+ from growsurf.types.campaign.participant_reward import ParticipantReward
7
+ from growsurf.types.participant_commission_list import Commission
8
+
9
+
10
+ def test_reward_and_commission_events_parse_from_public_wire_values() -> None:
11
+ reward = Reward(
12
+ id="crew_signup",
13
+ isUnlimited=True,
14
+ metadata={},
15
+ type="SINGLE_SIDED",
16
+ event="LEAD",
17
+ )
18
+ embedded_reward = CampaignReward(
19
+ id="crew_signup",
20
+ isUnlimited=True,
21
+ metadata={},
22
+ type="SINGLE_SIDED",
23
+ event="LEAD",
24
+ )
25
+ commission = Commission(
26
+ id="comm_signup",
27
+ amount=500,
28
+ createdAt=1,
29
+ currencyISO="USD",
30
+ event="LEAD",
31
+ referredId="part_friend",
32
+ referrerId="part_advocate",
33
+ saleAmount=None,
34
+ status="PENDING",
35
+ )
36
+
37
+ assert reward.event == "LEAD"
38
+ assert embedded_reward.event == "LEAD"
39
+ assert commission.event == "LEAD"
40
+ assert commission.sale_amount is None
41
+
42
+
43
+ def test_cancelled_participant_reward_parses_from_public_wire_value() -> None:
44
+ reward = ParticipantReward(
45
+ id="participant_reward_cancelled",
46
+ rewardId="reward_cancelled",
47
+ status="CANCELLED",
48
+ )
49
+
50
+ assert reward.status == "CANCELLED"
51
+
52
+
53
+ def test_commission_structure_exposes_supported_event_contract() -> None:
54
+ click = CommissionStructure(event="CLICK")
55
+ lead = CommissionStructure(event="LEAD")
56
+ sale = CommissionStructure(event="SALE")
57
+ assert click.event is not None
58
+
59
+ event: Literal["CLICK", "LEAD", "SALE"] = click.event
60
+ assert event == "CLICK"
61
+ assert lead.event == "LEAD"
62
+ assert sale.event == "SALE"
@@ -1,3 +0,0 @@
1
- {
2
- ".": "1.3.0"
3
- }
File without changes
File without changes
File without changes