PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 1 month ago analyticsApi.js 1 month ago classnames.js 1 month ago dateUtils.js 1 month ago formatters.js 1 month ago helpers.js 1 month ago icons.js 1 month ago index.js 1 month ago pluginUtils.js 1 month ago transformers.js 1 month ago viewportBoundary.js 1 month 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