PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.6.1
GiveWP – Donation Plugin and Fundraising Platform v4.16.6.1
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 / CreditsLedgerResource.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
CreditsLedgerResource.php
146 lines
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Resources\Credit;
4
5 use Generator;
6 use JsonException;
7 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\Contracts\ApiErrorExceptionInterface;
8 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\MissingAuthenticationException;
9 use Give\Vendors\LiquidWeb\LicensingApiClient\Exceptions\UnexpectedResponseException;
10 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\AuthState;
11 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\Factories\ApiUriFactory;
12 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestExecutor;
13 use Give\Vendors\LiquidWeb\LicensingApiClient\Http\RequestHeaderCollection;
14 use Give\Vendors\LiquidWeb\LicensingApiClient\Requests\Credit\ListLedgerEntries;
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\Responses\Credit\LedgerPage;
19 use Give\Vendors\Psr\Http\Client\ClientExceptionInterface;
20
21 /**
22 * Provides operations for the credits ledger API resource.
23 *
24 * @phpstan-import-type ListLedgerEntriesQuery from ListLedgerEntries
25 * @phpstan-type LedgerEntryPayload array{
26 * id: int,
27 * pool_id: int,
28 * entitlement_id_at_event: int,
29 * tier_at_event: string,
30 * domain: string,
31 * product_slug: string,
32 * credit_type: string,
33 * entry_type: string,
34 * amount: int,
35 * period_start: string|null,
36 * idempotency_key: string,
37 * created_at: string
38 * }
39 * @phpstan-type LedgerPagePayload array{
40 * entries: list<LedgerEntryPayload>,
41 * links: array{
42 * first: string,
43 * last: string|null,
44 * prev: string|null,
45 * next: string|null
46 * },
47 * meta: array{
48 * page: array{
49 * total: int,
50 * limit: int,
51 * max_size: int
52 * }
53 * }
54 * }
55 */
56 final class CreditsLedgerResource implements CreditsLedgerResourceInterface
57 {
58 use RebindsAuthState;
59 use RebindsRequestHeaderCollection;
60
61 private RequestExecutor $requestExecutor;
62
63 private ApiUriFactory $apiUriFactory;
64
65 private AuthState $authState;
66
67 private RequestHeaderCollection $requestHeaderCollection;
68
69 public function __construct(
70 RequestExecutor $requestExecutor,
71 ApiUriFactory $apiUriFactory,
72 AuthState $authState,
73 RequestHeaderCollection $requestHeaderCollection
74 ) {
75 $this->requestExecutor = $requestExecutor;
76 $this->apiUriFactory = $apiUriFactory;
77 $this->authState = $authState;
78 $this->requestHeaderCollection = $requestHeaderCollection;
79 }
80
81 /**
82 * @throws ApiErrorExceptionInterface
83 * @throws MissingAuthenticationException
84 * @throws UnexpectedResponseException
85 * @throws ClientExceptionInterface
86 * @throws JsonException
87 */
88 public function list(ListLedgerEntries $request): LedgerPage {
89 /** @var ListLedgerEntriesQuery $query */
90 $query = $request->toQuery();
91
92 $result = $this->requestExecutor->executeJson(
93 'GET',
94 $this->apiUriFactory->make('/credits/ledger'),
95 $query,
96 null,
97 $this->authState->requiredToken(),
98 $this->requestHeaderCollection->all()
99 );
100
101 /** @var LedgerPagePayload $result */
102 return LedgerPage::from($result);
103 }
104
105 /**
106 * @throws ApiErrorExceptionInterface
107 * @throws MissingAuthenticationException
108 * @throws UnexpectedResponseException
109 * @throws ClientExceptionInterface
110 * @throws JsonException
111 *
112 * @return Generator<int, LedgerPage, mixed, void>
113 */
114 public function pages(ListLedgerEntries $request): Generator {
115 $page = $this->list($request);
116
117 while (true) {
118 yield $page;
119
120 if ($page->links->next === null) {
121 return;
122 }
123
124 $result = $this->requestExecutor->executeJson(
125 'GET',
126 $this->apiUriFactory->fromPaginationLink($page->links->next),
127 [],
128 null,
129 $this->authState->requiredToken(),
130 $this->requestHeaderCollection->all()
131 );
132
133 /** @var LedgerPagePayload $result */
134 $page = LedgerPage::from($result);
135 }
136 }
137
138 protected function rebindWithAuthState(AuthState $authState): self {
139 return new self($this->requestExecutor, $this->apiUriFactory, $authState, $this->requestHeaderCollection);
140 }
141
142 protected function rebindWithRequestHeaderCollection(RequestHeaderCollection $requestHeaderCollection): self {
143 return new self($this->requestExecutor, $this->apiUriFactory, $this->authState, $requestHeaderCollection);
144 }
145 }
146