@bunizao/contracts 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -206,3 +206,156 @@ export interface BlogAnalyticsArticleDetailResult {
206
206
  countries: BlogAnalyticsBreakdown[];
207
207
  scrollBuckets: BlogAnalyticsScrollBucket[];
208
208
  }
209
+ export declare const SITE_ANALYTICS_COLLECT_ENDPOINT: '/api/analytics/collect';
210
+ export declare const SITE_ANALYTICS_REPORT_ENDPOINT: '/api/analytics/site';
211
+ export declare const SITE_ANALYTICS_ENGAGED_DWELL_MS = 10000;
212
+ export declare const SITE_ANALYTICS_SESSION_IDLE_MS: number;
213
+ export declare const SITE_ANALYTICS_SURFACES: readonly ['home', 'legacy', 'not_found', 'blog_index', 'blog_tags', 'blog_tag', 'blog_post', 'mood_feed', 'mood_post', 'mood_embed', 'projects', 'message', 'privacy', 'subscribe_manage', 'reader', 'docs', 'components', 'other'];
214
+ export type SiteAnalyticsSurface = typeof SITE_ANALYTICS_SURFACES[number];
215
+ export type SiteAnalyticsClickKind = 'link_internal' | 'link_outbound' | 'button' | 'panel';
216
+ export type SiteAnalyticsTrafficClass = 'human' | 'bot' | 'owner';
217
+ export interface SiteAnalyticsClick {
218
+ name: string;
219
+ kind: SiteAnalyticsClickKind;
220
+ href: string;
221
+ region: string;
222
+ label: string;
223
+ position: number;
224
+ tMs: number;
225
+ }
226
+ export interface SiteAnalyticsCollectInput {
227
+ v: 1;
228
+ viewId: string;
229
+ visitorId: string;
230
+ sessionId: string;
231
+ seq: number;
232
+ owner?: true;
233
+ page: {
234
+ surface: SiteAnalyticsSurface;
235
+ entity: string;
236
+ path: string;
237
+ locale: string;
238
+ referrer: string;
239
+ utm: [string, string, string];
240
+ };
241
+ client: {
242
+ tz: string;
243
+ langs: string[];
244
+ vw: number;
245
+ vh: number;
246
+ dpr: number;
247
+ navType: 0 | 1 | 2 | 3;
248
+ isEntry: boolean;
249
+ isNewVisitor: boolean;
250
+ webdriver: boolean;
251
+ };
252
+ progress: {
253
+ dwellMs: number;
254
+ scrollDepth: number;
255
+ interactions: number;
256
+ firstInputMs: number;
257
+ hiddenCount: number;
258
+ metric1: number;
259
+ metric2: number;
260
+ };
261
+ clicks: SiteAnalyticsClick[];
262
+ }
263
+ export declare const SITE_ANALYTICS_REPORTS: readonly ['overview', 'pages', 'clicks', 'sources', 'audience', 'quality', 'log', 'visitor'];
264
+ export type SiteAnalyticsReportName = typeof SITE_ANALYTICS_REPORTS[number];
265
+ export interface SiteAnalyticsMetrics {
266
+ views: number;
267
+ engaged: number;
268
+ visitors: number;
269
+ sessions: number;
270
+ bounces: number;
271
+ entries: number;
272
+ exits: number;
273
+ reads: number;
274
+ completions: number;
275
+ clicks: number;
276
+ medianDwellMs: number;
277
+ scrollDepth: number;
278
+ metric1: number;
279
+ metric2: number;
280
+ }
281
+ export interface SiteAnalyticsPageRow extends SiteAnalyticsMetrics {
282
+ day: string;
283
+ surface: string;
284
+ entity: string;
285
+ }
286
+ export interface SiteAnalyticsClickRow {
287
+ day: string;
288
+ surface: string;
289
+ entity: string;
290
+ name: string;
291
+ href: string;
292
+ clicks: number;
293
+ visitors: number;
294
+ medianTimeMs: number | null;
295
+ clickThrough: number;
296
+ }
297
+ export interface SiteAnalyticsDimensionRow {
298
+ day: string;
299
+ surface: string;
300
+ dim: string;
301
+ key: string;
302
+ views: number;
303
+ visitors: number;
304
+ engaged: number;
305
+ dwellMsSum: number;
306
+ }
307
+ export interface SiteAnalyticsTrafficRow {
308
+ day: string;
309
+ surface: string;
310
+ class: SiteAnalyticsTrafficClass;
311
+ reason: string;
312
+ views: number;
313
+ visitors: number;
314
+ }
315
+ export interface SiteAnalyticsViewRecord {
316
+ viewId: string;
317
+ visitorId: string;
318
+ sessionId: string;
319
+ startedAt: string;
320
+ updatedAt: string;
321
+ class: SiteAnalyticsTrafficClass;
322
+ reason: string;
323
+ weight: number;
324
+ page: SiteAnalyticsCollectInput['page'];
325
+ client: SiteAnalyticsCollectInput['client'];
326
+ progress: SiteAnalyticsCollectInput['progress'];
327
+ clicks: SiteAnalyticsClick[];
328
+ country: string;
329
+ region: string;
330
+ city: string;
331
+ ip: string;
332
+ ua: string;
333
+ browser: string;
334
+ os: string;
335
+ device: string;
336
+ platform: string;
337
+ network: string;
338
+ refSource: string;
339
+ refHost: string;
340
+ clickCount: number;
341
+ }
342
+ export interface SiteAnalyticsReportResult {
343
+ report: SiteAnalyticsReportName;
344
+ from: string;
345
+ to: string;
346
+ timezone: 'Australia/Melbourne';
347
+ sampled: boolean;
348
+ visitors: number | null;
349
+ visitorBasis: 'distinct' | 'sampled_distinct' | 'sum_monthly' | 'unavailable';
350
+ pages: SiteAnalyticsPageRow[];
351
+ clicks: SiteAnalyticsClickRow[];
352
+ dimensions: SiteAnalyticsDimensionRow[];
353
+ traffic: SiteAnalyticsTrafficRow[];
354
+ events: SiteAnalyticsViewRecord[];
355
+ nextCursor: string | null;
356
+ rum: Array<{
357
+ surface: string;
358
+ loads: number;
359
+ }> | null;
360
+ notices: string[];
361
+ }
package/dist/analytics.js CHANGED
@@ -10,6 +10,31 @@ var BLOG_ANALYTICS_EVENTS_DEFAULT_LIMIT = 50;
10
10
  var BLOG_ANALYTICS_READ_THRESHOLD_MS = 5000;
11
11
  var BLOG_ANALYTICS_COMPLETION_SCROLL_DEPTH = 0.9;
12
12
  var BLOG_ANALYTICS_RANGE_OPTIONS = [7, 30, 90];
13
+ var SITE_ANALYTICS_COLLECT_ENDPOINT = "/api/analytics/collect";
14
+ var SITE_ANALYTICS_REPORT_ENDPOINT = "/api/analytics/site";
15
+ var SITE_ANALYTICS_ENGAGED_DWELL_MS = 1e4;
16
+ var SITE_ANALYTICS_SESSION_IDLE_MS = 30 * 60000;
17
+ var SITE_ANALYTICS_SURFACES = [
18
+ "home",
19
+ "legacy",
20
+ "not_found",
21
+ "blog_index",
22
+ "blog_tags",
23
+ "blog_tag",
24
+ "blog_post",
25
+ "mood_feed",
26
+ "mood_post",
27
+ "mood_embed",
28
+ "projects",
29
+ "message",
30
+ "privacy",
31
+ "subscribe_manage",
32
+ "reader",
33
+ "docs",
34
+ "components",
35
+ "other"
36
+ ];
37
+ var SITE_ANALYTICS_REPORTS = ["overview", "pages", "clicks", "sources", "audience", "quality", "log", "visitor"];
13
38
  export {
14
39
  BLOG_ANALYTICS_ARTICLE_ENDPOINT,
15
40
  BLOG_ANALYTICS_COMPLETION_SCROLL_DEPTH,
@@ -21,5 +46,11 @@ export {
21
46
  BLOG_ANALYTICS_SUMMARY_ENDPOINT,
22
47
  LISTENING_ANALYTICS_EVENT_ENDPOINT,
23
48
  NEWSLETTER_ANALYTICS_CLICK_ENDPOINT,
24
- NEWSLETTER_ANALYTICS_OPEN_ENDPOINT
49
+ NEWSLETTER_ANALYTICS_OPEN_ENDPOINT,
50
+ SITE_ANALYTICS_COLLECT_ENDPOINT,
51
+ SITE_ANALYTICS_ENGAGED_DWELL_MS,
52
+ SITE_ANALYTICS_REPORTS,
53
+ SITE_ANALYTICS_REPORT_ENDPOINT,
54
+ SITE_ANALYTICS_SESSION_IDLE_MS,
55
+ SITE_ANALYTICS_SURFACES
25
56
  };
package/dist/index.js CHANGED
@@ -10,6 +10,31 @@ var BLOG_ANALYTICS_EVENTS_DEFAULT_LIMIT = 50;
10
10
  var BLOG_ANALYTICS_READ_THRESHOLD_MS = 5000;
11
11
  var BLOG_ANALYTICS_COMPLETION_SCROLL_DEPTH = 0.9;
12
12
  var BLOG_ANALYTICS_RANGE_OPTIONS = [7, 30, 90];
13
+ var SITE_ANALYTICS_COLLECT_ENDPOINT = "/api/analytics/collect";
14
+ var SITE_ANALYTICS_REPORT_ENDPOINT = "/api/analytics/site";
15
+ var SITE_ANALYTICS_ENGAGED_DWELL_MS = 1e4;
16
+ var SITE_ANALYTICS_SESSION_IDLE_MS = 30 * 60000;
17
+ var SITE_ANALYTICS_SURFACES = [
18
+ "home",
19
+ "legacy",
20
+ "not_found",
21
+ "blog_index",
22
+ "blog_tags",
23
+ "blog_tag",
24
+ "blog_post",
25
+ "mood_feed",
26
+ "mood_post",
27
+ "mood_embed",
28
+ "projects",
29
+ "message",
30
+ "privacy",
31
+ "subscribe_manage",
32
+ "reader",
33
+ "docs",
34
+ "components",
35
+ "other"
36
+ ];
37
+ var SITE_ANALYTICS_REPORTS = ["overview", "pages", "clicks", "sources", "audience", "quality", "log", "visitor"];
13
38
  // src/admin.ts
14
39
  var ADMIN_COMMENT_REJECT_REASONS = ["spam", "promotional", "abuse", "off_topic", "personal_info"];
15
40
  var ADMIN_ACTIVITY_EVENTS = [
@@ -320,6 +345,12 @@ export {
320
345
  READER_RESEND_PATH,
321
346
  READER_VERIFY_OUTCOMES,
322
347
  READER_VERIFY_PATH,
348
+ SITE_ANALYTICS_COLLECT_ENDPOINT,
349
+ SITE_ANALYTICS_ENGAGED_DWELL_MS,
350
+ SITE_ANALYTICS_REPORTS,
351
+ SITE_ANALYTICS_REPORT_ENDPOINT,
352
+ SITE_ANALYTICS_SESSION_IDLE_MS,
353
+ SITE_ANALYTICS_SURFACES,
323
354
  SUBSCRIPTION_SOURCES,
324
355
  TELEGRAM_OPS_BASE_PATH,
325
356
  TELEGRAM_OPS_BROADCASTS_PATH,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bunizao/contracts",
3
- "version": "0.13.0",
3
+ "version": "0.14.0",
4
4
  "description": "Shared TypeScript contracts for buxx.me services and clients.",
5
5
  "type": "module",
6
6
  "sideEffects": false,