PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6
GiveWP – Donation Plugin and Fundraising Platform v4.16.6
4.16.7.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 / Credit / CreditsResource.php
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Resources / Credit Last commit date
CreditsLedgerResource.php 3 months ago CreditsPoolsResource.php 3 months ago CreditsQuotasResource.php 3 months ago CreditsResource.php 3 months ago
CreditsResource.php
241 lines
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Credit;
4
5 use JsonException;
6 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\ApiResponseException;
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\RequestExecutor;
12 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestHeaderCollection;
13 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Credit\RecordUsage as RecordUsageRequest;
14 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Credit\Refund as RefundRequest;
15 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsAuthState;
16 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Concerns\RebindsRequestHeaderCollection;
17 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\CreditsLedgerResourceInterface;
18 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\CreditsPoolsResourceInterface;
19 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\CreditsQuotasResourceInterface;
20 use Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Contracts\CreditsResourceInterface;
21 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Credit\BalanceCollection;
22 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Credit\RecordUsage;
23 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Credit\Refund;
24 use Give\Vendors\Psr\Http\Client\ClientExceptionInterface;
25
26 /**
27 * Provides operations for the credits API resource.
28 *
29 * @phpstan-type BalancePayload array{
30 * credits: list<array{
31 * credit_type: string,
32 * remaining: int,
33 * site_quota: int|null,
34 * site_used: int,
35 * site_remaining: int,
36 * aggregate_total: int,
37 * aggregate_used: int,
38 * aggregate_remaining: int,
39 * aggregate_overage: int,
40 * pools: list<array{
41 * pool_id: int,
42 * pool_remaining: int,
43 * priority: int,
44 * period: string,
45 * resets_on: string|null,
46 * expires_at: string|null,
47 * credits_total?: int,
48 * credits_used?: int,
49 * overage?: int,
50 * overage_limit?: int|null
51 * }>
52 * }>
53 * }
54 * @phpstan-import-type RecordUsagePayload from RecordUsageRequest
55 * @phpstan-import-type RefundPayload from RefundRequest
56 * @phpstan-type RecordUsageResponsePayload array{
57 * credits_used: int,
58 * pool_remaining: int,
59 * site_remaining: int|null,
60 * pool_breakdown: array<array-key, int>
61 * }
62 * @phpstan-type RefundResponsePayload array{
63 * credits_refunded: int,
64 * pool_remaining: int,
65 * site_remaining: int|null,
66 * pool_breakdown: array<array-key, int>
67 * }
68 */
69 final class CreditsResource implements CreditsResourceInterface
70 {
71 use RebindsAuthState;
72 use RebindsRequestHeaderCollection;
73
74 private RequestExecutor $requestExecutor;
75
76 private ApiUriFactory $apiUriFactory;
77
78 private AuthState $authState;
79
80 private RequestHeaderCollection $requestHeaderCollection;
81
82 private CreditsPoolsResource $pools;
83
84 private CreditsQuotasResource $quotas;
85
86 private CreditsLedgerResource $ledger;
87
88 public function __construct(
89 RequestExecutor $requestExecutor,
90 ApiUriFactory $apiUriFactory,
91 AuthState $authState,
92 RequestHeaderCollection $requestHeaderCollection,
93 CreditsPoolsResource $pools,
94 CreditsQuotasResource $quotas,
95 CreditsLedgerResource $ledger
96 ) {
97 $this->requestExecutor = $requestExecutor;
98 $this->apiUriFactory = $apiUriFactory;
99 $this->authState = $authState;
100 $this->requestHeaderCollection = $requestHeaderCollection;
101 $this->pools = $pools;
102 $this->quotas = $quotas;
103 $this->ledger = $ledger;
104 }
105
106 /**
107 * @throws ApiResponseException
108 * @throws MissingAuthenticationException
109 * @throws UnexpectedResponseException
110 * @throws ClientExceptionInterface
111 * @throws JsonException
112 */
113 public function balance(string $licenseKey, string $domain, ?string $creditType = null, ?string $sort = null): BalanceCollection {
114 $result = $this->requestExecutor->executeJson(
115 'GET',
116 $this->apiUriFactory->make('/credits'),
117 array_filter([
118 'license_key' => $licenseKey,
119 'domain' => $domain,
120 'credit_type' => $creditType,
121 'sort' => $sort,
122 ], static fn ($value): bool => $value !== null),
123 null,
124 $this->authState->optionalToken(),
125 $this->requestHeaderCollection->all()
126 );
127
128 /** @var BalancePayload $result */
129 return BalanceCollection::from($result);
130 }
131
132 /**
133 * @throws ApiResponseException
134 * @throws MissingAuthenticationException
135 * @throws UnexpectedResponseException
136 * @throws ClientExceptionInterface
137 * @throws JsonException
138 */
139 public function recordUsage(RecordUsageRequest $request): RecordUsage {
140 /** @var RecordUsagePayload $body */
141 $body = $request->toArray();
142
143 $result = $this->requestExecutor->executeJson(
144 'POST',
145 $this->apiUriFactory->make('/credits/usage'),
146 [],
147 $body,
148 $this->authState->requiredToken(),
149 $this->requestHeaderCollection->merge([
150 'X-Idempotency-Key' => $request->idempotencyKey,
151 ])
152 );
153
154 /** @var RecordUsageResponsePayload $result */
155 return RecordUsage::from($result);
156 }
157
158 /**
159 * @throws ApiResponseException
160 * @throws MissingAuthenticationException
161 * @throws UnexpectedResponseException
162 * @throws ClientExceptionInterface
163 * @throws JsonException
164 */
165 public function refund(RefundRequest $request): Refund {
166 /** @var RefundPayload $body */
167 $body = $request->toArray();
168
169 $result = $this->requestExecutor->executeJson(
170 'POST',
171 $this->apiUriFactory->make('/credits/refunds'),
172 [],
173 $body,
174 $this->authState->requiredToken(),
175 $this->requestHeaderCollection->merge([
176 'X-Idempotency-Key' => $request->idempotencyKey,
177 ])
178 );
179
180 /** @var RefundResponsePayload $result */
181 return Refund::from($result);
182 }
183
184 /**
185 * @throws ApiResponseException
186 * @throws MissingAuthenticationException
187 * @throws UnexpectedResponseException
188 * @throws ClientExceptionInterface
189 * @throws JsonException
190 */
191 public function pools(): CreditsPoolsResourceInterface {
192 return $this->pools;
193 }
194
195 /**
196 * @throws ApiResponseException
197 * @throws MissingAuthenticationException
198 * @throws UnexpectedResponseException
199 * @throws ClientExceptionInterface
200 * @throws JsonException
201 */
202 public function quotas(): CreditsQuotasResourceInterface {
203 return $this->quotas;
204 }
205
206 /**
207 * @throws ApiResponseException
208 * @throws MissingAuthenticationException
209 * @throws UnexpectedResponseException
210 * @throws ClientExceptionInterface
211 * @throws JsonException
212 */
213 public function ledger(): CreditsLedgerResourceInterface {
214 return $this->ledger;
215 }
216
217 protected function rebindWithAuthState(AuthState $authState): self {
218 return new self(
219 $this->requestExecutor,
220 $this->apiUriFactory,
221 $authState,
222 $this->requestHeaderCollection,
223 $this->pools->withAuthState($authState),
224 $this->quotas->withAuthState($authState),
225 $this->ledger->withAuthState($authState)
226 );
227 }
228
229 protected function rebindWithRequestHeaderCollection(RequestHeaderCollection $requestHeaderCollection): self {
230 return new self(
231 $this->requestExecutor,
232 $this->apiUriFactory,
233 $this->authState,
234 $requestHeaderCollection,
235 $this->pools->withRequestHeaderCollection($requestHeaderCollection),
236 $this->quotas->withRequestHeaderCollection($requestHeaderCollection),
237 $this->ledger->withRequestHeaderCollection($requestHeaderCollection)
238 );
239 }
240 }
241