PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.7.2
Jetpack – WP Security, Backup, Speed, & Growth v13.7.2
12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / extensions / store / wordpress-com / actions.ts
jetpack / extensions / store / wordpress-com Last commit date
actions.ts 2 years ago constants.ts 2 years ago index.ts 2 years ago reducer.ts 2 years ago types.ts 2 years ago
actions.ts
196 lines
1 /**
2 * External dependencies
3 */
4 import apiFetch from '@wordpress/api-fetch';
5 /**
6 * Types & Constants
7 */
8 import {
9 ACTION_DECREASE_NEW_ASYNC_REQUEST_COUNTDOWN,
10 ACTION_DEQUEUE_ASYNC_REQUEST,
11 ACTION_ENQUEUE_ASYNC_REQUEST,
12 ACTION_FETCH_FROM_API,
13 ACTION_INCREASE_AI_ASSISTANT_REQUESTS_COUNT,
14 ACTION_REQUEST_AI_ASSISTANT_FEATURE,
15 ACTION_SET_PLANS,
16 ACTION_SET_AI_ASSISTANT_FEATURE_REQUIRE_UPGRADE,
17 ACTION_STORE_AI_ASSISTANT_FEATURE,
18 ENDPOINT_AI_ASSISTANT_FEATURE,
19 NEW_ASYNC_REQUEST_TIMER_INTERVAL,
20 ACTION_SET_TIER_PLANS_ENABLED,
21 } from './constants';
22 import type { Plan } from './types';
23 import type { AiFeatureProps } from './types';
24 import type { SiteAIAssistantFeatureEndpointResponseProps } from '../../types';
25
26 /**
27 * Map the response from the `sites/$site/ai-assistant-feature`
28 * endpoint to the AI Assistant feature props.
29 * @param { SiteAIAssistantFeatureEndpointResponseProps } response - The response from the endpoint.
30 * @returns { AiFeatureProps } The AI Assistant feature props.
31 */
32 export function mapAiFeatureResponseToAiFeatureProps(
33 response: SiteAIAssistantFeatureEndpointResponseProps
34 ): AiFeatureProps {
35 return {
36 hasFeature: !! response[ 'has-feature' ],
37 isOverLimit: !! response[ 'is-over-limit' ],
38 requestsCount: response[ 'requests-count' ],
39 requestsLimit: response[ 'requests-limit' ],
40 requireUpgrade: !! response[ 'site-require-upgrade' ],
41 errorMessage: response[ 'error-message' ],
42 errorCode: response[ 'error-code' ],
43 upgradeType: response[ 'upgrade-type' ],
44 usagePeriod: {
45 currentStart: response[ 'usage-period' ]?.[ 'current-start' ],
46 nextStart: response[ 'usage-period' ]?.[ 'next-start' ],
47 requestsCount: response[ 'usage-period' ]?.[ 'requests-count' ] || 0,
48 },
49 currentTier: response[ 'current-tier' ],
50 nextTier: response[ 'next-tier' ],
51 tierPlansEnabled: !! response[ 'tier-plans-enabled' ],
52 costs: response.costs,
53 };
54 }
55
56 const actions = {
57 setPlans( plans: Array< Plan > ) {
58 return {
59 type: ACTION_SET_PLANS,
60 plans,
61 };
62 },
63
64 fetchFromAPI( url: string ) {
65 return {
66 type: ACTION_FETCH_FROM_API,
67 url,
68 };
69 },
70
71 storeAiAssistantFeature( feature: AiFeatureProps ) {
72 return {
73 type: ACTION_STORE_AI_ASSISTANT_FEATURE,
74 feature,
75 };
76 },
77
78 /**
79 * Thunk action to fetch the AI Assistant feature from the API.
80 *
81 * @returns {Function} The thunk action.
82 */
83 fetchAiAssistantFeature() {
84 return async ( { dispatch } ) => {
85 // Dispatch isFetching action.
86 dispatch( { type: ACTION_REQUEST_AI_ASSISTANT_FEATURE } );
87
88 try {
89 const response: SiteAIAssistantFeatureEndpointResponseProps = await apiFetch( {
90 path: ENDPOINT_AI_ASSISTANT_FEATURE,
91 } );
92
93 // Store the feature in the store.
94 dispatch(
95 actions.storeAiAssistantFeature( mapAiFeatureResponseToAiFeatureProps( response ) )
96 );
97 } catch ( err ) {
98 // @todo: Handle error.
99 console.error( err ); // eslint-disable-line no-console
100 }
101 };
102 },
103
104 /**
105 * This thunk action is used to increase
106 * the requests count for the current usage period.
107 * @param {number} count - The number of requests to increase. Default is 1.
108 * @returns {Function} The thunk action.
109 */
110 increaseAiAssistantRequestsCount( count: number = 1 ) {
111 return ( { dispatch } ) => {
112 dispatch( {
113 type: ACTION_INCREASE_AI_ASSISTANT_REQUESTS_COUNT,
114 count,
115 } );
116
117 // Every time the requests count is increased, decrease the countdown
118 dispatch( actions.decreaseAsyncRequestCountdownValue() );
119 };
120 },
121
122 /**
123 * This thunk action is used to decrease
124 * the countdown value for the new async request.
125 * When the countdown reaches 0, enqueue a new async request.
126 *
127 * @returns {Function} The thunk action.
128 */
129 decreaseAsyncRequestCountdownValue() {
130 return async ( { dispatch, select } ) => {
131 dispatch( { type: ACTION_DECREASE_NEW_ASYNC_REQUEST_COUNTDOWN } );
132
133 const asyncCoundown = select.getAsyncRequestCountdownValue();
134 if ( asyncCoundown <= 0 ) {
135 dispatch( actions.enqueueAiAssistantFeatureAsyncRequest() );
136 }
137 };
138 },
139
140 /**
141 * This thunk action is used to enqueue a new async request.
142 * If already exist an enqueue request, clear it and enqueue a new one.
143 *
144 * @returns {Function} The thunk action.
145 */
146 enqueueAiAssistantFeatureAsyncRequest() {
147 return ( { dispatch } ) => {
148 // Check if there is already a timer running
149 dispatch.dequeueAiAssistantFeatureAsyncRequest();
150
151 const contdownTimerId = setTimeout( () => {
152 dispatch( actions.fetchAiAssistantFeature() );
153 }, NEW_ASYNC_REQUEST_TIMER_INTERVAL ); // backend process requires a delay to be able to see the new value
154
155 dispatch( { type: ACTION_ENQUEUE_ASYNC_REQUEST, timerId: contdownTimerId } );
156 };
157 },
158
159 /**
160 * This thunk action is used to dequeue a new async request.
161 * It will clear the timer if there is one,
162 * canceling the enqueue async request.
163 *
164 * @returns {Function} The thunk action.
165 */
166 dequeueAiAssistantFeatureAsyncRequest() {
167 return ( { dispatch, select } ) => {
168 dispatch( { type: ACTION_DEQUEUE_ASYNC_REQUEST, timerId: 0 } );
169
170 const timerId = select.getAsyncRequestCountdownTimerId();
171 // If there is no timer, there is nothing to clear
172 if ( ! timerId ) {
173 return;
174 }
175
176 window?.clearTimeout( timerId );
177 };
178 },
179
180 setAiAssistantFeatureRequireUpgrade( requireUpgrade: boolean = true ) {
181 return {
182 type: ACTION_SET_AI_ASSISTANT_FEATURE_REQUIRE_UPGRADE,
183 requireUpgrade,
184 };
185 },
186
187 setTierPlansEnabled( tierPlansEnabled: boolean = true ) {
188 return {
189 type: ACTION_SET_TIER_PLANS_ENABLED,
190 tierPlansEnabled,
191 };
192 },
193 };
194
195 export default actions;
196