whop-sdk 0.0.1__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.

Potentially problematic release.


This version of whop-sdk might be problematic. Click here for more details.

Files changed (212) hide show
  1. whop_sdk/__init__.py +94 -0
  2. whop_sdk/_base_client.py +1995 -0
  3. whop_sdk/_client.py +664 -0
  4. whop_sdk/_compat.py +219 -0
  5. whop_sdk/_constants.py +14 -0
  6. whop_sdk/_exceptions.py +112 -0
  7. whop_sdk/_files.py +123 -0
  8. whop_sdk/_models.py +835 -0
  9. whop_sdk/_qs.py +150 -0
  10. whop_sdk/_resource.py +43 -0
  11. whop_sdk/_response.py +830 -0
  12. whop_sdk/_streaming.py +333 -0
  13. whop_sdk/_types.py +260 -0
  14. whop_sdk/_utils/__init__.py +64 -0
  15. whop_sdk/_utils/_compat.py +45 -0
  16. whop_sdk/_utils/_datetime_parse.py +136 -0
  17. whop_sdk/_utils/_logs.py +25 -0
  18. whop_sdk/_utils/_proxy.py +65 -0
  19. whop_sdk/_utils/_reflection.py +42 -0
  20. whop_sdk/_utils/_resources_proxy.py +24 -0
  21. whop_sdk/_utils/_streams.py +12 -0
  22. whop_sdk/_utils/_sync.py +86 -0
  23. whop_sdk/_utils/_transform.py +457 -0
  24. whop_sdk/_utils/_typing.py +156 -0
  25. whop_sdk/_utils/_utils.py +421 -0
  26. whop_sdk/_version.py +4 -0
  27. whop_sdk/lib/.keep +4 -0
  28. whop_sdk/pagination.py +61 -0
  29. whop_sdk/py.typed +0 -0
  30. whop_sdk/resources/__init__.py +316 -0
  31. whop_sdk/resources/app_builds.py +562 -0
  32. whop_sdk/resources/apps.py +665 -0
  33. whop_sdk/resources/authorized_users.py +336 -0
  34. whop_sdk/resources/chat_channels.py +469 -0
  35. whop_sdk/resources/checkout_configurations.py +464 -0
  36. whop_sdk/resources/companies.py +171 -0
  37. whop_sdk/resources/course_lesson_interactions.py +343 -0
  38. whop_sdk/resources/entries.py +539 -0
  39. whop_sdk/resources/experiences.py +859 -0
  40. whop_sdk/resources/forum_posts.py +512 -0
  41. whop_sdk/resources/invoices.py +633 -0
  42. whop_sdk/resources/ledger_accounts.py +171 -0
  43. whop_sdk/resources/memberships.py +810 -0
  44. whop_sdk/resources/messages.py +446 -0
  45. whop_sdk/resources/payments.py +761 -0
  46. whop_sdk/resources/plans.py +906 -0
  47. whop_sdk/resources/products.py +969 -0
  48. whop_sdk/resources/reactions.py +423 -0
  49. whop_sdk/resources/shipments.py +451 -0
  50. whop_sdk/resources/support_channels.py +455 -0
  51. whop_sdk/resources/transfers.py +488 -0
  52. whop_sdk/resources/users.py +248 -0
  53. whop_sdk/resources/webhooks.py +69 -0
  54. whop_sdk/types/__init__.py +135 -0
  55. whop_sdk/types/app_build_create_params.py +59 -0
  56. whop_sdk/types/app_build_list_params.py +34 -0
  57. whop_sdk/types/app_build_list_response.py +50 -0
  58. whop_sdk/types/app_create_params.py +19 -0
  59. whop_sdk/types/app_list_params.py +54 -0
  60. whop_sdk/types/app_list_response.py +91 -0
  61. whop_sdk/types/app_update_params.py +58 -0
  62. whop_sdk/types/authorized_user_list_params.py +33 -0
  63. whop_sdk/types/authorized_user_list_response.py +33 -0
  64. whop_sdk/types/authorized_user_retrieve_response.py +33 -0
  65. whop_sdk/types/chat_channel_list_params.py +28 -0
  66. whop_sdk/types/chat_channel_list_response.py +43 -0
  67. whop_sdk/types/chat_channel_update_params.py +32 -0
  68. whop_sdk/types/checkout_configuration_create_params.py +129 -0
  69. whop_sdk/types/checkout_configuration_list_params.py +33 -0
  70. whop_sdk/types/checkout_configuration_list_response.py +66 -0
  71. whop_sdk/types/course_lesson_interaction_list_params.py +34 -0
  72. whop_sdk/types/entry_approve_response.py +10 -0
  73. whop_sdk/types/entry_list_params.py +44 -0
  74. whop_sdk/types/entry_list_response.py +56 -0
  75. whop_sdk/types/experience_attach_params.py +12 -0
  76. whop_sdk/types/experience_create_params.py +22 -0
  77. whop_sdk/types/experience_delete_response.py +7 -0
  78. whop_sdk/types/experience_detach_params.py +12 -0
  79. whop_sdk/types/experience_list_params.py +31 -0
  80. whop_sdk/types/experience_list_response.py +47 -0
  81. whop_sdk/types/experience_update_params.py +41 -0
  82. whop_sdk/types/forum_post_create_params.py +85 -0
  83. whop_sdk/types/forum_post_list_params.py +31 -0
  84. whop_sdk/types/forum_post_list_response.py +53 -0
  85. whop_sdk/types/invoice_create_params.py +137 -0
  86. whop_sdk/types/invoice_create_response.py +16 -0
  87. whop_sdk/types/invoice_created_webhook_event.py +26 -0
  88. whop_sdk/types/invoice_list_params.py +50 -0
  89. whop_sdk/types/invoice_paid_webhook_event.py +26 -0
  90. whop_sdk/types/invoice_past_due_webhook_event.py +26 -0
  91. whop_sdk/types/invoice_void_response.py +7 -0
  92. whop_sdk/types/invoice_voided_webhook_event.py +26 -0
  93. whop_sdk/types/ledger_account_retrieve_response.py +78 -0
  94. whop_sdk/types/membership_cancel_params.py +13 -0
  95. whop_sdk/types/membership_list_params.py +70 -0
  96. whop_sdk/types/membership_list_response.py +117 -0
  97. whop_sdk/types/membership_pause_params.py +16 -0
  98. whop_sdk/types/membership_update_params.py +13 -0
  99. whop_sdk/types/message_create_params.py +51 -0
  100. whop_sdk/types/message_list_params.py +30 -0
  101. whop_sdk/types/message_list_response.py +90 -0
  102. whop_sdk/types/payment_list_params.py +72 -0
  103. whop_sdk/types/payment_list_response.py +221 -0
  104. whop_sdk/types/payment_refund_params.py +13 -0
  105. whop_sdk/types/plan_create_params.py +106 -0
  106. whop_sdk/types/plan_delete_response.py +7 -0
  107. whop_sdk/types/plan_list_params.py +49 -0
  108. whop_sdk/types/plan_list_response.py +92 -0
  109. whop_sdk/types/plan_update_params.py +95 -0
  110. whop_sdk/types/product_create_params.py +170 -0
  111. whop_sdk/types/product_delete_response.py +7 -0
  112. whop_sdk/types/product_list_params.py +41 -0
  113. whop_sdk/types/product_update_params.py +90 -0
  114. whop_sdk/types/reaction_create_params.py +19 -0
  115. whop_sdk/types/reaction_list_params.py +25 -0
  116. whop_sdk/types/reaction_list_response.py +32 -0
  117. whop_sdk/types/shared/__init__.py +55 -0
  118. whop_sdk/types/shared/access_pass_type.py +7 -0
  119. whop_sdk/types/shared/app.py +159 -0
  120. whop_sdk/types/shared/app_build.py +50 -0
  121. whop_sdk/types/shared/app_build_platforms.py +7 -0
  122. whop_sdk/types/shared/app_build_statuses.py +7 -0
  123. whop_sdk/types/shared/app_statuses.py +7 -0
  124. whop_sdk/types/shared/app_view_type.py +7 -0
  125. whop_sdk/types/shared/authorized_user_roles.py +9 -0
  126. whop_sdk/types/shared/business_types.py +22 -0
  127. whop_sdk/types/shared/chat_channel.py +43 -0
  128. whop_sdk/types/shared/checkout_configuration.py +66 -0
  129. whop_sdk/types/shared/collection_method.py +7 -0
  130. whop_sdk/types/shared/company.py +71 -0
  131. whop_sdk/types/shared/course_lesson_interaction.py +44 -0
  132. whop_sdk/types/shared/course_lesson_interaction_list_item.py +44 -0
  133. whop_sdk/types/shared/currency.py +92 -0
  134. whop_sdk/types/shared/custom_cta.py +21 -0
  135. whop_sdk/types/shared/direction.py +7 -0
  136. whop_sdk/types/shared/dms_post_types.py +7 -0
  137. whop_sdk/types/shared/entry.py +70 -0
  138. whop_sdk/types/shared/entry_status.py +7 -0
  139. whop_sdk/types/shared/experience.py +66 -0
  140. whop_sdk/types/shared/forum_post.py +53 -0
  141. whop_sdk/types/shared/friendly_receipt_status.py +24 -0
  142. whop_sdk/types/shared/global_affiliate_status.py +7 -0
  143. whop_sdk/types/shared/industry_types.py +67 -0
  144. whop_sdk/types/shared/invoice.py +61 -0
  145. whop_sdk/types/shared/invoice_list_item.py +61 -0
  146. whop_sdk/types/shared/invoice_status.py +7 -0
  147. whop_sdk/types/shared/membership.py +117 -0
  148. whop_sdk/types/shared/membership_status.py +9 -0
  149. whop_sdk/types/shared/message.py +90 -0
  150. whop_sdk/types/shared/page_info.py +21 -0
  151. whop_sdk/types/shared/payment.py +211 -0
  152. whop_sdk/types/shared/plan.py +123 -0
  153. whop_sdk/types/shared/plan_type.py +7 -0
  154. whop_sdk/types/shared/product.py +124 -0
  155. whop_sdk/types/shared/product_list_item.py +49 -0
  156. whop_sdk/types/shared/promo_type.py +7 -0
  157. whop_sdk/types/shared/reaction.py +32 -0
  158. whop_sdk/types/shared/receipt_status.py +7 -0
  159. whop_sdk/types/shared/release_method.py +7 -0
  160. whop_sdk/types/shared/shipment.py +48 -0
  161. whop_sdk/types/shared/shipment_carrier.py +84 -0
  162. whop_sdk/types/shared/shipment_status.py +18 -0
  163. whop_sdk/types/shared/shipment_substatus.py +36 -0
  164. whop_sdk/types/shared/support_channel.py +39 -0
  165. whop_sdk/types/shared/tax_type.py +7 -0
  166. whop_sdk/types/shared/transfer.py +109 -0
  167. whop_sdk/types/shared/visibility.py +7 -0
  168. whop_sdk/types/shared/visibility_filter.py +9 -0
  169. whop_sdk/types/shared/who_can_post.py +7 -0
  170. whop_sdk/types/shared/who_can_react.py +7 -0
  171. whop_sdk/types/shared_params/__init__.py +27 -0
  172. whop_sdk/types/shared_params/access_pass_type.py +9 -0
  173. whop_sdk/types/shared_params/app_build_platforms.py +9 -0
  174. whop_sdk/types/shared_params/app_build_statuses.py +9 -0
  175. whop_sdk/types/shared_params/app_statuses.py +9 -0
  176. whop_sdk/types/shared_params/app_view_type.py +9 -0
  177. whop_sdk/types/shared_params/authorized_user_roles.py +11 -0
  178. whop_sdk/types/shared_params/business_types.py +24 -0
  179. whop_sdk/types/shared_params/collection_method.py +9 -0
  180. whop_sdk/types/shared_params/currency.py +94 -0
  181. whop_sdk/types/shared_params/custom_cta.py +23 -0
  182. whop_sdk/types/shared_params/direction.py +9 -0
  183. whop_sdk/types/shared_params/entry_status.py +9 -0
  184. whop_sdk/types/shared_params/friendly_receipt_status.py +26 -0
  185. whop_sdk/types/shared_params/global_affiliate_status.py +9 -0
  186. whop_sdk/types/shared_params/industry_types.py +69 -0
  187. whop_sdk/types/shared_params/invoice_status.py +9 -0
  188. whop_sdk/types/shared_params/membership_status.py +11 -0
  189. whop_sdk/types/shared_params/plan_type.py +9 -0
  190. whop_sdk/types/shared_params/receipt_status.py +9 -0
  191. whop_sdk/types/shared_params/release_method.py +9 -0
  192. whop_sdk/types/shared_params/tax_type.py +9 -0
  193. whop_sdk/types/shared_params/visibility.py +9 -0
  194. whop_sdk/types/shared_params/visibility_filter.py +11 -0
  195. whop_sdk/types/shared_params/who_can_post.py +9 -0
  196. whop_sdk/types/shared_params/who_can_react.py +9 -0
  197. whop_sdk/types/shipment_create_params.py +18 -0
  198. whop_sdk/types/shipment_list_params.py +31 -0
  199. whop_sdk/types/shipment_list_response.py +48 -0
  200. whop_sdk/types/support_channel_create_params.py +15 -0
  201. whop_sdk/types/support_channel_list_params.py +40 -0
  202. whop_sdk/types/support_channel_list_response.py +39 -0
  203. whop_sdk/types/transfer_create_params.py +36 -0
  204. whop_sdk/types/transfer_list_params.py +42 -0
  205. whop_sdk/types/transfer_list_response.py +35 -0
  206. whop_sdk/types/unwrap_webhook_event.py +15 -0
  207. whop_sdk/types/user_check_access_response.py +15 -0
  208. whop_sdk/types/user_retrieve_response.py +25 -0
  209. whop_sdk-0.0.1.dist-info/METADATA +522 -0
  210. whop_sdk-0.0.1.dist-info/RECORD +212 -0
  211. whop_sdk-0.0.1.dist-info/WHEEL +4 -0
  212. whop_sdk-0.0.1.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,248 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import httpx
6
+
7
+ from .._types import Body, Query, Headers, NotGiven, not_given
8
+ from .._compat import cached_property
9
+ from .._resource import SyncAPIResource, AsyncAPIResource
10
+ from .._response import (
11
+ to_raw_response_wrapper,
12
+ to_streamed_response_wrapper,
13
+ async_to_raw_response_wrapper,
14
+ async_to_streamed_response_wrapper,
15
+ )
16
+ from .._base_client import make_request_options
17
+ from ..types.user_retrieve_response import UserRetrieveResponse
18
+ from ..types.user_check_access_response import UserCheckAccessResponse
19
+
20
+ __all__ = ["UsersResource", "AsyncUsersResource"]
21
+
22
+
23
+ class UsersResource(SyncAPIResource):
24
+ @cached_property
25
+ def with_raw_response(self) -> UsersResourceWithRawResponse:
26
+ """
27
+ This property can be used as a prefix for any HTTP method call to return
28
+ the raw response object instead of the parsed content.
29
+
30
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
31
+ """
32
+ return UsersResourceWithRawResponse(self)
33
+
34
+ @cached_property
35
+ def with_streaming_response(self) -> UsersResourceWithStreamingResponse:
36
+ """
37
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
38
+
39
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
40
+ """
41
+ return UsersResourceWithStreamingResponse(self)
42
+
43
+ def retrieve(
44
+ self,
45
+ id: str,
46
+ *,
47
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
48
+ # The extra values given here take precedence over values defined on the client or passed to this method.
49
+ extra_headers: Headers | None = None,
50
+ extra_query: Query | None = None,
51
+ extra_body: Body | None = None,
52
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
53
+ ) -> UserRetrieveResponse:
54
+ """
55
+ Retrieves a user by ID or username
56
+
57
+ Args:
58
+ extra_headers: Send extra headers
59
+
60
+ extra_query: Add additional query parameters to the request
61
+
62
+ extra_body: Add additional JSON properties to the request
63
+
64
+ timeout: Override the client-level default timeout for this request, in seconds
65
+ """
66
+ if not id:
67
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
68
+ return self._get(
69
+ f"/users/{id}",
70
+ options=make_request_options(
71
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
72
+ ),
73
+ cast_to=UserRetrieveResponse,
74
+ )
75
+
76
+ def check_access(
77
+ self,
78
+ resource_id: str,
79
+ *,
80
+ id: str,
81
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
82
+ # The extra values given here take precedence over values defined on the client or passed to this method.
83
+ extra_headers: Headers | None = None,
84
+ extra_query: Query | None = None,
85
+ extra_body: Body | None = None,
86
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
87
+ ) -> UserCheckAccessResponse:
88
+ """
89
+ Check if a user has access (and their access level) to a resource
90
+
91
+ Args:
92
+ extra_headers: Send extra headers
93
+
94
+ extra_query: Add additional query parameters to the request
95
+
96
+ extra_body: Add additional JSON properties to the request
97
+
98
+ timeout: Override the client-level default timeout for this request, in seconds
99
+ """
100
+ if not id:
101
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
102
+ if not resource_id:
103
+ raise ValueError(f"Expected a non-empty value for `resource_id` but received {resource_id!r}")
104
+ return self._get(
105
+ f"/users/{id}/access/{resource_id}",
106
+ options=make_request_options(
107
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
108
+ ),
109
+ cast_to=UserCheckAccessResponse,
110
+ )
111
+
112
+
113
+ class AsyncUsersResource(AsyncAPIResource):
114
+ @cached_property
115
+ def with_raw_response(self) -> AsyncUsersResourceWithRawResponse:
116
+ """
117
+ This property can be used as a prefix for any HTTP method call to return
118
+ the raw response object instead of the parsed content.
119
+
120
+ For more information, see https://www.github.com/whopio/whopsdk-python#accessing-raw-response-data-eg-headers
121
+ """
122
+ return AsyncUsersResourceWithRawResponse(self)
123
+
124
+ @cached_property
125
+ def with_streaming_response(self) -> AsyncUsersResourceWithStreamingResponse:
126
+ """
127
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
128
+
129
+ For more information, see https://www.github.com/whopio/whopsdk-python#with_streaming_response
130
+ """
131
+ return AsyncUsersResourceWithStreamingResponse(self)
132
+
133
+ async def retrieve(
134
+ self,
135
+ id: str,
136
+ *,
137
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
138
+ # The extra values given here take precedence over values defined on the client or passed to this method.
139
+ extra_headers: Headers | None = None,
140
+ extra_query: Query | None = None,
141
+ extra_body: Body | None = None,
142
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
143
+ ) -> UserRetrieveResponse:
144
+ """
145
+ Retrieves a user by ID or username
146
+
147
+ Args:
148
+ extra_headers: Send extra headers
149
+
150
+ extra_query: Add additional query parameters to the request
151
+
152
+ extra_body: Add additional JSON properties to the request
153
+
154
+ timeout: Override the client-level default timeout for this request, in seconds
155
+ """
156
+ if not id:
157
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
158
+ return await self._get(
159
+ f"/users/{id}",
160
+ options=make_request_options(
161
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
162
+ ),
163
+ cast_to=UserRetrieveResponse,
164
+ )
165
+
166
+ async def check_access(
167
+ self,
168
+ resource_id: str,
169
+ *,
170
+ id: str,
171
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
172
+ # The extra values given here take precedence over values defined on the client or passed to this method.
173
+ extra_headers: Headers | None = None,
174
+ extra_query: Query | None = None,
175
+ extra_body: Body | None = None,
176
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
177
+ ) -> UserCheckAccessResponse:
178
+ """
179
+ Check if a user has access (and their access level) to a resource
180
+
181
+ Args:
182
+ extra_headers: Send extra headers
183
+
184
+ extra_query: Add additional query parameters to the request
185
+
186
+ extra_body: Add additional JSON properties to the request
187
+
188
+ timeout: Override the client-level default timeout for this request, in seconds
189
+ """
190
+ if not id:
191
+ raise ValueError(f"Expected a non-empty value for `id` but received {id!r}")
192
+ if not resource_id:
193
+ raise ValueError(f"Expected a non-empty value for `resource_id` but received {resource_id!r}")
194
+ return await self._get(
195
+ f"/users/{id}/access/{resource_id}",
196
+ options=make_request_options(
197
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
198
+ ),
199
+ cast_to=UserCheckAccessResponse,
200
+ )
201
+
202
+
203
+ class UsersResourceWithRawResponse:
204
+ def __init__(self, users: UsersResource) -> None:
205
+ self._users = users
206
+
207
+ self.retrieve = to_raw_response_wrapper(
208
+ users.retrieve,
209
+ )
210
+ self.check_access = to_raw_response_wrapper(
211
+ users.check_access,
212
+ )
213
+
214
+
215
+ class AsyncUsersResourceWithRawResponse:
216
+ def __init__(self, users: AsyncUsersResource) -> None:
217
+ self._users = users
218
+
219
+ self.retrieve = async_to_raw_response_wrapper(
220
+ users.retrieve,
221
+ )
222
+ self.check_access = async_to_raw_response_wrapper(
223
+ users.check_access,
224
+ )
225
+
226
+
227
+ class UsersResourceWithStreamingResponse:
228
+ def __init__(self, users: UsersResource) -> None:
229
+ self._users = users
230
+
231
+ self.retrieve = to_streamed_response_wrapper(
232
+ users.retrieve,
233
+ )
234
+ self.check_access = to_streamed_response_wrapper(
235
+ users.check_access,
236
+ )
237
+
238
+
239
+ class AsyncUsersResourceWithStreamingResponse:
240
+ def __init__(self, users: AsyncUsersResource) -> None:
241
+ self._users = users
242
+
243
+ self.retrieve = async_to_streamed_response_wrapper(
244
+ users.retrieve,
245
+ )
246
+ self.check_access = async_to_streamed_response_wrapper(
247
+ users.check_access,
248
+ )
@@ -0,0 +1,69 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from typing import Mapping, cast
7
+
8
+ from .._models import construct_type
9
+ from .._resource import SyncAPIResource, AsyncAPIResource
10
+ from .._exceptions import WhopError
11
+ from ..types.unwrap_webhook_event import UnwrapWebhookEvent
12
+
13
+ __all__ = ["WebhooksResource", "AsyncWebhooksResource"]
14
+
15
+
16
+ class WebhooksResource(SyncAPIResource):
17
+ def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
18
+ try:
19
+ from standardwebhooks import Webhook
20
+ except ImportError as exc:
21
+ raise WhopError("You need to install `whop-sdk[webhooks]` to use this method") from exc
22
+
23
+ if key is None:
24
+ key = self._client.webhook_key
25
+ if key is None:
26
+ raise ValueError(
27
+ "Cannot verify a webhook without a key on either the client's webhook_key or passed in as an argument"
28
+ )
29
+
30
+ if not isinstance(headers, dict):
31
+ headers = dict(headers)
32
+
33
+ Webhook(key).verify(payload, headers)
34
+
35
+ return cast(
36
+ UnwrapWebhookEvent,
37
+ construct_type(
38
+ type_=UnwrapWebhookEvent,
39
+ value=json.loads(payload),
40
+ ),
41
+ )
42
+
43
+
44
+ class AsyncWebhooksResource(AsyncAPIResource):
45
+ def unwrap(self, payload: str, *, headers: Mapping[str, str], key: str | bytes | None = None) -> UnwrapWebhookEvent:
46
+ try:
47
+ from standardwebhooks import Webhook
48
+ except ImportError as exc:
49
+ raise WhopError("You need to install `whop-sdk[webhooks]` to use this method") from exc
50
+
51
+ if key is None:
52
+ key = self._client.webhook_key
53
+ if key is None:
54
+ raise ValueError(
55
+ "Cannot verify a webhook without a key on either the client's webhook_key or passed in as an argument"
56
+ )
57
+
58
+ if not isinstance(headers, dict):
59
+ headers = dict(headers)
60
+
61
+ Webhook(key).verify(payload, headers)
62
+
63
+ return cast(
64
+ UnwrapWebhookEvent,
65
+ construct_type(
66
+ type_=UnwrapWebhookEvent,
67
+ value=json.loads(payload),
68
+ ),
69
+ )
@@ -0,0 +1,135 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from .shared import (
6
+ App as App,
7
+ Plan as Plan,
8
+ Entry as Entry,
9
+ Company as Company,
10
+ Invoice as Invoice,
11
+ Message as Message,
12
+ Payment as Payment,
13
+ Product as Product,
14
+ TaxType as TaxType,
15
+ AppBuild as AppBuild,
16
+ Currency as Currency,
17
+ PageInfo as PageInfo,
18
+ PlanType as PlanType,
19
+ Reaction as Reaction,
20
+ Shipment as Shipment,
21
+ Transfer as Transfer,
22
+ CustomCta as CustomCta,
23
+ Direction as Direction,
24
+ ForumPost as ForumPost,
25
+ PromoType as PromoType,
26
+ Experience as Experience,
27
+ Membership as Membership,
28
+ Visibility as Visibility,
29
+ WhoCanPost as WhoCanPost,
30
+ AppStatuses as AppStatuses,
31
+ AppViewType as AppViewType,
32
+ ChatChannel as ChatChannel,
33
+ EntryStatus as EntryStatus,
34
+ WhoCanReact as WhoCanReact,
35
+ DmsPostTypes as DmsPostTypes,
36
+ BusinessTypes as BusinessTypes,
37
+ IndustryTypes as IndustryTypes,
38
+ InvoiceStatus as InvoiceStatus,
39
+ ReceiptStatus as ReceiptStatus,
40
+ ReleaseMethod as ReleaseMethod,
41
+ AccessPassType as AccessPassType,
42
+ ShipmentStatus as ShipmentStatus,
43
+ SupportChannel as SupportChannel,
44
+ InvoiceListItem as InvoiceListItem,
45
+ ProductListItem as ProductListItem,
46
+ ShipmentCarrier as ShipmentCarrier,
47
+ AppBuildStatuses as AppBuildStatuses,
48
+ CollectionMethod as CollectionMethod,
49
+ MembershipStatus as MembershipStatus,
50
+ VisibilityFilter as VisibilityFilter,
51
+ AppBuildPlatforms as AppBuildPlatforms,
52
+ ShipmentSubstatus as ShipmentSubstatus,
53
+ AuthorizedUserRoles as AuthorizedUserRoles,
54
+ CheckoutConfiguration as CheckoutConfiguration,
55
+ FriendlyReceiptStatus as FriendlyReceiptStatus,
56
+ GlobalAffiliateStatus as GlobalAffiliateStatus,
57
+ CourseLessonInteraction as CourseLessonInteraction,
58
+ CourseLessonInteractionListItem as CourseLessonInteractionListItem,
59
+ )
60
+ from .app_list_params import AppListParams as AppListParams
61
+ from .plan_list_params import PlanListParams as PlanListParams
62
+ from .app_create_params import AppCreateParams as AppCreateParams
63
+ from .app_list_response import AppListResponse as AppListResponse
64
+ from .app_update_params import AppUpdateParams as AppUpdateParams
65
+ from .entry_list_params import EntryListParams as EntryListParams
66
+ from .plan_create_params import PlanCreateParams as PlanCreateParams
67
+ from .plan_list_response import PlanListResponse as PlanListResponse
68
+ from .plan_update_params import PlanUpdateParams as PlanUpdateParams
69
+ from .entry_list_response import EntryListResponse as EntryListResponse
70
+ from .invoice_list_params import InvoiceListParams as InvoiceListParams
71
+ from .message_list_params import MessageListParams as MessageListParams
72
+ from .payment_list_params import PaymentListParams as PaymentListParams
73
+ from .product_list_params import ProductListParams as ProductListParams
74
+ from .plan_delete_response import PlanDeleteResponse as PlanDeleteResponse
75
+ from .reaction_list_params import ReactionListParams as ReactionListParams
76
+ from .shipment_list_params import ShipmentListParams as ShipmentListParams
77
+ from .transfer_list_params import TransferListParams as TransferListParams
78
+ from .unwrap_webhook_event import UnwrapWebhookEvent as UnwrapWebhookEvent
79
+ from .app_build_list_params import AppBuildListParams as AppBuildListParams
80
+ from .invoice_create_params import InvoiceCreateParams as InvoiceCreateParams
81
+ from .invoice_void_response import InvoiceVoidResponse as InvoiceVoidResponse
82
+ from .message_create_params import MessageCreateParams as MessageCreateParams
83
+ from .message_list_response import MessageListResponse as MessageListResponse
84
+ from .payment_list_response import PaymentListResponse as PaymentListResponse
85
+ from .payment_refund_params import PaymentRefundParams as PaymentRefundParams
86
+ from .product_create_params import ProductCreateParams as ProductCreateParams
87
+ from .product_update_params import ProductUpdateParams as ProductUpdateParams
88
+ from .entry_approve_response import EntryApproveResponse as EntryApproveResponse
89
+ from .experience_list_params import ExperienceListParams as ExperienceListParams
90
+ from .forum_post_list_params import ForumPostListParams as ForumPostListParams
91
+ from .membership_list_params import MembershipListParams as MembershipListParams
92
+ from .reaction_create_params import ReactionCreateParams as ReactionCreateParams
93
+ from .reaction_list_response import ReactionListResponse as ReactionListResponse
94
+ from .shipment_create_params import ShipmentCreateParams as ShipmentCreateParams
95
+ from .shipment_list_response import ShipmentListResponse as ShipmentListResponse
96
+ from .transfer_create_params import TransferCreateParams as TransferCreateParams
97
+ from .transfer_list_response import TransferListResponse as TransferListResponse
98
+ from .user_retrieve_response import UserRetrieveResponse as UserRetrieveResponse
99
+ from .app_build_create_params import AppBuildCreateParams as AppBuildCreateParams
100
+ from .app_build_list_response import AppBuildListResponse as AppBuildListResponse
101
+ from .invoice_create_response import InvoiceCreateResponse as InvoiceCreateResponse
102
+ from .membership_pause_params import MembershipPauseParams as MembershipPauseParams
103
+ from .product_delete_response import ProductDeleteResponse as ProductDeleteResponse
104
+ from .chat_channel_list_params import ChatChannelListParams as ChatChannelListParams
105
+ from .experience_attach_params import ExperienceAttachParams as ExperienceAttachParams
106
+ from .experience_create_params import ExperienceCreateParams as ExperienceCreateParams
107
+ from .experience_detach_params import ExperienceDetachParams as ExperienceDetachParams
108
+ from .experience_list_response import ExperienceListResponse as ExperienceListResponse
109
+ from .experience_update_params import ExperienceUpdateParams as ExperienceUpdateParams
110
+ from .forum_post_create_params import ForumPostCreateParams as ForumPostCreateParams
111
+ from .forum_post_list_response import ForumPostListResponse as ForumPostListResponse
112
+ from .membership_cancel_params import MembershipCancelParams as MembershipCancelParams
113
+ from .membership_list_response import MembershipListResponse as MembershipListResponse
114
+ from .membership_update_params import MembershipUpdateParams as MembershipUpdateParams
115
+ from .chat_channel_list_response import ChatChannelListResponse as ChatChannelListResponse
116
+ from .chat_channel_update_params import ChatChannelUpdateParams as ChatChannelUpdateParams
117
+ from .experience_delete_response import ExperienceDeleteResponse as ExperienceDeleteResponse
118
+ from .invoice_paid_webhook_event import InvoicePaidWebhookEvent as InvoicePaidWebhookEvent
119
+ from .user_check_access_response import UserCheckAccessResponse as UserCheckAccessResponse
120
+ from .authorized_user_list_params import AuthorizedUserListParams as AuthorizedUserListParams
121
+ from .support_channel_list_params import SupportChannelListParams as SupportChannelListParams
122
+ from .invoice_voided_webhook_event import InvoiceVoidedWebhookEvent as InvoiceVoidedWebhookEvent
123
+ from .authorized_user_list_response import AuthorizedUserListResponse as AuthorizedUserListResponse
124
+ from .invoice_created_webhook_event import InvoiceCreatedWebhookEvent as InvoiceCreatedWebhookEvent
125
+ from .support_channel_create_params import SupportChannelCreateParams as SupportChannelCreateParams
126
+ from .support_channel_list_response import SupportChannelListResponse as SupportChannelListResponse
127
+ from .invoice_past_due_webhook_event import InvoicePastDueWebhookEvent as InvoicePastDueWebhookEvent
128
+ from .ledger_account_retrieve_response import LedgerAccountRetrieveResponse as LedgerAccountRetrieveResponse
129
+ from .authorized_user_retrieve_response import AuthorizedUserRetrieveResponse as AuthorizedUserRetrieveResponse
130
+ from .checkout_configuration_list_params import CheckoutConfigurationListParams as CheckoutConfigurationListParams
131
+ from .checkout_configuration_create_params import CheckoutConfigurationCreateParams as CheckoutConfigurationCreateParams
132
+ from .checkout_configuration_list_response import CheckoutConfigurationListResponse as CheckoutConfigurationListResponse
133
+ from .course_lesson_interaction_list_params import (
134
+ CourseLessonInteractionListParams as CourseLessonInteractionListParams,
135
+ )
@@ -0,0 +1,59 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import List, Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .shared.app_view_type import AppViewType
9
+ from .shared.app_build_platforms import AppBuildPlatforms
10
+
11
+ __all__ = ["AppBuildCreateParams", "Attachment"]
12
+
13
+
14
+ class AppBuildCreateParams(TypedDict, total=False):
15
+ attachment: Required[Attachment]
16
+ """Attachment input for the app build file.
17
+
18
+ This should be an upload in .zip format. The zip should contain at least one
19
+ main_js_bundle.hbc file and optionally an assets folder next to it.
20
+ """
21
+
22
+ checksum: Required[str]
23
+ """Checksum of the app build file.
24
+
25
+ This is generated by the client and used to verify the integrity of the file
26
+ that is submitted when un-packaged later on a device.
27
+ """
28
+
29
+ platform: Required[AppBuildPlatforms]
30
+ """The platform of the app build (ios, android, web)"""
31
+
32
+ app_id: Optional[str]
33
+ """The ID of the app to create a build for.
34
+
35
+ By default the current app from the api key is used.
36
+ """
37
+
38
+ supported_app_view_types: Optional[List[AppViewType]]
39
+ """Supported app view types for the app build.
40
+
41
+ A build can specify multiple view types, but should only specify ones that its
42
+ code supports.
43
+ """
44
+
45
+
46
+ class Attachment(TypedDict, total=False):
47
+ id: Optional[str]
48
+ """The ID of an existing attachment object.
49
+
50
+ Use this when updating a resource and keeping a subset of the attachments. Don't
51
+ use this unless you know what you're doing.
52
+ """
53
+
54
+ direct_upload_id: Optional[str]
55
+ """This ID should be used the first time you upload an attachment.
56
+
57
+ It is the ID of the direct upload that was created when uploading the file to S3
58
+ via the mediaDirectUpload mutation.
59
+ """
@@ -0,0 +1,34 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ from .shared.app_build_statuses import AppBuildStatuses
9
+ from .shared.app_build_platforms import AppBuildPlatforms
10
+
11
+ __all__ = ["AppBuildListParams"]
12
+
13
+
14
+ class AppBuildListParams(TypedDict, total=False):
15
+ app_id: Required[str]
16
+ """The ID of the app to filter app builds by"""
17
+
18
+ after: Optional[str]
19
+ """Returns the elements in the list that come after the specified cursor."""
20
+
21
+ before: Optional[str]
22
+ """Returns the elements in the list that come before the specified cursor."""
23
+
24
+ first: Optional[int]
25
+ """Returns the first _n_ elements from the list."""
26
+
27
+ last: Optional[int]
28
+ """Returns the last _n_ elements from the list."""
29
+
30
+ platform: Optional[AppBuildPlatforms]
31
+ """The different platforms an app build can target."""
32
+
33
+ status: Optional[AppBuildStatuses]
34
+ """The different statuses an AppBuild can be in."""
@@ -0,0 +1,50 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from typing import List, Optional
4
+ from datetime import datetime
5
+
6
+ from .._models import BaseModel
7
+ from .shared.app_view_type import AppViewType
8
+ from .shared.app_build_statuses import AppBuildStatuses
9
+ from .shared.app_build_platforms import AppBuildPlatforms
10
+
11
+ __all__ = ["AppBuildListResponse"]
12
+
13
+
14
+ class AppBuildListResponse(BaseModel):
15
+ id: str
16
+ """The ID of the app build. It will look like apbu_xxxxx."""
17
+
18
+ checksum: str
19
+ """
20
+ This is generated by the client and used to verify the integrity of the file
21
+ that is submitted. It is a SHA256 hash of the app build file.
22
+ """
23
+
24
+ created_at: datetime
25
+ """When this app build was created."""
26
+
27
+ file_url: str
28
+ """The URL to download the app build .zip file."""
29
+
30
+ is_production: bool
31
+ """Whether this app build is currently being used in production."""
32
+
33
+ platform: AppBuildPlatforms
34
+ """The platform of the app build (ios, android, web)"""
35
+
36
+ review_message: Optional[str] = None
37
+ """The review message for the app build, if any.
38
+
39
+ This is populated when the build is rejected and there is a reason specified by
40
+ the reviewer.
41
+ """
42
+
43
+ status: AppBuildStatuses
44
+ """The status of the app build (draft, approved, rejected, pending, etc)"""
45
+
46
+ supported_app_view_types: List[AppViewType]
47
+ """The supported app view types for the app build.
48
+
49
+ These are the views that the developer has specified that this build supports.
50
+ """
@@ -0,0 +1,19 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["AppCreateParams"]
9
+
10
+
11
+ class AppCreateParams(TypedDict, total=False):
12
+ company_id: Required[str]
13
+ """The ID of the company to create the app for"""
14
+
15
+ name: Required[str]
16
+ """The name of the app to be created"""
17
+
18
+ base_url: Optional[str]
19
+ """The base URL of the app to be created"""
@@ -0,0 +1,54 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Literal, TypedDict
7
+
8
+ from .shared.direction import Direction
9
+ from .shared.app_view_type import AppViewType
10
+
11
+ __all__ = ["AppListParams"]
12
+
13
+
14
+ class AppListParams(TypedDict, total=False):
15
+ after: Optional[str]
16
+ """Returns the elements in the list that come after the specified cursor."""
17
+
18
+ before: Optional[str]
19
+ """Returns the elements in the list that come before the specified cursor."""
20
+
21
+ company_id: Optional[str]
22
+ """The ID of the company to filter apps by"""
23
+
24
+ direction: Optional[Direction]
25
+ """The direction of the sort."""
26
+
27
+ first: Optional[int]
28
+ """Returns the first _n_ elements from the list."""
29
+
30
+ last: Optional[int]
31
+ """Returns the last _n_ elements from the list."""
32
+
33
+ order: Optional[
34
+ Literal[
35
+ "discoverable_at",
36
+ "total_installs_last_30_days",
37
+ "time_spent",
38
+ "time_spent_last_24_hours",
39
+ "daily_active_users",
40
+ ]
41
+ ]
42
+ """The order to fetch the apps in for discovery."""
43
+
44
+ query: Optional[str]
45
+ """The query to search for apps by name."""
46
+
47
+ verified_apps_only: Optional[bool]
48
+ """If true, you will only get apps that are verified by Whop.
49
+
50
+ Use this to populate a 'featured apps' section on the app store.
51
+ """
52
+
53
+ view_type: Optional[AppViewType]
54
+ """The different types of an app view"""