PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.6.1
4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Resources / EntitlementsResource.php
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Resources Last commit date
Concerns 3 months ago Contracts 3 months ago Credit 3 months ago EntitlementsResource.php 3 months ago LicensesResource.php 3 months ago ProductsResource.php 3 months ago TokensResource.php 3 months ago
EntitlementsResource.php
241 lines
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Resources;
4
5 use JsonException;
6 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\Contracts\ApiErrorExceptionInterface;
7 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\MissingAuthenticationException;
8 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\UnexpectedResponseException;
9 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\AuthState;
10 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\Factories\ApiUriFactory;
11 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestBuilder;
12 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestExecutor;
13 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestHeaderCollection;
14 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Entitlement\SwitchTier as SwitchTierRequest;
15 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Entitlement\Upsert as UpsertRequest;
16 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsAuthState;
17 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsRequestHeaderCollection;
18 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\EntitlementsResourceInterface;
19 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\Cancel;
20 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\Delete;
21 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\Suspend;
22 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\SwitchTier as SwitchTierResponse;
23 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\Unsuspend;
24 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Entitlement\Upsert as UpsertResponse;
25 use Give\Vendors\Psr\Http\Client\ClientExceptionInterface;
26
27 /**
28 * Provides operations for the entitlements API resource.
29 *
30 * @phpstan-import-type JsonObject from RequestBuilder
31 * @phpstan-type EntitlementStatusPayload array{
32 * product_slug: string,
33 * tier: string,
34 * status: string
35 * }
36 * @phpstan-type UpsertPayload array{
37 * license_key: string,
38 * products: list<array{
39 * product_slug: string,
40 * tier: string,
41 * status: string
42 * }>
43 * }
44 * @phpstan-type DeletePayload array{
45 * deleted: bool
46 * }
47 * @phpstan-type SwitchTierPayload array{
48 * product_slug: string,
49 * from_tier: string,
50 * to_tier: string,
51 * status: string,
52 * site_limit: int,
53 * active_count: int,
54 * over_limit: bool
55 * }
56 */
57 final class EntitlementsResource implements EntitlementsResourceInterface
58 {
59 use RebindsAuthState;
60 use RebindsRequestHeaderCollection;
61
62 private RequestExecutor $requestExecutor;
63
64 private ApiUriFactory $apiUriFactory;
65
66 private AuthState $authState;
67
68 private RequestHeaderCollection $requestHeaderCollection;
69
70 public function __construct(
71 RequestExecutor $requestExecutor,
72 ApiUriFactory $apiUriFactory,
73 AuthState $authState,
74 RequestHeaderCollection $requestHeaderCollection
75 ) {
76 $this->requestExecutor = $requestExecutor;
77 $this->apiUriFactory = $apiUriFactory;
78 $this->authState = $authState;
79 $this->requestHeaderCollection = $requestHeaderCollection;
80 }
81
82 /**
83 * @throws ApiErrorExceptionInterface
84 * @throws MissingAuthenticationException
85 * @throws UnexpectedResponseException
86 * @throws ClientExceptionInterface
87 * @throws JsonException
88 */
89 public function upsert(UpsertRequest $request): UpsertResponse {
90 /** @var JsonObject $body */
91 $body = $request->toArray();
92
93 $result = $this->requestExecutor->executeJson(
94 'POST',
95 $this->apiUriFactory->make('/entitlements'),
96 [],
97 $body,
98 $this->authState->requiredToken(),
99 $this->requestHeaderCollection->all()
100 );
101
102 /** @var UpsertPayload $result */
103 return UpsertResponse::from($result);
104 }
105
106 /**
107 * @throws ApiErrorExceptionInterface
108 * @throws MissingAuthenticationException
109 * @throws UnexpectedResponseException
110 * @throws ClientExceptionInterface
111 * @throws JsonException
112 */
113 public function switchTier(SwitchTierRequest $request): SwitchTierResponse {
114 /** @var JsonObject $body */
115 $body = $request->toArray();
116
117 $result = $this->requestExecutor->executeJson(
118 'POST',
119 $this->apiUriFactory->make('/entitlements/switch-tier'),
120 [],
121 $body,
122 $this->authState->requiredToken(),
123 $this->requestHeaderCollection->all()
124 );
125
126 /** @var SwitchTierPayload $result */
127 return SwitchTierResponse::from($result);
128 }
129
130 /**
131 * @throws ApiErrorExceptionInterface
132 * @throws MissingAuthenticationException
133 * @throws UnexpectedResponseException
134 * @throws ClientExceptionInterface
135 * @throws JsonException
136 */
137 public function suspend(string $licenseKey, string $productSlug, string $tier): Suspend {
138 $result = $this->requestExecutor->executeJson(
139 'POST',
140 $this->apiUriFactory->make('/entitlements/suspend'),
141 [],
142 [
143 'license_key' => $licenseKey,
144 'product_slug' => $productSlug,
145 'tier' => $tier,
146 ],
147 $this->authState->requiredToken(),
148 $this->requestHeaderCollection->all()
149 );
150
151 /** @var EntitlementStatusPayload $result */
152 return Suspend::from($result);
153 }
154
155 /**
156 * @throws ApiErrorExceptionInterface
157 * @throws MissingAuthenticationException
158 * @throws UnexpectedResponseException
159 * @throws ClientExceptionInterface
160 * @throws JsonException
161 */
162 public function unsuspend(string $licenseKey, string $productSlug, string $tier): Unsuspend {
163 $result = $this->requestExecutor->executeJson(
164 'POST',
165 $this->apiUriFactory->make('/entitlements/unsuspend'),
166 [],
167 [
168 'license_key' => $licenseKey,
169 'product_slug' => $productSlug,
170 'tier' => $tier,
171 ],
172 $this->authState->requiredToken(),
173 $this->requestHeaderCollection->all()
174 );
175
176 /** @var EntitlementStatusPayload $result */
177 return Unsuspend::from($result);
178 }
179
180 /**
181 * @throws ApiErrorExceptionInterface
182 * @throws MissingAuthenticationException
183 * @throws UnexpectedResponseException
184 * @throws ClientExceptionInterface
185 * @throws JsonException
186 */
187 public function cancel(string $licenseKey, string $productSlug, string $tier, ?string $reason = null): Cancel {
188 $body = array_filter([
189 'license_key' => $licenseKey,
190 'product_slug' => $productSlug,
191 'tier' => $tier,
192 'reason' => $reason,
193 ], static fn ($value): bool => $value !== null);
194
195 $result = $this->requestExecutor->executeJson(
196 'POST',
197 $this->apiUriFactory->make('/entitlements/cancel'),
198 [],
199 $body,
200 $this->authState->requiredToken(),
201 $this->requestHeaderCollection->all()
202 );
203
204 /** @var EntitlementStatusPayload $result */
205 return Cancel::from($result);
206 }
207
208 /**
209 * @throws ApiErrorExceptionInterface
210 * @throws MissingAuthenticationException
211 * @throws UnexpectedResponseException
212 * @throws ClientExceptionInterface
213 * @throws JsonException
214 */
215 public function delete(string $licenseKey, string $productSlug, string $tier): Delete {
216 $result = $this->requestExecutor->executeJson(
217 'DELETE',
218 $this->apiUriFactory->make('/entitlements'),
219 [],
220 [
221 'license_key' => $licenseKey,
222 'product_slug' => $productSlug,
223 'tier' => $tier,
224 ],
225 $this->authState->requiredToken(),
226 $this->requestHeaderCollection->all()
227 );
228
229 /** @var DeletePayload $result */
230 return Delete::from($result);
231 }
232
233 protected function rebindWithAuthState(AuthState $authState): self {
234 return new self($this->requestExecutor, $this->apiUriFactory, $authState, $this->requestHeaderCollection);
235 }
236
237 protected function rebindWithRequestHeaderCollection(RequestHeaderCollection $requestHeaderCollection): self {
238 return new self($this->requestExecutor, $this->apiUriFactory, $this->authState, $requestHeaderCollection);
239 }
240 }
241