PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.3.2
Presto Player v4.3.2
4.3.2 4.3.1 4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / dashboard / utils / analyticsApi.js
presto-player / src / admin / dashboard / utils Last commit date
test 2 months ago analyticsApi.js 2 months ago classnames.js 2 months ago dateUtils.js 2 months ago formatters.js 2 months ago helpers.js 2 months ago icons.js 2 months ago index.js 2 months ago pluginUtils.js 2 months ago transformers.js 2 months ago viewportBoundary.js 2 months ago
analyticsApi.js
66 lines
1 import wpApiFetch from "@wordpress/api-fetch";
2
3 /**
4 * IMPORTANT — never call `.toISOString()` on user-picked dates here, and
5 * never pass a bare "yyyy-MM-dd" date string. Always run user-picked dates
6 * through `toAnalyticsDate()` from `./dateUtils` first. The REST endpoints
7 * declare every start/end arg as `format: date-time` and reject anything
8 * else with 400; `.toISOString()` also silently shifts midnight-local back
9 * to the previous UTC day, masking today's records for users east of UTC.
10 */
11
12 /**
13 * Fetches views analytics data for a given date range.
14 *
15 * @param {string} start - ISO date string for range start
16 * @param {string} end - ISO date string for range end
17 * @param {Object} [options] - Optional apiFetch options (e.g. { signal })
18 * @returns {Promise<{ total: number, chartData: Array }>}
19 */
20 export const fetchViews = async (start, end, options = {}) => {
21 const response = await wpApiFetch({
22 path: wp.url.addQueryArgs(window.prestoPlayer.api.analyticsViews, {
23 start,
24 end,
25 }),
26 parse: false,
27 ...options,
28 });
29
30 const chartData = await response.json();
31 const total = parseInt(response.headers?.get("X-WP-Total"), 10) || 0;
32
33 return { total, chartData: chartData || [] };
34 };
35
36 /**
37 * Fetches watch-time analytics data for a given date range.
38 *
39 * @param {string} start - ISO date string for range start
40 * @param {string} end - ISO date string for range end
41 * @param {Object} [options] - Optional apiFetch options (e.g. { signal })
42 * @returns {Promise<{ total: number, chartData: Array, average: number }>}
43 */
44 export const fetchWatchTime = async (start, end, options = {}) => {
45 const response = await wpApiFetch({
46 path: wp.url.addQueryArgs(window.prestoPlayer.api.analyticsWatchTime, {
47 start,
48 end,
49 }),
50 parse: false,
51 ...options,
52 });
53
54 const responseData = await response.json();
55 const chartData = responseData?.data || [];
56 // Watch-time endpoint doesn't provide X-WP-Total header (unlike views),
57 // so total must be computed client-side.
58 const total = chartData.reduce(
59 (sum, item) => sum + (parseInt(item.total, 10) || 0),
60 0
61 );
62 const average = parseFloat(responseData?.average) || 0;
63
64 return { total, chartData, average };
65 };
66