whop_sdk 0.0.37 → 0.0.39
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +61 -0
- data/README.md +1 -1
- data/lib/whop_sdk/client.rb +76 -10
- data/lib/whop_sdk/helpers/verify_user_token.rb +166 -34
- data/lib/whop_sdk/models/ad_campaign_list_params.rb +101 -0
- data/lib/whop_sdk/models/ad_campaign_list_response.rb +126 -0
- data/lib/whop_sdk/models/ad_campaign_pause_params.rb +20 -0
- data/lib/whop_sdk/models/ad_campaign_pause_response.rb +328 -0
- data/lib/whop_sdk/models/ad_campaign_retrieve_params.rb +20 -0
- data/lib/whop_sdk/models/ad_campaign_retrieve_response.rb +328 -0
- data/lib/whop_sdk/models/ad_campaign_unpause_params.rb +20 -0
- data/lib/whop_sdk/models/ad_campaign_unpause_response.rb +328 -0
- data/lib/whop_sdk/models/ad_campaign_update_params.rb +33 -0
- data/lib/whop_sdk/models/ad_campaign_update_response.rb +328 -0
- data/lib/whop_sdk/models/ad_group_delete_params.rb +20 -0
- data/lib/whop_sdk/models/ad_group_delete_response.rb +8 -0
- data/lib/whop_sdk/models/ad_group_list_params.rb +109 -0
- data/lib/whop_sdk/models/ad_group_list_response.rb +118 -0
- data/lib/whop_sdk/models/ad_group_retrieve_params.rb +20 -0
- data/lib/whop_sdk/models/ad_group_retrieve_response.rb +140 -0
- data/lib/whop_sdk/models/ad_group_update_params.rb +3207 -0
- data/lib/whop_sdk/models/ad_group_update_response.rb +140 -0
- data/lib/whop_sdk/models/ad_list_params.rb +115 -0
- data/lib/whop_sdk/models/ad_list_response.rb +89 -0
- data/lib/whop_sdk/models/ad_report_retrieve_params.rb +77 -0
- data/lib/whop_sdk/models/ad_report_retrieve_response.rb +312 -0
- data/lib/whop_sdk/models/ad_retrieve_params.rb +20 -0
- data/lib/whop_sdk/models/ad_retrieve_response.rb +133 -0
- data/lib/whop_sdk/models/authorized_user_roles.rb +1 -0
- data/lib/whop_sdk/models/bounty_create_params.rb +105 -0
- data/lib/whop_sdk/models/bounty_create_response.rb +126 -0
- data/lib/whop_sdk/models/bounty_list_params.rb +85 -0
- data/lib/whop_sdk/models/bounty_list_response.rb +126 -0
- data/lib/whop_sdk/models/bounty_retrieve_params.rb +20 -0
- data/lib/whop_sdk/models/bounty_retrieve_response.rb +126 -0
- data/lib/whop_sdk/models/checkout_configuration.rb +20 -2
- data/lib/whop_sdk/models/checkout_configuration_create_params.rb +97 -23
- data/lib/whop_sdk/models/checkout_configuration_list_response.rb +20 -2
- data/lib/whop_sdk/models/company_create_api_key_params.rb +109 -0
- data/lib/whop_sdk/models/company_create_api_key_response.rb +35 -0
- data/lib/whop_sdk/models/conversion_create_params.rb +462 -0
- data/lib/whop_sdk/models/conversion_create_response.rb +19 -0
- data/lib/whop_sdk/models/currency.rb +1 -0
- data/lib/whop_sdk/models/file_create_params.rb +22 -1
- data/lib/whop_sdk/models/file_create_response.rb +26 -3
- data/lib/whop_sdk/models/file_retrieve_response.rb +26 -3
- data/lib/whop_sdk/models/forum_post_list_params.rb +9 -1
- data/lib/whop_sdk/models/forum_update_params.rb +10 -1
- data/lib/whop_sdk/models/invoice_create_params.rb +36 -18
- data/lib/whop_sdk/models/invoice_update_params.rb +29 -7
- data/lib/whop_sdk/models/ledger_account_retrieve_response.rb +2 -2
- data/lib/whop_sdk/models/membership.rb +11 -1
- data/lib/whop_sdk/models/membership_list_response.rb +11 -1
- data/lib/whop_sdk/models/payment.rb +47 -2
- data/lib/whop_sdk/models/payment_list_response.rb +29 -2
- data/lib/whop_sdk/models/payment_method_types.rb +16 -0
- data/lib/whop_sdk/models/payment_refund_params.rb +4 -3
- data/lib/whop_sdk/models/payout_account_retrieve_response.rb +2 -2
- data/lib/whop_sdk/models/payout_account_status_updated_webhook_event.rb +2 -2
- data/lib/whop_sdk/models/plan.rb +12 -3
- data/lib/whop_sdk/models/plan_create_params.rb +26 -6
- data/lib/whop_sdk/models/plan_list_response.rb +12 -3
- data/lib/whop_sdk/models/plan_update_params.rb +26 -6
- data/lib/whop_sdk/models/support_channel_list_params.rb +31 -9
- data/lib/whop_sdk/models/user_retrieve_params.rb +14 -1
- data/lib/whop_sdk/models/{user_update_profile_params.rb → user_update_params.rb} +24 -7
- data/lib/whop_sdk/models/verification_list_response.rb +2 -2
- data/lib/whop_sdk/models/verification_retrieve_response.rb +2 -2
- data/lib/whop_sdk/models/verification_status.rb +1 -0
- data/lib/whop_sdk/models/verification_succeeded_webhook_event.rb +2 -2
- data/lib/whop_sdk/models.rb +35 -1
- data/lib/whop_sdk/resources/ad_campaigns.rb +163 -0
- data/lib/whop_sdk/resources/ad_groups.rb +151 -0
- data/lib/whop_sdk/resources/ad_reports.rb +59 -0
- data/lib/whop_sdk/resources/ads.rb +88 -0
- data/lib/whop_sdk/resources/bounties.rb +124 -0
- data/lib/whop_sdk/resources/companies.rb +34 -0
- data/lib/whop_sdk/resources/conversions.rb +67 -0
- data/lib/whop_sdk/resources/files.rb +3 -1
- data/lib/whop_sdk/resources/forum_posts.rb +3 -1
- data/lib/whop_sdk/resources/forums.rb +3 -1
- data/lib/whop_sdk/resources/invoices.rb +9 -2
- data/lib/whop_sdk/resources/payments.rb +1 -1
- data/lib/whop_sdk/resources/plans.rb +6 -2
- data/lib/whop_sdk/resources/support_channels.rb +6 -4
- data/lib/whop_sdk/resources/users.rb +49 -37
- data/lib/whop_sdk/version.rb +1 -1
- data/lib/whop_sdk.rb +41 -1
- data/rbi/whop_sdk/client.rbi +24 -0
- data/rbi/whop_sdk/models/ad_campaign_list_params.rbi +142 -0
- data/rbi/whop_sdk/models/ad_campaign_list_response.rbi +239 -0
- data/rbi/whop_sdk/models/ad_campaign_pause_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_campaign_pause_response.rbi +668 -0
- data/rbi/whop_sdk/models/ad_campaign_retrieve_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_campaign_retrieve_response.rbi +679 -0
- data/rbi/whop_sdk/models/ad_campaign_unpause_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_campaign_unpause_response.rbi +675 -0
- data/rbi/whop_sdk/models/ad_campaign_update_params.rbi +51 -0
- data/rbi/whop_sdk/models/ad_campaign_update_response.rbi +670 -0
- data/rbi/whop_sdk/models/ad_group_delete_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_group_delete_response.rbi +8 -0
- data/rbi/whop_sdk/models/ad_group_list_params.rbi +145 -0
- data/rbi/whop_sdk/models/ad_group_list_response.rbi +228 -0
- data/rbi/whop_sdk/models/ad_group_retrieve_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_group_retrieve_response.rbi +277 -0
- data/rbi/whop_sdk/models/ad_group_update_params.rbi +6133 -0
- data/rbi/whop_sdk/models/ad_group_update_response.rbi +274 -0
- data/rbi/whop_sdk/models/ad_list_params.rbi +146 -0
- data/rbi/whop_sdk/models/ad_list_response.rbi +146 -0
- data/rbi/whop_sdk/models/ad_report_retrieve_params.rbi +99 -0
- data/rbi/whop_sdk/models/ad_report_retrieve_response.rbi +629 -0
- data/rbi/whop_sdk/models/ad_retrieve_params.rbi +35 -0
- data/rbi/whop_sdk/models/ad_retrieve_response.rbi +245 -0
- data/rbi/whop_sdk/models/authorized_user_roles.rbi +2 -0
- data/rbi/whop_sdk/models/bounty_create_params.rbi +129 -0
- data/rbi/whop_sdk/models/bounty_create_response.rbi +196 -0
- data/rbi/whop_sdk/models/bounty_list_params.rbi +115 -0
- data/rbi/whop_sdk/models/bounty_list_response.rbi +189 -0
- data/rbi/whop_sdk/models/bounty_retrieve_params.rbi +35 -0
- data/rbi/whop_sdk/models/bounty_retrieve_response.rbi +199 -0
- data/rbi/whop_sdk/models/checkout_configuration.rbi +20 -0
- data/rbi/whop_sdk/models/checkout_configuration_create_params.rbi +84 -16
- data/rbi/whop_sdk/models/checkout_configuration_list_response.rbi +20 -0
- data/rbi/whop_sdk/models/company_create_api_key_params.rbi +184 -0
- data/rbi/whop_sdk/models/company_create_api_key_response.rbi +51 -0
- data/rbi/whop_sdk/models/conversion_create_params.rbi +661 -0
- data/rbi/whop_sdk/models/conversion_create_response.rbi +31 -0
- data/rbi/whop_sdk/models/currency.rbi +1 -0
- data/rbi/whop_sdk/models/file_create_params.rbi +41 -1
- data/rbi/whop_sdk/models/file_create_response.rbi +52 -5
- data/rbi/whop_sdk/models/file_retrieve_response.rbi +53 -5
- data/rbi/whop_sdk/models/forum_post_list_params.rbi +8 -0
- data/rbi/whop_sdk/models/forum_update_params.rbi +10 -0
- data/rbi/whop_sdk/models/invoice_create_params.rbi +46 -26
- data/rbi/whop_sdk/models/invoice_update_params.rbi +28 -6
- data/rbi/whop_sdk/models/ledger_account_retrieve_response.rbi +2 -2
- data/rbi/whop_sdk/models/membership.rbi +12 -0
- data/rbi/whop_sdk/models/membership_list_response.rbi +12 -0
- data/rbi/whop_sdk/models/payment.rbi +57 -3
- data/rbi/whop_sdk/models/payment_list_response.rbi +37 -3
- data/rbi/whop_sdk/models/payment_method_types.rbi +31 -0
- data/rbi/whop_sdk/models/payment_refund_params.rbi +6 -4
- data/rbi/whop_sdk/models/payout_account_retrieve_response.rbi +2 -2
- data/rbi/whop_sdk/models/payout_account_status_updated_webhook_event.rbi +2 -2
- data/rbi/whop_sdk/models/plan.rbi +12 -2
- data/rbi/whop_sdk/models/plan_create_params.rbi +22 -4
- data/rbi/whop_sdk/models/plan_list_response.rbi +12 -2
- data/rbi/whop_sdk/models/plan_update_params.rbi +22 -4
- data/rbi/whop_sdk/models/support_channel_list_params.rbi +50 -8
- data/rbi/whop_sdk/models/user_retrieve_params.rbi +18 -2
- data/rbi/whop_sdk/models/{user_update_profile_params.rbi → user_update_params.rbi} +25 -9
- data/rbi/whop_sdk/models/verification_list_response.rbi +2 -2
- data/rbi/whop_sdk/models/verification_retrieve_response.rbi +2 -2
- data/rbi/whop_sdk/models/verification_status.rbi +2 -0
- data/rbi/whop_sdk/models/verification_succeeded_webhook_event.rbi +2 -2
- data/rbi/whop_sdk/models.rbi +35 -1
- data/rbi/whop_sdk/resources/ad_campaigns.rbi +134 -0
- data/rbi/whop_sdk/resources/ad_groups.rbi +139 -0
- data/rbi/whop_sdk/resources/ad_reports.rbi +55 -0
- data/rbi/whop_sdk/resources/ads.rbi +81 -0
- data/rbi/whop_sdk/resources/bounties.rbi +116 -0
- data/rbi/whop_sdk/resources/companies.rbi +32 -0
- data/rbi/whop_sdk/resources/conversions.rbi +71 -0
- data/rbi/whop_sdk/resources/files.rbi +5 -0
- data/rbi/whop_sdk/resources/forum_posts.rbi +3 -0
- data/rbi/whop_sdk/resources/forums.rbi +4 -0
- data/rbi/whop_sdk/resources/invoices.rbi +10 -1
- data/rbi/whop_sdk/resources/payments.rbi +3 -2
- data/rbi/whop_sdk/resources/plans.rbi +6 -0
- data/rbi/whop_sdk/resources/support_channels.rbi +8 -3
- data/rbi/whop_sdk/resources/users.rbi +42 -29
- data/sig/whop_sdk/client.rbs +12 -0
- data/sig/whop_sdk/models/ad_campaign_list_params.rbs +82 -0
- data/sig/whop_sdk/models/ad_campaign_list_response.rbs +98 -0
- data/sig/whop_sdk/models/ad_campaign_pause_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_campaign_pause_response.rbs +232 -0
- data/sig/whop_sdk/models/ad_campaign_retrieve_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_campaign_retrieve_response.rbs +232 -0
- data/sig/whop_sdk/models/ad_campaign_unpause_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_campaign_unpause_response.rbs +232 -0
- data/sig/whop_sdk/models/ad_campaign_update_params.rbs +28 -0
- data/sig/whop_sdk/models/ad_campaign_update_response.rbs +232 -0
- data/sig/whop_sdk/models/ad_group_delete_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_group_delete_response.rbs +5 -0
- data/sig/whop_sdk/models/ad_group_list_params.rbs +87 -0
- data/sig/whop_sdk/models/ad_group_list_response.rbs +93 -0
- data/sig/whop_sdk/models/ad_group_retrieve_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_group_retrieve_response.rbs +108 -0
- data/sig/whop_sdk/models/ad_group_update_params.rbs +2439 -0
- data/sig/whop_sdk/models/ad_group_update_response.rbs +108 -0
- data/sig/whop_sdk/models/ad_list_params.rbs +87 -0
- data/sig/whop_sdk/models/ad_list_response.rbs +72 -0
- data/sig/whop_sdk/models/ad_report_retrieve_params.rbs +56 -0
- data/sig/whop_sdk/models/ad_report_retrieve_response.rbs +278 -0
- data/sig/whop_sdk/models/ad_retrieve_params.rbs +20 -0
- data/sig/whop_sdk/models/ad_retrieve_response.rbs +102 -0
- data/sig/whop_sdk/models/authorized_user_roles.rbs +2 -0
- data/sig/whop_sdk/models/bounty_create_params.rbs +71 -0
- data/sig/whop_sdk/models/bounty_create_response.rbs +93 -0
- data/sig/whop_sdk/models/bounty_list_params.rbs +67 -0
- data/sig/whop_sdk/models/bounty_list_response.rbs +93 -0
- data/sig/whop_sdk/models/bounty_retrieve_params.rbs +20 -0
- data/sig/whop_sdk/models/bounty_retrieve_response.rbs +93 -0
- data/sig/whop_sdk/models/checkout_configuration.rbs +10 -0
- data/sig/whop_sdk/models/checkout_configuration_create_params.rbs +51 -16
- data/sig/whop_sdk/models/checkout_configuration_list_response.rbs +10 -0
- data/sig/whop_sdk/models/company_create_api_key_params.rbs +83 -0
- data/sig/whop_sdk/models/company_create_api_key_response.rbs +18 -0
- data/sig/whop_sdk/models/conversion_create_params.rbs +349 -0
- data/sig/whop_sdk/models/conversion_create_response.rbs +13 -0
- data/sig/whop_sdk/models/currency.rbs +2 -0
- data/sig/whop_sdk/models/file_create_params.rbs +20 -1
- data/sig/whop_sdk/models/file_create_response.rbs +19 -3
- data/sig/whop_sdk/models/file_retrieve_response.rbs +19 -3
- data/sig/whop_sdk/models/forum_post_list_params.rbs +5 -0
- data/sig/whop_sdk/models/forum_update_params.rbs +5 -0
- data/sig/whop_sdk/models/invoice_create_params.rbs +24 -14
- data/sig/whop_sdk/models/invoice_update_params.rbs +15 -5
- data/sig/whop_sdk/models/membership.rbs +5 -0
- data/sig/whop_sdk/models/membership_list_response.rbs +5 -0
- data/sig/whop_sdk/models/payment.rbs +25 -3
- data/sig/whop_sdk/models/payment_list_response.rbs +15 -3
- data/sig/whop_sdk/models/payment_method_types.rbs +32 -0
- data/sig/whop_sdk/models/plan.rbs +5 -0
- data/sig/whop_sdk/models/plan_create_params.rbs +14 -4
- data/sig/whop_sdk/models/plan_list_response.rbs +5 -0
- data/sig/whop_sdk/models/plan_update_params.rbs +14 -4
- data/sig/whop_sdk/models/support_channel_list_params.rbs +23 -6
- data/sig/whop_sdk/models/user_retrieve_params.rbs +10 -2
- data/sig/whop_sdk/models/{user_update_profile_params.rbs → user_update_params.rbs} +16 -6
- data/sig/whop_sdk/models/verification_status.rbs +2 -0
- data/sig/whop_sdk/models.rbs +35 -1
- data/sig/whop_sdk/resources/ad_campaigns.rbs +41 -0
- data/sig/whop_sdk/resources/ad_groups.rbs +40 -0
- data/sig/whop_sdk/resources/ad_reports.rbs +18 -0
- data/sig/whop_sdk/resources/ads.rbs +26 -0
- data/sig/whop_sdk/resources/bounties.rbs +37 -0
- data/sig/whop_sdk/resources/companies.rbs +9 -0
- data/sig/whop_sdk/resources/conversions.rbs +25 -0
- data/sig/whop_sdk/resources/files.rbs +1 -0
- data/sig/whop_sdk/resources/forum_posts.rbs +1 -0
- data/sig/whop_sdk/resources/forums.rbs +1 -0
- data/sig/whop_sdk/resources/invoices.rbs +2 -0
- data/sig/whop_sdk/resources/plans.rbs +2 -0
- data/sig/whop_sdk/resources/support_channels.rbs +2 -1
- data/sig/whop_sdk/resources/users.rbs +11 -8
- metadata +125 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0d7509c8207433b48cc7855f1b113a5d61a9d435de8cd0007bc849a42791dec4
|
|
4
|
+
data.tar.gz: 3553946316f1e57d6a6e6b1a0cd33dd67098b2c8e5161002e0f194756d5c16fe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: acf6bcf13b6391ead5b5a24009508ae0c39422ea56635a472d900767e6c9df7d30c0ce6880de442461974c94d5d791030fd1f899679b851b83d7e11b1cfa9904
|
|
7
|
+
data.tar.gz: f4f7d52cf615dae4d4566d4e9efa4b02abfcb52a97044bdc189833b3a778951aa956ca39eb994765ae28877741160a580a95c7e3f9927a9313996e57c8e9d439
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,66 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.0.39 (2026-05-12)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.0.38...v0.0.39](https://github.com/whopio/whopsdk-ruby/compare/v0.0.38...v0.0.39)
|
|
6
|
+
|
|
7
|
+
### Features
|
|
8
|
+
|
|
9
|
+
* **api:** api update ([41f1c48](https://github.com/whopio/whopsdk-ruby/commit/41f1c489c4c3939c5ead8959796206b3f646be0a))
|
|
10
|
+
* **api:** api update ([0a030fb](https://github.com/whopio/whopsdk-ruby/commit/0a030fbcfb624ddae25835b9f4ce9b22914ce965))
|
|
11
|
+
* **api:** api update ([6dee63d](https://github.com/whopio/whopsdk-ruby/commit/6dee63d737eade9121eaa08cc9ba903ff0f0c12e))
|
|
12
|
+
* **api:** api update ([a86b37e](https://github.com/whopio/whopsdk-ruby/commit/a86b37e20f9802ffc244826e26b85e88da193ca7))
|
|
13
|
+
* **api:** api update ([4c48f94](https://github.com/whopio/whopsdk-ruby/commit/4c48f94afcfecede20ff4f68bcab257a52907d05))
|
|
14
|
+
* **api:** api update ([8c8346f](https://github.com/whopio/whopsdk-ruby/commit/8c8346fb790c3e00f6989a2ccfea03bba38e405e))
|
|
15
|
+
* **api:** api update ([cc9da37](https://github.com/whopio/whopsdk-ruby/commit/cc9da3700393b67a2b2a039aafeeba23159f1b2b))
|
|
16
|
+
* **api:** api update ([9a51f78](https://github.com/whopio/whopsdk-ruby/commit/9a51f786894aac2d495c1602cd823292862d094f))
|
|
17
|
+
* **api:** api update ([642732f](https://github.com/whopio/whopsdk-ruby/commit/642732f64a708d22a4bb8f1bfc8a7133e05a1f08))
|
|
18
|
+
* **api:** api update ([e53cc0d](https://github.com/whopio/whopsdk-ruby/commit/e53cc0dc256c0ab781725fef547dad3716eabad5))
|
|
19
|
+
* **api:** api update ([b4aa0af](https://github.com/whopio/whopsdk-ruby/commit/b4aa0af8ac8f678ee722fe23d9c4c2df35426316))
|
|
20
|
+
* **api:** api update ([e923086](https://github.com/whopio/whopsdk-ruby/commit/e9230869b6d1eec823473fb67309ab2ad302ba7b))
|
|
21
|
+
* **api:** api update ([1391fb1](https://github.com/whopio/whopsdk-ruby/commit/1391fb13a1063b8ac483a69795533b7e6bec89f1))
|
|
22
|
+
* **api:** api update ([bca6667](https://github.com/whopio/whopsdk-ruby/commit/bca6667862f9dee69950b47c065787c26236aadb))
|
|
23
|
+
* **api:** api update ([4129022](https://github.com/whopio/whopsdk-ruby/commit/4129022fceee5287f11a5e3858863433effc7ab1))
|
|
24
|
+
* **api:** api update ([b687cb9](https://github.com/whopio/whopsdk-ruby/commit/b687cb9249eb826e3a4d933b292f12ce02d94af0))
|
|
25
|
+
* **api:** api update ([79aae44](https://github.com/whopio/whopsdk-ruby/commit/79aae4416d123e1afa7e27d95749e1fd23ae055f))
|
|
26
|
+
* **api:** api update ([c30e8d4](https://github.com/whopio/whopsdk-ruby/commit/c30e8d4b93c2ea4ece5241af0d122ca30c59bac3))
|
|
27
|
+
* **api:** api update ([327691b](https://github.com/whopio/whopsdk-ruby/commit/327691b54ccbeb7d10a046b4a3938b126aa49500))
|
|
28
|
+
* **api:** api update ([35ba170](https://github.com/whopio/whopsdk-ruby/commit/35ba170f38fabb58908842c2ba39a6a9044812e9))
|
|
29
|
+
* **api:** api update ([7e8b054](https://github.com/whopio/whopsdk-ruby/commit/7e8b054992f97166ef28c10c116a7024c4af6eec))
|
|
30
|
+
* **api:** api update ([d8e52f4](https://github.com/whopio/whopsdk-ruby/commit/d8e52f48055361f0857513f0caac229959506c23))
|
|
31
|
+
* **api:** api update ([f095b42](https://github.com/whopio/whopsdk-ruby/commit/f095b4234574686ed157acf45f3627209ca548f7))
|
|
32
|
+
* **api:** manual updates ([caecf6f](https://github.com/whopio/whopsdk-ruby/commit/caecf6fa4278cf509f247297ab3a0ad5be835a04))
|
|
33
|
+
* **api:** manual updates ([2dbd70c](https://github.com/whopio/whopsdk-ruby/commit/2dbd70cee7fee0252936e15bb8547a4fa0d27501))
|
|
34
|
+
* **api:** manual updates ([02c0e75](https://github.com/whopio/whopsdk-ruby/commit/02c0e7583a78fbc3416f915bd5d80d0a97056323))
|
|
35
|
+
* **api:** manual updates ([9f433de](https://github.com/whopio/whopsdk-ruby/commit/9f433defa7e1a3f56316deff2862a89be69e6c27))
|
|
36
|
+
* **api:** manual updates ([b399216](https://github.com/whopio/whopsdk-ruby/commit/b399216595e3e85b7ec64802017dee810fc268c3))
|
|
37
|
+
* support setting headers via env ([41a50f8](https://github.com/whopio/whopsdk-ruby/commit/41a50f8e339ce87259211c13b135b081ad1141f9))
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
### Chores
|
|
41
|
+
|
|
42
|
+
* **internal:** codegen related update ([747437e](https://github.com/whopio/whopsdk-ruby/commit/747437e579049c007cc35ddebc1866268b9e9b38))
|
|
43
|
+
* **internal:** more robust bootstrap script ([19ee1dc](https://github.com/whopio/whopsdk-ruby/commit/19ee1dc702fc3a96d2c0c33b25f1dfc9d57eb5cc))
|
|
44
|
+
|
|
45
|
+
## 0.0.38 (2026-04-21)
|
|
46
|
+
|
|
47
|
+
Full Changelog: [v0.0.37...v0.0.38](https://github.com/whopio/whopsdk-ruby/compare/v0.0.37...v0.0.38)
|
|
48
|
+
|
|
49
|
+
### Features
|
|
50
|
+
|
|
51
|
+
* **api:** api update ([fa1a45f](https://github.com/whopio/whopsdk-ruby/commit/fa1a45f492c238b6ff849440c3c910bc4ea72754))
|
|
52
|
+
* **api:** api update ([f9181a4](https://github.com/whopio/whopsdk-ruby/commit/f9181a4a772ce4828d8332928508109089656648))
|
|
53
|
+
* **api:** api update ([a8e3560](https://github.com/whopio/whopsdk-ruby/commit/a8e35601fcf0ee79bcc2333e5c323682471f3b91))
|
|
54
|
+
* **api:** api update ([516c14b](https://github.com/whopio/whopsdk-ruby/commit/516c14bc5edc25bf46049ea42ae1968f9bf0d782))
|
|
55
|
+
* **api:** api update ([a58e4b0](https://github.com/whopio/whopsdk-ruby/commit/a58e4b0fb68546c017cfa027a6645b906c0acca6))
|
|
56
|
+
* **api:** api update ([2ae4543](https://github.com/whopio/whopsdk-ruby/commit/2ae45431715186177b61e5089136242652cf54a1))
|
|
57
|
+
* **api:** manual updates ([943f900](https://github.com/whopio/whopsdk-ruby/commit/943f9009a1a288e0ac8a139fb090c1dcd7a6440e))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
### Bug Fixes
|
|
61
|
+
|
|
62
|
+
* **helpers:** verify_user_token uses remote JWKS with module-level caching ([#44](https://github.com/whopio/whopsdk-ruby/issues/44)) ([107a289](https://github.com/whopio/whopsdk-ruby/commit/107a2898be09866f50e59f402ed08748662c4185))
|
|
63
|
+
|
|
3
64
|
## 0.0.37 (2026-04-10)
|
|
4
65
|
|
|
5
66
|
Full Changelog: [v0.0.36...v0.0.37](https://github.com/whopio/whopsdk-ruby/compare/v0.0.36...v0.0.37)
|
data/README.md
CHANGED
data/lib/whop_sdk/client.rb
CHANGED
|
@@ -29,6 +29,18 @@ module WhopSDK
|
|
|
29
29
|
# @return [String, nil]
|
|
30
30
|
attr_reader :app_id
|
|
31
31
|
|
|
32
|
+
# Static public key (PEM or JWK JSON) used by {#verify_user_token} to
|
|
33
|
+
# verify user tokens. When set, the SDK skips remote JWKS fetching.
|
|
34
|
+
# Prefer {#user_token_jwks_url} (or the default) so key rotation is
|
|
35
|
+
# handled automatically.
|
|
36
|
+
# @return [String, nil]
|
|
37
|
+
attr_reader :user_token_public_key
|
|
38
|
+
|
|
39
|
+
# Override for the JWKS endpoint used by {#verify_user_token}. Defaults
|
|
40
|
+
# to the canonical Whop endpoint when unset.
|
|
41
|
+
# @return [String, nil]
|
|
42
|
+
attr_reader :user_token_jwks_url
|
|
43
|
+
|
|
32
44
|
# Apps
|
|
33
45
|
# @return [WhopSDK::Resources::Apps]
|
|
34
46
|
attr_reader :apps
|
|
@@ -241,6 +253,30 @@ module WhopSDK
|
|
|
241
253
|
# @return [WhopSDK::Resources::Affiliates]
|
|
242
254
|
attr_reader :affiliates
|
|
243
255
|
|
|
256
|
+
# Bounties
|
|
257
|
+
# @return [WhopSDK::Resources::Bounties]
|
|
258
|
+
attr_reader :bounties
|
|
259
|
+
|
|
260
|
+
# Ad campaigns
|
|
261
|
+
# @return [WhopSDK::Resources::AdCampaigns]
|
|
262
|
+
attr_reader :ad_campaigns
|
|
263
|
+
|
|
264
|
+
# Ad groups
|
|
265
|
+
# @return [WhopSDK::Resources::AdGroups]
|
|
266
|
+
attr_reader :ad_groups
|
|
267
|
+
|
|
268
|
+
# Ads
|
|
269
|
+
# @return [WhopSDK::Resources::Ads]
|
|
270
|
+
attr_reader :ads
|
|
271
|
+
|
|
272
|
+
# Conversions
|
|
273
|
+
# @return [WhopSDK::Resources::Conversions]
|
|
274
|
+
attr_reader :conversions
|
|
275
|
+
|
|
276
|
+
# Ad reports
|
|
277
|
+
# @return [WhopSDK::Resources::AdReports]
|
|
278
|
+
attr_reader :ad_reports
|
|
279
|
+
|
|
244
280
|
# @api private
|
|
245
281
|
#
|
|
246
282
|
# @return [Hash{String=>String}]
|
|
@@ -261,6 +297,13 @@ module WhopSDK
|
|
|
261
297
|
# @param app_id [String, nil] When using the SDK in app mode pass this parameter to allow verifying user
|
|
262
298
|
# tokens Defaults to `ENV["WHOP_APP_ID"]`
|
|
263
299
|
#
|
|
300
|
+
# @param user_token_public_key [String, nil] Static public key (PEM or JWK JSON) used to verify
|
|
301
|
+
# user tokens. When set, {#verify_user_token} skips remote JWKS fetching.
|
|
302
|
+
# Defaults to `ENV["WHOP_USER_TOKEN_PUBLIC_KEY"]`
|
|
303
|
+
#
|
|
304
|
+
# @param user_token_jwks_url [String, nil] Override the JWKS URL used by {#verify_user_token}.
|
|
305
|
+
# Defaults to `ENV["WHOP_USER_TOKEN_JWKS_URL"]`, then to the canonical Whop endpoint.
|
|
306
|
+
#
|
|
264
307
|
# @param base_url [String, nil] Override the default base URL for the API, e.g.,
|
|
265
308
|
# `"https://api.example.com/v2/"`. Defaults to `ENV["WHOP_BASE_URL"]`
|
|
266
309
|
#
|
|
@@ -275,6 +318,8 @@ module WhopSDK
|
|
|
275
318
|
api_key: ENV["WHOP_API_KEY"],
|
|
276
319
|
webhook_key: ENV["WHOP_WEBHOOK_SECRET"],
|
|
277
320
|
app_id: ENV["WHOP_APP_ID"],
|
|
321
|
+
user_token_public_key: ENV["WHOP_USER_TOKEN_PUBLIC_KEY"],
|
|
322
|
+
user_token_jwks_url: ENV["WHOP_USER_TOKEN_JWKS_URL"],
|
|
278
323
|
base_url: ENV["WHOP_BASE_URL"],
|
|
279
324
|
max_retries: self.class::DEFAULT_MAX_RETRIES,
|
|
280
325
|
timeout: self.class::DEFAULT_TIMEOUT_IN_SECONDS,
|
|
@@ -290,9 +335,22 @@ module WhopSDK
|
|
|
290
335
|
headers = {
|
|
291
336
|
"x-whop-app-id" => (@app_id = app_id&.to_s)
|
|
292
337
|
}
|
|
338
|
+
custom_headers_env = ENV["WHOP_CUSTOM_HEADERS"]
|
|
339
|
+
unless custom_headers_env.nil?
|
|
340
|
+
parsed = {}
|
|
341
|
+
custom_headers_env.split("\n").each do |line|
|
|
342
|
+
colon = line.index(":")
|
|
343
|
+
unless colon.nil?
|
|
344
|
+
parsed[line[0...colon].strip] = line[(colon + 1)..].strip
|
|
345
|
+
end
|
|
346
|
+
end
|
|
347
|
+
headers = parsed.merge(headers)
|
|
348
|
+
end
|
|
293
349
|
|
|
294
350
|
@api_key = api_key.to_s
|
|
295
351
|
@webhook_key = webhook_key&.to_s
|
|
352
|
+
@user_token_public_key = user_token_public_key&.to_s
|
|
353
|
+
@user_token_jwks_url = user_token_jwks_url&.to_s
|
|
296
354
|
|
|
297
355
|
super(
|
|
298
356
|
base_url: base_url,
|
|
@@ -356,31 +414,39 @@ module WhopSDK
|
|
|
356
414
|
@resolution_center_cases = WhopSDK::Resources::ResolutionCenterCases.new(client: self)
|
|
357
415
|
@payout_accounts = WhopSDK::Resources::PayoutAccounts.new(client: self)
|
|
358
416
|
@affiliates = WhopSDK::Resources::Affiliates.new(client: self)
|
|
417
|
+
@bounties = WhopSDK::Resources::Bounties.new(client: self)
|
|
418
|
+
@ad_campaigns = WhopSDK::Resources::AdCampaigns.new(client: self)
|
|
419
|
+
@ad_groups = WhopSDK::Resources::AdGroups.new(client: self)
|
|
420
|
+
@ads = WhopSDK::Resources::Ads.new(client: self)
|
|
421
|
+
@conversions = WhopSDK::Resources::Conversions.new(client: self)
|
|
422
|
+
@ad_reports = WhopSDK::Resources::AdReports.new(client: self)
|
|
359
423
|
end
|
|
360
424
|
|
|
361
|
-
# Verifies a Whop user token
|
|
425
|
+
# Verifies a Whop user token.
|
|
362
426
|
#
|
|
363
427
|
# @param token_or_headers [String, Hash, nil] The token string or headers hash
|
|
364
428
|
# @param app_id [String, nil] The app id to verify against
|
|
365
|
-
# @param public_key [String, nil]
|
|
366
|
-
#
|
|
367
|
-
# @
|
|
429
|
+
# @param public_key [String, nil] Static public key (PEM or JWK JSON). When set, the
|
|
430
|
+
# SDK skips remote JWKS fetching. Defaults to the client's `user_token_public_key`.
|
|
431
|
+
# @param jwks_url [String, nil] Override the JWKS URL. Defaults to the client's
|
|
432
|
+
# `user_token_jwks_url`, then to the canonical Whop endpoint.
|
|
433
|
+
# @param header_name [String, nil] The header name to read the token from
|
|
434
|
+
# @return [Helpers::VerifyUserToken::UserTokenPayload]
|
|
368
435
|
# @raise [StandardError] If verification fails
|
|
369
436
|
def verify_user_token!(token_or_headers, **opts)
|
|
370
437
|
opts[:app_id] ||= app_id
|
|
438
|
+
opts[:public_key] = user_token_public_key if opts[:public_key].nil? && user_token_public_key && !user_token_public_key.empty?
|
|
439
|
+
opts[:jwks_url] = user_token_jwks_url if opts[:jwks_url].nil? && user_token_jwks_url && !user_token_jwks_url.empty?
|
|
371
440
|
unless opts[:app_id]
|
|
372
441
|
raise StandardError, "You must set app_id in the Whop client if you want to verify user tokens"
|
|
373
442
|
end
|
|
374
443
|
Helpers::VerifyUserToken.verify_user_token!(token_or_headers, **opts)
|
|
375
444
|
end
|
|
376
445
|
|
|
377
|
-
# Verifies a Whop user token
|
|
446
|
+
# Verifies a Whop user token. Same signature as {#verify_user_token!}
|
|
447
|
+
# but returns `nil` on any validation failure instead of raising.
|
|
378
448
|
#
|
|
379
|
-
# @
|
|
380
|
-
# @param app_id [String, nil] The app id to verify against
|
|
381
|
-
# @param public_key [String, nil] Optional custom public key (PEM format)
|
|
382
|
-
# @param header_name [String, nil] The header name to use (defaults to x-whop-user-token)
|
|
383
|
-
# @return [UserTokenPayload, nil] The verified token payload or nil if the verification failed
|
|
449
|
+
# @return [Helpers::VerifyUserToken::UserTokenPayload, nil]
|
|
384
450
|
def verify_user_token(token_or_headers, **opts)
|
|
385
451
|
verify_user_token!(token_or_headers, **opts)
|
|
386
452
|
rescue StandardError
|
|
@@ -1,18 +1,29 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require "jwt"
|
|
4
|
+
require "json"
|
|
5
|
+
require "net/http"
|
|
4
6
|
require "openssl"
|
|
7
|
+
require "uri"
|
|
5
8
|
|
|
6
9
|
module WhopSDK
|
|
7
10
|
module Helpers
|
|
11
|
+
# Verifies Whop-issued x-whop-user-token JWTs. By default, fetches the
|
|
12
|
+
# public signing keys from Whop's canonical JWKS endpoint and caches
|
|
13
|
+
# them at module scope (TTL-bounded with a cooldown on refetch). The
|
|
14
|
+
# behavior mirrors the TypeScript SDK's `createRemoteJWKSet` path so
|
|
15
|
+
# that upgrading to a key rotation doesn't require a gem release.
|
|
8
16
|
module VerifyUserToken
|
|
9
17
|
USER_TOKEN_HEADER_NAME = "x-whop-user-token"
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
18
|
+
DEFAULT_JWKS_URL = "https://api.whop.com/.well-known/jwks.json"
|
|
19
|
+
TOKEN_ISSUER = "urn:whopcom:exp-proxy"
|
|
20
|
+
TOKEN_ALGORITHM = "ES256"
|
|
21
|
+
|
|
22
|
+
# 12h freshness window before a proactive refresh; 30s cooldown
|
|
23
|
+
# between refetches when a kid lookup misses. Matches the TS SDK
|
|
24
|
+
# (`cacheMaxAge: 12 * 60 * 60 * 1000, cooldownDuration: 30_000`).
|
|
25
|
+
JWKS_CACHE_MAX_AGE_SECONDS = 12 * 60 * 60
|
|
26
|
+
JWKS_COOLDOWN_SECONDS = 30
|
|
16
27
|
|
|
17
28
|
# User token payload structure
|
|
18
29
|
class UserTokenPayload
|
|
@@ -28,11 +39,84 @@ module WhopSDK
|
|
|
28
39
|
end
|
|
29
40
|
end
|
|
30
41
|
|
|
31
|
-
#
|
|
42
|
+
# Thread-safe, TTL-bounded remote JWKS cache with cooldown-gated
|
|
43
|
+
# refresh on kid miss.
|
|
44
|
+
class RemoteJwks
|
|
45
|
+
def initialize(url, cache_max_age_seconds:, cooldown_seconds:)
|
|
46
|
+
@url = url
|
|
47
|
+
@cache_max_age_seconds = cache_max_age_seconds
|
|
48
|
+
@cooldown_seconds = cooldown_seconds
|
|
49
|
+
@mutex = Mutex.new
|
|
50
|
+
@jwk_set = nil
|
|
51
|
+
@fetched_at = nil
|
|
52
|
+
@last_refresh_attempt_at = nil
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Returns the current JWK::Set, fetching or refreshing as needed.
|
|
56
|
+
# When `force_refresh` is true, bypass the freshness window but
|
|
57
|
+
# still honor the refetch cooldown.
|
|
58
|
+
def jwk_set(force_refresh: false)
|
|
59
|
+
@mutex.synchronize do
|
|
60
|
+
now = monotonic_now
|
|
61
|
+
cache_stale = @jwk_set.nil? || @fetched_at.nil? ||
|
|
62
|
+
(now - @fetched_at) > @cache_max_age_seconds
|
|
63
|
+
cooldown_elapsed = @last_refresh_attempt_at.nil? ||
|
|
64
|
+
(now - @last_refresh_attempt_at) > @cooldown_seconds
|
|
65
|
+
|
|
66
|
+
refresh_now = @jwk_set.nil? || cache_stale ||
|
|
67
|
+
(force_refresh && cooldown_elapsed)
|
|
68
|
+
|
|
69
|
+
fetch! if refresh_now
|
|
70
|
+
@jwk_set
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
|
|
76
|
+
def fetch!
|
|
77
|
+
@last_refresh_attempt_at = monotonic_now
|
|
78
|
+
response = Net::HTTP.get_response(URI(@url))
|
|
79
|
+
|
|
80
|
+
unless response.is_a?(Net::HTTPSuccess)
|
|
81
|
+
raise StandardError, "Failed to fetch JWKS from #{@url} (HTTP #{response.code})"
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
parsed = JSON.parse(response.body)
|
|
85
|
+
@jwk_set = JWT::JWK::Set.new(parsed)
|
|
86
|
+
@fetched_at = monotonic_now
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def monotonic_now
|
|
90
|
+
Process.clock_gettime(Process::CLOCK_MONOTONIC)
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
# Module-level cache keyed by JWKS URL. One RemoteJwks instance per
|
|
95
|
+
# distinct URL survives for the process lifetime.
|
|
96
|
+
@jwks_cache = {}
|
|
97
|
+
@jwks_cache_mutex = Mutex.new
|
|
98
|
+
|
|
99
|
+
# @api private
|
|
100
|
+
def self.remote_jwks_for(url)
|
|
101
|
+
@jwks_cache_mutex.synchronize do
|
|
102
|
+
@jwks_cache[url] ||= RemoteJwks.new(
|
|
103
|
+
url,
|
|
104
|
+
cache_max_age_seconds: JWKS_CACHE_MAX_AGE_SECONDS,
|
|
105
|
+
cooldown_seconds: JWKS_COOLDOWN_SECONDS
|
|
106
|
+
)
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
# @api private — test-only hook to clear the module-level cache.
|
|
111
|
+
def self.reset_jwks_cache!
|
|
112
|
+
@jwks_cache_mutex.synchronize { @jwks_cache.clear }
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
# Extracts the user token from various input types.
|
|
32
116
|
#
|
|
33
|
-
# @param token_or_headers [String, Hash, nil]
|
|
34
|
-
# @param header_name [String, nil]
|
|
35
|
-
# @return [String, nil]
|
|
117
|
+
# @param token_or_headers [String, Hash, nil] token string or headers hash
|
|
118
|
+
# @param header_name [String, nil] header name (defaults to x-whop-user-token)
|
|
119
|
+
# @return [String, nil]
|
|
36
120
|
def self.get_user_token(token_or_headers, header_name: nil)
|
|
37
121
|
header_name ||= USER_TOKEN_HEADER_NAME
|
|
38
122
|
|
|
@@ -46,18 +130,27 @@ module WhopSDK
|
|
|
46
130
|
end
|
|
47
131
|
end
|
|
48
132
|
|
|
49
|
-
# Verifies a Whop user token
|
|
133
|
+
# Verifies a Whop user token.
|
|
50
134
|
#
|
|
51
|
-
#
|
|
52
|
-
#
|
|
53
|
-
#
|
|
54
|
-
#
|
|
55
|
-
#
|
|
56
|
-
# @
|
|
135
|
+
# By default fetches the public signing keys from `jwks_url` (or the
|
|
136
|
+
# canonical Whop endpoint) and caches them at module scope. Pass
|
|
137
|
+
# `public_key` to verify against a static key instead — useful for
|
|
138
|
+
# self-hosted / test setups where you know the exact key.
|
|
139
|
+
#
|
|
140
|
+
# @param token_or_headers [String, Hash, nil]
|
|
141
|
+
# @param app_id [String, nil] Required; when set, the aud claim must match.
|
|
142
|
+
# @param public_key [String, nil] PEM-encoded EC public key or JWK JSON.
|
|
143
|
+
# When set, skips remote JWKS fetching entirely.
|
|
144
|
+
# @param jwks_url [String, nil] Override the JWKS endpoint URL. Defaults
|
|
145
|
+
# to {DEFAULT_JWKS_URL}.
|
|
146
|
+
# @param header_name [String, nil] Header to read the token from.
|
|
147
|
+
# @return [UserTokenPayload]
|
|
148
|
+
# @raise [StandardError] on validation failure.
|
|
57
149
|
def self.verify_user_token!(
|
|
58
150
|
token_or_headers,
|
|
59
151
|
app_id: nil,
|
|
60
152
|
public_key: nil,
|
|
153
|
+
jwks_url: nil,
|
|
61
154
|
header_name: nil
|
|
62
155
|
)
|
|
63
156
|
token_string = get_user_token(token_or_headers, header_name: header_name)
|
|
@@ -69,33 +162,72 @@ module WhopSDK
|
|
|
69
162
|
ERROR
|
|
70
163
|
end
|
|
71
164
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
token_string,
|
|
78
|
-
key,
|
|
79
|
-
true,
|
|
80
|
-
algorithm: "ES256",
|
|
81
|
-
iss: "urn:whopcom:exp-proxy",
|
|
82
|
-
verify_iss: true
|
|
83
|
-
)
|
|
165
|
+
payload = if public_key
|
|
166
|
+
verify_with_static_key(token_string, public_key: public_key)
|
|
167
|
+
else
|
|
168
|
+
verify_with_remote_jwks(token_string, jwks_url: jwks_url || DEFAULT_JWKS_URL)
|
|
169
|
+
end
|
|
84
170
|
|
|
85
|
-
# Validate required fields
|
|
86
171
|
unless payload["sub"] && payload["aud"] && !payload["aud"].is_a?(Array)
|
|
87
172
|
raise StandardError, "Invalid user token provided to verifyUserToken"
|
|
88
173
|
end
|
|
89
174
|
|
|
90
|
-
# Validate app_id if provided
|
|
91
175
|
if app_id && payload["aud"] != app_id
|
|
92
176
|
raise StandardError, "Invalid app id provided to verifyUserToken"
|
|
93
177
|
end
|
|
94
178
|
|
|
95
|
-
UserTokenPayload.new(
|
|
96
|
-
|
|
97
|
-
|
|
179
|
+
UserTokenPayload.new(user_id: payload["sub"], app_id: payload["aud"])
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
# @api private
|
|
183
|
+
def self.verify_with_static_key(token_string, public_key:)
|
|
184
|
+
key = import_static_key(public_key)
|
|
185
|
+
decoded_payload, = JWT.decode(
|
|
186
|
+
token_string,
|
|
187
|
+
key,
|
|
188
|
+
true,
|
|
189
|
+
algorithm: TOKEN_ALGORITHM,
|
|
190
|
+
iss: TOKEN_ISSUER,
|
|
191
|
+
verify_iss: true
|
|
192
|
+
)
|
|
193
|
+
decoded_payload
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
# @api private
|
|
197
|
+
def self.verify_with_remote_jwks(token_string, jwks_url:)
|
|
198
|
+
remote = remote_jwks_for(jwks_url)
|
|
199
|
+
|
|
200
|
+
# ruby-jwt calls the loader twice when the token's kid isn't found
|
|
201
|
+
# in the current set — once normally, then again with
|
|
202
|
+
# invalidate: true. The loader uses that signal to force a
|
|
203
|
+
# cooldown-guarded refresh, mirroring jose's remote JWKS behavior.
|
|
204
|
+
jwks_loader = ->(opts) { remote.jwk_set(force_refresh: opts[:invalidate]) }
|
|
205
|
+
|
|
206
|
+
decoded_payload, = JWT.decode(
|
|
207
|
+
token_string,
|
|
208
|
+
nil,
|
|
209
|
+
true,
|
|
210
|
+
algorithms: [TOKEN_ALGORITHM],
|
|
211
|
+
iss: TOKEN_ISSUER,
|
|
212
|
+
verify_iss: true,
|
|
213
|
+
jwks: jwks_loader,
|
|
214
|
+
# Legacy tokens (pre-kid rollout) have no kid header. Let
|
|
215
|
+
# ruby-jwt fall back to the first key in the set for those.
|
|
216
|
+
allow_nil_kid: true
|
|
98
217
|
)
|
|
218
|
+
decoded_payload
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
# @api private
|
|
222
|
+
def self.import_static_key(public_key)
|
|
223
|
+
stripped = public_key.to_s.strip
|
|
224
|
+
if stripped.start_with?("-----BEGIN")
|
|
225
|
+
OpenSSL::PKey::EC.new(stripped)
|
|
226
|
+
else
|
|
227
|
+
JWT::JWK.new(JSON.parse(stripped)).verify_key
|
|
228
|
+
end
|
|
229
|
+
rescue JSON::ParserError, OpenSSL::PKey::ECError => e
|
|
230
|
+
raise StandardError, "Invalid public key provided to verifyUserToken: #{e.message}"
|
|
99
231
|
end
|
|
100
232
|
end
|
|
101
233
|
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module WhopSDK
|
|
4
|
+
module Models
|
|
5
|
+
# @see WhopSDK::Resources::AdCampaigns#list
|
|
6
|
+
class AdCampaignListParams < WhopSDK::Internal::Type::BaseModel
|
|
7
|
+
extend WhopSDK::Internal::Type::RequestParameters::Converter
|
|
8
|
+
include WhopSDK::Internal::Type::RequestParameters
|
|
9
|
+
|
|
10
|
+
# @!attribute company_id
|
|
11
|
+
# The unique identifier of the company to list ad campaigns for.
|
|
12
|
+
#
|
|
13
|
+
# @return [String]
|
|
14
|
+
required :company_id, String
|
|
15
|
+
|
|
16
|
+
# @!attribute after
|
|
17
|
+
# Returns the elements in the list that come after the specified cursor.
|
|
18
|
+
#
|
|
19
|
+
# @return [String, nil]
|
|
20
|
+
optional :after, String, nil?: true
|
|
21
|
+
|
|
22
|
+
# @!attribute before
|
|
23
|
+
# Returns the elements in the list that come before the specified cursor.
|
|
24
|
+
#
|
|
25
|
+
# @return [String, nil]
|
|
26
|
+
optional :before, String, nil?: true
|
|
27
|
+
|
|
28
|
+
# @!attribute created_after
|
|
29
|
+
# Only return ad campaigns created after this timestamp.
|
|
30
|
+
#
|
|
31
|
+
# @return [Time, nil]
|
|
32
|
+
optional :created_after, Time, nil?: true
|
|
33
|
+
|
|
34
|
+
# @!attribute created_before
|
|
35
|
+
# Only return ad campaigns created before this timestamp.
|
|
36
|
+
#
|
|
37
|
+
# @return [Time, nil]
|
|
38
|
+
optional :created_before, Time, nil?: true
|
|
39
|
+
|
|
40
|
+
# @!attribute first
|
|
41
|
+
# Returns the first _n_ elements from the list.
|
|
42
|
+
#
|
|
43
|
+
# @return [Integer, nil]
|
|
44
|
+
optional :first, Integer, nil?: true
|
|
45
|
+
|
|
46
|
+
# @!attribute last
|
|
47
|
+
# Returns the last _n_ elements from the list.
|
|
48
|
+
#
|
|
49
|
+
# @return [Integer, nil]
|
|
50
|
+
optional :last, Integer, nil?: true
|
|
51
|
+
|
|
52
|
+
# @!attribute query
|
|
53
|
+
# Case-insensitive substring match against the campaign title.
|
|
54
|
+
#
|
|
55
|
+
# @return [String, nil]
|
|
56
|
+
optional :query, String, nil?: true
|
|
57
|
+
|
|
58
|
+
# @!attribute status
|
|
59
|
+
# The status of an ad campaign.
|
|
60
|
+
#
|
|
61
|
+
# @return [Symbol, WhopSDK::Models::AdCampaignListParams::Status, nil]
|
|
62
|
+
optional :status, enum: -> { WhopSDK::AdCampaignListParams::Status }, nil?: true
|
|
63
|
+
|
|
64
|
+
# @!method initialize(company_id:, after: nil, before: nil, created_after: nil, created_before: nil, first: nil, last: nil, query: nil, status: nil, request_options: {})
|
|
65
|
+
# @param company_id [String] The unique identifier of the company to list ad campaigns for.
|
|
66
|
+
#
|
|
67
|
+
# @param after [String, nil] Returns the elements in the list that come after the specified cursor.
|
|
68
|
+
#
|
|
69
|
+
# @param before [String, nil] Returns the elements in the list that come before the specified cursor.
|
|
70
|
+
#
|
|
71
|
+
# @param created_after [Time, nil] Only return ad campaigns created after this timestamp.
|
|
72
|
+
#
|
|
73
|
+
# @param created_before [Time, nil] Only return ad campaigns created before this timestamp.
|
|
74
|
+
#
|
|
75
|
+
# @param first [Integer, nil] Returns the first _n_ elements from the list.
|
|
76
|
+
#
|
|
77
|
+
# @param last [Integer, nil] Returns the last _n_ elements from the list.
|
|
78
|
+
#
|
|
79
|
+
# @param query [String, nil] Case-insensitive substring match against the campaign title.
|
|
80
|
+
#
|
|
81
|
+
# @param status [Symbol, WhopSDK::Models::AdCampaignListParams::Status, nil] The status of an ad campaign.
|
|
82
|
+
#
|
|
83
|
+
# @param request_options [WhopSDK::RequestOptions, Hash{Symbol=>Object}]
|
|
84
|
+
|
|
85
|
+
# The status of an ad campaign.
|
|
86
|
+
module Status
|
|
87
|
+
extend WhopSDK::Internal::Type::Enum
|
|
88
|
+
|
|
89
|
+
ACTIVE = :active
|
|
90
|
+
PAUSED = :paused
|
|
91
|
+
PAYMENT_FAILED = :payment_failed
|
|
92
|
+
DRAFT = :draft
|
|
93
|
+
IN_REVIEW = :in_review
|
|
94
|
+
FLAGGED = :flagged
|
|
95
|
+
|
|
96
|
+
# @!method self.values
|
|
97
|
+
# @return [Array<Symbol>]
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|