@hexclave/shared 1.0.14 → 1.0.15
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.
- package/dist/apps/apps-config.d.ts +6 -0
- package/dist/apps/apps-config.js +6 -0
- package/dist/apps/apps-config.js.map +1 -1
- package/dist/config/schema.d.ts +68 -68
- package/dist/config-authoring.d.ts.map +1 -1
- package/dist/config-authoring.js.map +1 -1
- package/dist/config-authoring.test.js +1 -1
- package/dist/config-authoring.test.js.map +1 -1
- package/dist/config-rendering.d.ts +2 -2
- package/dist/config-rendering.js +16 -0
- package/dist/config-rendering.js.map +1 -1
- package/dist/esm/apps/apps-config.d.ts +6 -0
- package/dist/esm/apps/apps-config.js +6 -0
- package/dist/esm/apps/apps-config.js.map +1 -1
- package/dist/esm/config/schema.d.ts +68 -68
- package/dist/esm/config-authoring.d.ts.map +1 -1
- package/dist/esm/config-authoring.js.map +1 -1
- package/dist/esm/config-authoring.test.js +1 -1
- package/dist/esm/config-authoring.test.js.map +1 -1
- package/dist/esm/config-rendering.d.ts +2 -2
- package/dist/esm/config-rendering.js +16 -2
- package/dist/esm/config-rendering.js.map +1 -1
- package/dist/esm/hexclave-config-file.d.ts +24 -1
- package/dist/esm/hexclave-config-file.d.ts.map +1 -1
- package/dist/esm/hexclave-config-file.js +69 -2
- package/dist/esm/hexclave-config-file.js.map +1 -1
- package/dist/esm/interface/admin-interface.d.ts +19 -1
- package/dist/esm/interface/admin-interface.d.ts.map +1 -1
- package/dist/esm/interface/admin-interface.js +14 -0
- package/dist/esm/interface/admin-interface.js.map +1 -1
- package/dist/esm/interface/admin-metrics.d.ts +101 -7
- package/dist/esm/interface/admin-metrics.d.ts.map +1 -1
- package/dist/esm/interface/admin-metrics.js +61 -1
- package/dist/esm/interface/admin-metrics.js.map +1 -1
- package/dist/esm/interface/conversations.d.ts +38 -38
- package/dist/esm/interface/crud/current-user.d.ts +2 -2
- package/dist/esm/interface/crud/email-outbox.d.ts +150 -150
- package/dist/esm/interface/crud/invoices.d.ts +2 -2
- package/dist/esm/interface/crud/products.d.ts +4 -4
- package/dist/esm/interface/crud/project-api-keys.d.ts +2 -2
- package/dist/esm/interface/crud/projects.d.ts +51 -51
- package/dist/esm/interface/crud/team-member-profiles.d.ts +10 -10
- package/dist/esm/interface/crud/transactions.d.ts +2 -2
- package/dist/esm/interface/crud/users.d.ts +10 -10
- package/dist/esm/interface/webhooks.d.ts +2 -2
- package/dist/esm/schema-fields.d.ts +3 -3
- package/dist/esm/sessions.d.ts +2 -2
- package/dist/esm/utils/analytics-clickmap-overlay.d.ts +18 -0
- package/dist/esm/utils/analytics-clickmap-overlay.d.ts.map +1 -0
- package/dist/esm/utils/analytics-clickmap-overlay.js +19 -0
- package/dist/esm/utils/analytics-clickmap-overlay.js.map +1 -0
- package/dist/esm/utils/dev-tool.d.ts +31 -0
- package/dist/esm/utils/dev-tool.d.ts.map +1 -0
- package/dist/esm/utils/dev-tool.js +32 -0
- package/dist/esm/utils/dev-tool.js.map +1 -0
- package/dist/esm/utils/dom.d.ts +7 -1
- package/dist/esm/utils/dom.d.ts.map +1 -1
- package/dist/esm/utils/dom.js +20 -1
- package/dist/esm/utils/dom.js.map +1 -1
- package/dist/esm/utils/elements-chain.d.ts +38 -0
- package/dist/esm/utils/elements-chain.d.ts.map +1 -0
- package/dist/esm/utils/elements-chain.js +297 -0
- package/dist/esm/utils/elements-chain.js.map +1 -0
- package/dist/hexclave-config-file.d.ts +24 -1
- package/dist/hexclave-config-file.d.ts.map +1 -1
- package/dist/hexclave-config-file.js +71 -1
- package/dist/hexclave-config-file.js.map +1 -1
- package/dist/interface/admin-interface.d.ts +19 -1
- package/dist/interface/admin-interface.d.ts.map +1 -1
- package/dist/interface/admin-interface.js +14 -0
- package/dist/interface/admin-interface.js.map +1 -1
- package/dist/interface/admin-metrics.d.ts +101 -7
- package/dist/interface/admin-metrics.d.ts.map +1 -1
- package/dist/interface/admin-metrics.js +65 -0
- package/dist/interface/admin-metrics.js.map +1 -1
- package/dist/interface/conversations.d.ts +38 -38
- package/dist/interface/crud/current-user.d.ts +2 -2
- package/dist/interface/crud/email-outbox.d.ts +150 -150
- package/dist/interface/crud/invoices.d.ts +2 -2
- package/dist/interface/crud/products.d.ts +4 -4
- package/dist/interface/crud/project-api-keys.d.ts +2 -2
- package/dist/interface/crud/projects.d.ts +51 -51
- package/dist/interface/crud/team-member-profiles.d.ts +10 -10
- package/dist/interface/crud/transactions.d.ts +2 -2
- package/dist/interface/crud/users.d.ts +10 -10
- package/dist/interface/webhooks.d.ts +2 -2
- package/dist/schema-fields.d.ts +3 -3
- package/dist/sessions.d.ts +2 -2
- package/dist/utils/analytics-clickmap-overlay.d.ts +18 -0
- package/dist/utils/analytics-clickmap-overlay.d.ts.map +1 -0
- package/dist/utils/analytics-clickmap-overlay.js +23 -0
- package/dist/utils/analytics-clickmap-overlay.js.map +1 -0
- package/dist/utils/dev-tool.d.ts +31 -0
- package/dist/utils/dev-tool.d.ts.map +1 -0
- package/dist/utils/dev-tool.js +37 -0
- package/dist/utils/dev-tool.js.map +1 -0
- package/dist/utils/dom.d.ts +7 -1
- package/dist/utils/dom.d.ts.map +1 -1
- package/dist/utils/dom.js +20 -0
- package/dist/utils/dom.js.map +1 -1
- package/dist/utils/elements-chain.d.ts +38 -0
- package/dist/utils/elements-chain.d.ts.map +1 -0
- package/dist/utils/elements-chain.js +304 -0
- package/dist/utils/elements-chain.js.map +1 -0
- package/package.json +1 -1
- package/src/apps/apps-config.ts +6 -0
- package/src/config-authoring.test.ts +1 -1
- package/src/config-authoring.ts +6 -6
- package/src/config-rendering.ts +24 -2
- package/src/hexclave-config-file.ts +90 -1
- package/src/interface/admin-interface.ts +43 -1
- package/src/interface/admin-metrics.ts +92 -4
- package/src/utils/analytics-clickmap-overlay.tsx +15 -0
- package/src/utils/dev-tool.tsx +30 -0
- package/src/utils/dom.tsx +42 -0
- package/src/utils/elements-chain.tsx +349 -0
|
@@ -150,23 +150,23 @@ declare const MetricsEmailOverviewSchema: yup.ObjectSchema<{
|
|
|
150
150
|
activity: number;
|
|
151
151
|
}[];
|
|
152
152
|
daily_emails_by_status: {
|
|
153
|
-
ok: number;
|
|
154
153
|
error: number;
|
|
155
154
|
date: string;
|
|
155
|
+
ok: number;
|
|
156
156
|
in_progress: number;
|
|
157
157
|
}[];
|
|
158
158
|
emails_sent: number;
|
|
159
159
|
recent_emails: {
|
|
160
160
|
status: string;
|
|
161
161
|
id: string;
|
|
162
|
-
created_at_millis: number;
|
|
163
162
|
subject: string;
|
|
163
|
+
created_at_millis: number;
|
|
164
164
|
}[];
|
|
165
165
|
deliverability_status: {
|
|
166
166
|
error: number;
|
|
167
|
-
bounced: number;
|
|
168
167
|
in_progress: number;
|
|
169
168
|
delivered: number;
|
|
169
|
+
bounced: number;
|
|
170
170
|
};
|
|
171
171
|
deliverability_rate: number;
|
|
172
172
|
bounce_rate: number;
|
|
@@ -368,6 +368,80 @@ declare const UserActivityResponseBodySchema: yup.ObjectSchema<{
|
|
|
368
368
|
}, yup.AnyObject, {
|
|
369
369
|
data_points: undefined;
|
|
370
370
|
}, "">;
|
|
371
|
+
declare const AnalyticsClickmapKindSchema: yup.StringSchema<"team_user_hour_of_week" | "session_replay_clicks", yup.AnyObject, undefined, "">;
|
|
372
|
+
declare const AnalyticsClickmapDeviceSchema: yup.StringSchema<"tv" | "widescreen" | "desktop" | "laptop" | "tablet" | "mobile", yup.AnyObject, undefined, "">;
|
|
373
|
+
declare const AnalyticsClickmapTokenResponseBodySchema: yup.ObjectSchema<{
|
|
374
|
+
token: string;
|
|
375
|
+
origin: string;
|
|
376
|
+
expires_at_millis: number;
|
|
377
|
+
}, yup.AnyObject, {
|
|
378
|
+
token: undefined;
|
|
379
|
+
origin: undefined;
|
|
380
|
+
expires_at_millis: undefined;
|
|
381
|
+
}, "">;
|
|
382
|
+
declare const AnalyticsClickmapCellSchema: yup.ObjectSchema<{
|
|
383
|
+
weekday: number;
|
|
384
|
+
hour: number;
|
|
385
|
+
value: number;
|
|
386
|
+
}, yup.AnyObject, {
|
|
387
|
+
weekday: undefined;
|
|
388
|
+
hour: undefined;
|
|
389
|
+
value: undefined;
|
|
390
|
+
}, "">;
|
|
391
|
+
declare const AnalyticsClickmapResponseBodySchema: yup.ObjectSchema<{
|
|
392
|
+
kind: "team_user_hour_of_week" | "session_replay_clicks";
|
|
393
|
+
cells: {
|
|
394
|
+
value: number;
|
|
395
|
+
hour: number;
|
|
396
|
+
weekday: number;
|
|
397
|
+
}[];
|
|
398
|
+
sampling: number;
|
|
399
|
+
routes: {
|
|
400
|
+
path: string;
|
|
401
|
+
clicks: number;
|
|
402
|
+
users: number;
|
|
403
|
+
replays: number;
|
|
404
|
+
}[];
|
|
405
|
+
users: {
|
|
406
|
+
primary_email: string | null;
|
|
407
|
+
display_name: string | null;
|
|
408
|
+
id: string;
|
|
409
|
+
profile_image_url: string | null;
|
|
410
|
+
clicks: number;
|
|
411
|
+
replays: number;
|
|
412
|
+
last_event_at_millis: number;
|
|
413
|
+
}[];
|
|
414
|
+
replays: {
|
|
415
|
+
user_id: string | null;
|
|
416
|
+
id: string;
|
|
417
|
+
clicks: number;
|
|
418
|
+
last_event_at_millis: number;
|
|
419
|
+
route_path: string | null;
|
|
420
|
+
viewport_width: number | null;
|
|
421
|
+
viewport_height: number | null;
|
|
422
|
+
}[];
|
|
423
|
+
selectors: {
|
|
424
|
+
clicks: number;
|
|
425
|
+
selector: string;
|
|
426
|
+
}[];
|
|
427
|
+
elements: {
|
|
428
|
+
clicks: number;
|
|
429
|
+
elements_chain: string;
|
|
430
|
+
elements_text: string;
|
|
431
|
+
tag_name: string;
|
|
432
|
+
href: string | null;
|
|
433
|
+
dead_clicks: number;
|
|
434
|
+
}[];
|
|
435
|
+
}, yup.AnyObject, {
|
|
436
|
+
kind: undefined;
|
|
437
|
+
cells: undefined;
|
|
438
|
+
sampling: 1;
|
|
439
|
+
routes: never[];
|
|
440
|
+
users: never[];
|
|
441
|
+
replays: never[];
|
|
442
|
+
selectors: never[];
|
|
443
|
+
elements: never[];
|
|
444
|
+
}, "">;
|
|
371
445
|
declare const MetricsActiveUsersByCountrySchema: yup.MixedSchema<Record<string, {
|
|
372
446
|
primary_email: string | null;
|
|
373
447
|
display_name: string | null;
|
|
@@ -489,23 +563,23 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
|
|
|
489
563
|
emails_by_status: Record<string, number>;
|
|
490
564
|
total_emails: number;
|
|
491
565
|
daily_emails_by_status: {
|
|
492
|
-
ok: number;
|
|
493
566
|
error: number;
|
|
494
567
|
date: string;
|
|
568
|
+
ok: number;
|
|
495
569
|
in_progress: number;
|
|
496
570
|
}[];
|
|
497
571
|
emails_sent: number;
|
|
498
572
|
recent_emails: {
|
|
499
573
|
status: string;
|
|
500
574
|
id: string;
|
|
501
|
-
created_at_millis: number;
|
|
502
575
|
subject: string;
|
|
576
|
+
created_at_millis: number;
|
|
503
577
|
}[];
|
|
504
578
|
deliverability_status: {
|
|
505
579
|
error: number;
|
|
506
|
-
bounced: number;
|
|
507
580
|
in_progress: number;
|
|
508
581
|
delivered: number;
|
|
582
|
+
bounced: number;
|
|
509
583
|
};
|
|
510
584
|
deliverability_rate: number;
|
|
511
585
|
bounce_rate: number;
|
|
@@ -708,6 +782,26 @@ type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;
|
|
|
708
782
|
type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;
|
|
709
783
|
type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;
|
|
710
784
|
type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;
|
|
785
|
+
type AnalyticsClickmapKind = yup.InferType<typeof AnalyticsClickmapKindSchema>;
|
|
786
|
+
type AnalyticsClickmapDevice = yup.InferType<typeof AnalyticsClickmapDeviceSchema>;
|
|
787
|
+
type AnalyticsClickmapCell = yup.InferType<typeof AnalyticsClickmapCellSchema>;
|
|
788
|
+
type AnalyticsClickmapResponse = yup.InferType<typeof AnalyticsClickmapResponseBodySchema>;
|
|
789
|
+
type AnalyticsClickmapTokenResponse = yup.InferType<typeof AnalyticsClickmapTokenResponseBodySchema>;
|
|
790
|
+
type AnalyticsClickmapOptions = {
|
|
791
|
+
kind: AnalyticsClickmapKind;
|
|
792
|
+
memberUserIds?: string[];
|
|
793
|
+
routePath?: string;
|
|
794
|
+
routeRegex?: string;
|
|
795
|
+
urlPattern?: string;
|
|
796
|
+
userId?: string;
|
|
797
|
+
replayId?: string;
|
|
798
|
+
device?: AnalyticsClickmapDevice;
|
|
799
|
+
viewportWidthMin?: number;
|
|
800
|
+
viewportWidthMax?: number;
|
|
801
|
+
sampling?: number;
|
|
802
|
+
since: string;
|
|
803
|
+
until: string;
|
|
804
|
+
};
|
|
711
805
|
//#endregion
|
|
712
|
-
export { MetricsActiveUsersByCountrySchema, MetricsActivitySplit, MetricsActivitySplitSchema, MetricsAnalyticsOverview, MetricsAnalyticsOverviewSchema, MetricsAuthOverview, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdown, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePoint, MetricsDailyRevenuePointSchema, MetricsDataPoint, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverview, MetricsEmailOverviewSchema, MetricsLoginMethodEntry, MetricsLoginMethodEntrySchema, MetricsNamedCount, MetricsNamedCountSchema, MetricsPaymentsOverview, MetricsPaymentsOverviewSchema, MetricsRecentEmail, MetricsRecentEmailSchema, MetricsRecentUser, MetricsRecentUserSchema, MetricsResponse, MetricsResponseBodySchema, MetricsTopCountry, MetricsTopCountrySchema, MetricsTopReferrer, MetricsTopReferrerSchema, MetricsTopRegion, MetricsTopRegionSchema, MetricsUserCounts, MetricsUserCountsSchema, UserActivityResponse, UserActivityResponseBodySchema };
|
|
806
|
+
export { AnalyticsClickmapCell, AnalyticsClickmapCellSchema, AnalyticsClickmapDevice, AnalyticsClickmapDeviceSchema, AnalyticsClickmapKind, AnalyticsClickmapKindSchema, AnalyticsClickmapOptions, AnalyticsClickmapResponse, AnalyticsClickmapResponseBodySchema, AnalyticsClickmapTokenResponse, AnalyticsClickmapTokenResponseBodySchema, MetricsActiveUsersByCountrySchema, MetricsActivitySplit, MetricsActivitySplitSchema, MetricsAnalyticsOverview, MetricsAnalyticsOverviewSchema, MetricsAuthOverview, MetricsAuthOverviewSchema, MetricsDailyEmailStatusBreakdown, MetricsDailyEmailStatusBreakdownSchema, MetricsDailyRevenuePoint, MetricsDailyRevenuePointSchema, MetricsDataPoint, MetricsDataPointSchema, MetricsDataPointsSchema, MetricsEmailOverview, MetricsEmailOverviewSchema, MetricsLoginMethodEntry, MetricsLoginMethodEntrySchema, MetricsNamedCount, MetricsNamedCountSchema, MetricsPaymentsOverview, MetricsPaymentsOverviewSchema, MetricsRecentEmail, MetricsRecentEmailSchema, MetricsRecentUser, MetricsRecentUserSchema, MetricsResponse, MetricsResponseBodySchema, MetricsTopCountry, MetricsTopCountrySchema, MetricsTopReferrer, MetricsTopReferrerSchema, MetricsTopRegion, MetricsTopRegionSchema, MetricsUserCounts, MetricsUserCountsSchema, UserActivityResponse, UserActivityResponseBodySchema };
|
|
713
807
|
//# sourceMappingURL=admin-metrics.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-metrics.d.ts","names":[],"sources":["../../src/interface/admin-metrics.ts"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-metrics.d.ts","names":[],"sources":["../../src/interface/admin-metrics.ts"],"mappings":"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"}
|
|
@@ -127,6 +127,66 @@ const MetricsRecentUserSchema = (0, ___schema_fields_js.yupObject)({
|
|
|
127
127
|
last_active_at_millis: (0, ___schema_fields_js.yupNumber)().nullable().defined()
|
|
128
128
|
}).noUnknown(false).defined();
|
|
129
129
|
const UserActivityResponseBodySchema = (0, ___schema_fields_js.yupObject)({ data_points: MetricsDataPointsSchema }).defined();
|
|
130
|
+
const AnalyticsClickmapKindSchema = (0, ___schema_fields_js.yupString)().oneOf(["team_user_hour_of_week", "session_replay_clicks"]).defined();
|
|
131
|
+
const AnalyticsClickmapDeviceSchema = (0, ___schema_fields_js.yupString)().oneOf([
|
|
132
|
+
"tv",
|
|
133
|
+
"widescreen",
|
|
134
|
+
"desktop",
|
|
135
|
+
"laptop",
|
|
136
|
+
"tablet",
|
|
137
|
+
"mobile"
|
|
138
|
+
]).defined();
|
|
139
|
+
const AnalyticsClickmapTokenResponseBodySchema = (0, ___schema_fields_js.yupObject)({
|
|
140
|
+
token: (0, ___schema_fields_js.yupString)().defined(),
|
|
141
|
+
origin: (0, ___schema_fields_js.yupString)().defined(),
|
|
142
|
+
expires_at_millis: (0, ___schema_fields_js.yupNumber)().integer().defined()
|
|
143
|
+
}).defined();
|
|
144
|
+
const AnalyticsClickmapCellSchema = (0, ___schema_fields_js.yupObject)({
|
|
145
|
+
weekday: (0, ___schema_fields_js.yupNumber)().integer().min(1).max(7).defined(),
|
|
146
|
+
hour: (0, ___schema_fields_js.yupNumber)().integer().min(0).max(23).defined(),
|
|
147
|
+
value: (0, ___schema_fields_js.yupNumber)().integer().defined()
|
|
148
|
+
}).defined();
|
|
149
|
+
const AnalyticsClickmapResponseBodySchema = (0, ___schema_fields_js.yupObject)({
|
|
150
|
+
kind: AnalyticsClickmapKindSchema,
|
|
151
|
+
cells: (0, ___schema_fields_js.yupArray)(AnalyticsClickmapCellSchema).defined(),
|
|
152
|
+
sampling: (0, ___schema_fields_js.yupNumber)().min(0).max(1).optional().default(1),
|
|
153
|
+
routes: (0, ___schema_fields_js.yupArray)((0, ___schema_fields_js.yupObject)({
|
|
154
|
+
path: (0, ___schema_fields_js.yupString)().defined(),
|
|
155
|
+
clicks: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
156
|
+
users: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
157
|
+
replays: (0, ___schema_fields_js.yupNumber)().integer().defined()
|
|
158
|
+
}).defined()).optional().default([]),
|
|
159
|
+
users: (0, ___schema_fields_js.yupArray)((0, ___schema_fields_js.yupObject)({
|
|
160
|
+
id: (0, ___schema_fields_js.yupString)().defined(),
|
|
161
|
+
display_name: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
162
|
+
primary_email: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
163
|
+
profile_image_url: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
164
|
+
clicks: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
165
|
+
replays: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
166
|
+
last_event_at_millis: (0, ___schema_fields_js.yupNumber)().defined()
|
|
167
|
+
}).defined()).optional().default([]),
|
|
168
|
+
replays: (0, ___schema_fields_js.yupArray)((0, ___schema_fields_js.yupObject)({
|
|
169
|
+
id: (0, ___schema_fields_js.yupString)().defined(),
|
|
170
|
+
user_id: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
171
|
+
route_path: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
172
|
+
viewport_width: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
|
|
173
|
+
viewport_height: (0, ___schema_fields_js.yupNumber)().integer().nullable().defined(),
|
|
174
|
+
clicks: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
175
|
+
last_event_at_millis: (0, ___schema_fields_js.yupNumber)().defined()
|
|
176
|
+
}).defined()).optional().default([]),
|
|
177
|
+
selectors: (0, ___schema_fields_js.yupArray)((0, ___schema_fields_js.yupObject)({
|
|
178
|
+
selector: (0, ___schema_fields_js.yupString)().defined(),
|
|
179
|
+
clicks: (0, ___schema_fields_js.yupNumber)().integer().defined()
|
|
180
|
+
}).defined()).optional().default([]),
|
|
181
|
+
elements: (0, ___schema_fields_js.yupArray)((0, ___schema_fields_js.yupObject)({
|
|
182
|
+
elements_chain: (0, ___schema_fields_js.yupString)().defined(),
|
|
183
|
+
elements_text: (0, ___schema_fields_js.yupString)().defined(),
|
|
184
|
+
tag_name: (0, ___schema_fields_js.yupString)().defined(),
|
|
185
|
+
href: (0, ___schema_fields_js.yupString)().nullable().defined(),
|
|
186
|
+
clicks: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
187
|
+
dead_clicks: (0, ___schema_fields_js.yupNumber)().integer().optional().default(0)
|
|
188
|
+
}).defined()).optional().default([])
|
|
189
|
+
}).defined();
|
|
130
190
|
const MetricsActiveUsersByCountrySchema = (0, ___schema_fields_js.yupRecord)((0, ___schema_fields_js.yupString)().defined(), (0, ___schema_fields_js.yupArray)(MetricsRecentUserSchema).defined()).optional().default({});
|
|
131
191
|
const MetricsResponseBodySchema = (0, ___schema_fields_js.yupObject)({
|
|
132
192
|
total_users: (0, ___schema_fields_js.yupNumber)().integer().defined(),
|
|
@@ -151,6 +211,11 @@ const MetricsUserCountsSchema = (0, ___schema_fields_js.yupObject)({
|
|
|
151
211
|
}).defined();
|
|
152
212
|
|
|
153
213
|
//#endregion
|
|
214
|
+
exports.AnalyticsClickmapCellSchema = AnalyticsClickmapCellSchema;
|
|
215
|
+
exports.AnalyticsClickmapDeviceSchema = AnalyticsClickmapDeviceSchema;
|
|
216
|
+
exports.AnalyticsClickmapKindSchema = AnalyticsClickmapKindSchema;
|
|
217
|
+
exports.AnalyticsClickmapResponseBodySchema = AnalyticsClickmapResponseBodySchema;
|
|
218
|
+
exports.AnalyticsClickmapTokenResponseBodySchema = AnalyticsClickmapTokenResponseBodySchema;
|
|
154
219
|
exports.MetricsActiveUsersByCountrySchema = MetricsActiveUsersByCountrySchema;
|
|
155
220
|
exports.MetricsActivitySplitSchema = MetricsActivitySplitSchema;
|
|
156
221
|
exports.MetricsAnalyticsOverviewSchema = MetricsAnalyticsOverviewSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin-metrics.js","names":[],"sources":["../../src/interface/admin-metrics.ts"],"sourcesContent":["import yup from \"yup\";\nimport { yupArray, yupMixed, yupNumber, yupObject, yupRecord, yupString } from \"../schema-fields\";\n\n// Single source of truth for the `/internal/metrics` endpoint shape.\n//\n// Both the backend route handler (`apps/backend/src/app/api/latest/internal/metrics/route.tsx`)\n// and the dashboard hook (`apps/dashboard/src/lib/hexclave-app-internals.ts`) import\n// these schemas. The runtime validation lives in the schemas; the static types\n// are derived via `yup.InferType` so we never have to keep parallel copies in\n// sync.\n\nexport const MetricsDataPointSchema = yupObject({\n date: yupString().defined(),\n activity: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDataPointsSchema = yupArray(MetricsDataPointSchema).defined();\n\nexport const MetricsActivitySplitSchema = yupObject({\n total: MetricsDataPointsSchema,\n new: MetricsDataPointsSchema,\n retained: MetricsDataPointsSchema,\n reactivated: MetricsDataPointsSchema,\n}).defined();\n\nexport const MetricsAuthOverviewSchema = yupObject({\n verified_users: yupNumber().integer().defined(),\n unverified_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n total_teams: yupNumber().integer().defined(),\n mau: yupNumber().integer().defined(),\n daily_active_users_split: MetricsActivitySplitSchema,\n daily_active_teams_split: MetricsActivitySplitSchema,\n total_users_filtered: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsPaymentsOverviewSchema = yupObject({\n subscriptions_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_subscription_count: yupNumber().integer().defined(),\n total_one_time_purchases: yupNumber().integer().defined(),\n daily_subscriptions: MetricsDataPointsSchema,\n revenue_cents: yupNumber().integer().defined(),\n mrr_cents: yupNumber().integer().defined(),\n total_orders: yupNumber().integer().defined(),\n checkout_conversion_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsRecentEmailSchema = yupObject({\n id: yupString().defined(),\n status: yupString().defined(),\n subject: yupString().defined(),\n created_at_millis: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyEmailStatusBreakdownSchema = yupObject({\n date: yupString().defined(),\n ok: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsEmailOverviewSchema = yupObject({\n emails_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n total_emails: yupNumber().integer().defined(),\n daily_emails: MetricsDataPointsSchema,\n daily_emails_by_status: yupArray(MetricsDailyEmailStatusBreakdownSchema).defined(),\n emails_sent: yupNumber().integer().defined(),\n recent_emails: yupArray(MetricsRecentEmailSchema).defined(),\n deliverability_status: yupObject({\n delivered: yupNumber().integer().defined(),\n bounced: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n }).defined(),\n deliverability_rate: yupNumber().defined(),\n bounce_rate: yupNumber().defined(),\n click_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyRevenuePointSchema = yupObject({\n date: yupString().defined(),\n new_cents: yupNumber().integer().defined(),\n refund_cents: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopReferrerSchema = yupObject({\n referrer: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\n// Named-count breakdowns used by the analytics overview for top browsers,\n// operating systems, and device classes (Desktop / Mobile / Tablet).\nexport const MetricsNamedCountSchema = yupObject({\n name: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopRegionSchema = yupObject({\n country_code: yupString().nullable().defined(),\n region_code: yupString().nullable().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopCountrySchema = yupObject({\n country_code: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsAnalyticsOverviewSchema = yupObject({\n daily_page_views: MetricsDataPointsSchema,\n daily_clicks: MetricsDataPointsSchema,\n daily_visitors: MetricsDataPointsSchema,\n hourly_page_views: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_visitors: yupArray(MetricsDataPointSchema).optional().default([]),\n // Token-refresh-derived anonymous-visitor fallback. Populated only when the\n // analytics app isn't installed (no `$page-view` events) — counts DISTINCT\n // anonymous users per day from the events table. See\n // `loadAnonymousVisitorsFromTokenRefresh` in the backend metrics route.\n //\n // Optional for one release cycle so older clients/servers don't hard-fail\n // validation during a staged rollout. Tighten to `.defined()` after.\n daily_anonymous_visitors_fallback: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_revenue: yupArray(MetricsDailyRevenuePointSchema).defined(),\n total_revenue_cents: yupNumber().integer().defined(),\n total_replays: yupNumber().integer().defined(),\n recent_replays: yupNumber().integer().defined(),\n visitors: yupNumber().integer().defined(),\n anonymous_visitors_fallback: yupNumber().integer().optional().default(0),\n avg_session_seconds: yupNumber().defined(),\n online_live: yupNumber().integer().defined(),\n revenue_per_visitor: yupNumber().defined(),\n top_referrers: yupArray(MetricsTopReferrerSchema).defined(),\n top_region: MetricsTopRegionSchema.nullable().defined(),\n top_regions: yupArray(MetricsTopCountrySchema).optional().default([]),\n // Weighted across the window: sum(bounced)/sum(sessions) * 100. .optional()\n // for one release cycle so older servers (that don't return it yet) don't\n // hard-fail validation; default to 0 so consumers can read unconditionally.\n bounce_rate: yupNumber().optional().default(0),\n daily_bounce_rate: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_avg_session_seconds: yupArray(MetricsDataPointSchema).optional().default([]),\n // User-Agent-derived breakdowns for the analytics overview. Computed from the\n // `data.user_agent` blob on `$page-view` events (captured client-side only,\n // no server-side fallback). Optional + default-[] for one release cycle\n // so older clients / servers without UA capture don't fail validation.\n top_browsers: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_operating_systems: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_devices: yupArray(MetricsNamedCountSchema).optional().default([]),\n conversion_rate: yupNumber().optional(),\n deltas: yupMixed().optional(),\n}).defined();\n\nexport const MetricsLoginMethodEntrySchema = yupObject({\n method: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\n// Recent user summary — a slim projection of UsersCrud[\"Admin\"][\"Read\"] with\n// just the fields the overview list views actually read. Defined here so the\n// metrics response stays self-contained and doesn't pull in users-crud.\n//\n// `.noUnknown(false)` tells our strict object validator to allow the extra\n// fields that the backend returns as part of the full users-crud payload —\n// `is_anonymous`, `has_password`, `oauth_providers`, etc. — without rejecting\n// them. Only the keys explicitly listed here are validated; extras pass through.\nexport const MetricsRecentUserSchema = yupObject({\n id: yupString().defined(),\n display_name: yupString().nullable().defined(),\n primary_email: yupString().nullable().defined(),\n profile_image_url: yupString().nullable().defined(),\n signed_up_at_millis: yupNumber().defined(),\n last_active_at_millis: yupNumber().nullable().defined(),\n}).noUnknown(false).defined();\n\n// Per-user activity heatmap — a simple list of daily event counts for a single\n// user. Backed by ClickHouse `analytics_internal.events` filtered by user_id,\n// project_id, and branch_id. See `/internal/user-activity` on the backend.\nexport const UserActivityResponseBodySchema = yupObject({\n data_points: MetricsDataPointsSchema,\n}).defined();\n\n// Recent \"currently live\" users keyed by ISO country code. Populated by\n// joining a bounded ClickHouse selection from the live `$token-refresh` window\n// with the corresponding Prisma profile rows, so the overview globe can render\n// real avatars of real users from each country. Optional for one release cycle\n// so clients talking to older servers don't fail validation on the returned\n// body.\nexport const MetricsActiveUsersByCountrySchema = yupRecord(\n yupString().defined(),\n yupArray(MetricsRecentUserSchema).defined(),\n).optional().default({});\n\nexport const MetricsResponseBodySchema = yupObject({\n total_users: yupNumber().integer().defined(),\n // Count of distinct users seen refreshing a token in the last ~2 minutes —\n // the \"who's online right now\" number rendered on the overview globe. Derived\n // from the same `$token-refresh` window that powers `active_users_by_country`,\n // so it works for every project regardless of whether the analytics app\n // (page-view-based `analytics_overview.online_live`) is installed.\n //\n // Optional for one release cycle so older servers don't fail schema\n // validation on the returned body. Tighten to `.defined()` after.\n live_users: yupNumber().integer().optional().default(0),\n daily_users: MetricsDataPointsSchema,\n daily_active_users: MetricsDataPointsSchema,\n hourly_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n users_by_country: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_users_by_country: MetricsActiveUsersByCountrySchema,\n // recently_registered/active are CRUD User objects passed through from the\n // backend. The schema only validates the fields the dashboard actually\n // reads — extra fields from UsersCrud[\"Admin\"][\"Read\"] are allowed through.\n recently_registered: yupArray(MetricsRecentUserSchema).defined(),\n recently_active: yupArray(MetricsRecentUserSchema).defined(),\n login_methods: yupArray(MetricsLoginMethodEntrySchema).defined(),\n auth_overview: MetricsAuthOverviewSchema,\n payments_overview: MetricsPaymentsOverviewSchema,\n email_overview: MetricsEmailOverviewSchema,\n analytics_overview: MetricsAnalyticsOverviewSchema,\n}).defined();\n\nexport const MetricsUserCountsSchema = yupObject({\n total_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n}).defined();\n\n// Derived static types — single source of truth lives in the schemas above.\nexport type MetricsDataPoint = yup.InferType<typeof MetricsDataPointSchema>;\nexport type MetricsActivitySplit = yup.InferType<typeof MetricsActivitySplitSchema>;\nexport type MetricsAuthOverview = yup.InferType<typeof MetricsAuthOverviewSchema>;\nexport type MetricsPaymentsOverview = yup.InferType<typeof MetricsPaymentsOverviewSchema>;\nexport type MetricsRecentEmail = yup.InferType<typeof MetricsRecentEmailSchema>;\nexport type MetricsDailyEmailStatusBreakdown = yup.InferType<typeof MetricsDailyEmailStatusBreakdownSchema>;\nexport type MetricsEmailOverview = yup.InferType<typeof MetricsEmailOverviewSchema>;\nexport type MetricsDailyRevenuePoint = yup.InferType<typeof MetricsDailyRevenuePointSchema>;\nexport type MetricsTopReferrer = yup.InferType<typeof MetricsTopReferrerSchema>;\nexport type MetricsTopRegion = yup.InferType<typeof MetricsTopRegionSchema>;\nexport type MetricsTopCountry = yup.InferType<typeof MetricsTopCountrySchema>;\nexport type MetricsNamedCount = yup.InferType<typeof MetricsNamedCountSchema>;\nexport type MetricsAnalyticsOverview = yup.InferType<typeof MetricsAnalyticsOverviewSchema>;\nexport type MetricsLoginMethodEntry = yup.InferType<typeof MetricsLoginMethodEntrySchema>;\nexport type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;\nexport type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;\nexport type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;\nexport type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"admin-metrics.js","names":[],"sources":["../../src/interface/admin-metrics.ts"],"sourcesContent":["import yup from \"yup\";\nimport { yupArray, yupMixed, yupNumber, yupObject, yupRecord, yupString } from \"../schema-fields\";\n\n// Single source of truth for the `/internal/metrics` endpoint shape.\n//\n// Both the backend route handler (`apps/backend/src/app/api/latest/internal/metrics/route.tsx`)\n// and the dashboard hook (`apps/dashboard/src/lib/hexclave-app-internals.ts`) import\n// these schemas. The runtime validation lives in the schemas; the static types\n// are derived via `yup.InferType` so we never have to keep parallel copies in\n// sync.\n\nexport const MetricsDataPointSchema = yupObject({\n date: yupString().defined(),\n activity: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDataPointsSchema = yupArray(MetricsDataPointSchema).defined();\n\nexport const MetricsActivitySplitSchema = yupObject({\n total: MetricsDataPointsSchema,\n new: MetricsDataPointsSchema,\n retained: MetricsDataPointsSchema,\n reactivated: MetricsDataPointsSchema,\n}).defined();\n\nexport const MetricsAuthOverviewSchema = yupObject({\n verified_users: yupNumber().integer().defined(),\n unverified_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n total_teams: yupNumber().integer().defined(),\n mau: yupNumber().integer().defined(),\n daily_active_users_split: MetricsActivitySplitSchema,\n daily_active_teams_split: MetricsActivitySplitSchema,\n total_users_filtered: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsPaymentsOverviewSchema = yupObject({\n subscriptions_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_subscription_count: yupNumber().integer().defined(),\n total_one_time_purchases: yupNumber().integer().defined(),\n daily_subscriptions: MetricsDataPointsSchema,\n revenue_cents: yupNumber().integer().defined(),\n mrr_cents: yupNumber().integer().defined(),\n total_orders: yupNumber().integer().defined(),\n checkout_conversion_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsRecentEmailSchema = yupObject({\n id: yupString().defined(),\n status: yupString().defined(),\n subject: yupString().defined(),\n created_at_millis: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyEmailStatusBreakdownSchema = yupObject({\n date: yupString().defined(),\n ok: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsEmailOverviewSchema = yupObject({\n emails_by_status: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n total_emails: yupNumber().integer().defined(),\n daily_emails: MetricsDataPointsSchema,\n daily_emails_by_status: yupArray(MetricsDailyEmailStatusBreakdownSchema).defined(),\n emails_sent: yupNumber().integer().defined(),\n recent_emails: yupArray(MetricsRecentEmailSchema).defined(),\n deliverability_status: yupObject({\n delivered: yupNumber().integer().defined(),\n bounced: yupNumber().integer().defined(),\n error: yupNumber().integer().defined(),\n in_progress: yupNumber().integer().defined(),\n }).defined(),\n deliverability_rate: yupNumber().defined(),\n bounce_rate: yupNumber().defined(),\n click_rate: yupNumber().defined(),\n}).defined();\n\nexport const MetricsDailyRevenuePointSchema = yupObject({\n date: yupString().defined(),\n new_cents: yupNumber().integer().defined(),\n refund_cents: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopReferrerSchema = yupObject({\n referrer: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\n// Named-count breakdowns used by the analytics overview for top browsers,\n// operating systems, and device classes (Desktop / Mobile / Tablet).\nexport const MetricsNamedCountSchema = yupObject({\n name: yupString().defined(),\n visitors: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopRegionSchema = yupObject({\n country_code: yupString().nullable().defined(),\n region_code: yupString().nullable().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsTopCountrySchema = yupObject({\n country_code: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\nexport const MetricsAnalyticsOverviewSchema = yupObject({\n daily_page_views: MetricsDataPointsSchema,\n daily_clicks: MetricsDataPointsSchema,\n daily_visitors: MetricsDataPointsSchema,\n hourly_page_views: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_visitors: yupArray(MetricsDataPointSchema).optional().default([]),\n // Token-refresh-derived anonymous-visitor fallback. Populated only when the\n // analytics app isn't installed (no `$page-view` events) — counts DISTINCT\n // anonymous users per day from the events table. See\n // `loadAnonymousVisitorsFromTokenRefresh` in the backend metrics route.\n //\n // Optional for one release cycle so older clients/servers don't hard-fail\n // validation during a staged rollout. Tighten to `.defined()` after.\n daily_anonymous_visitors_fallback: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_revenue: yupArray(MetricsDailyRevenuePointSchema).defined(),\n total_revenue_cents: yupNumber().integer().defined(),\n total_replays: yupNumber().integer().defined(),\n recent_replays: yupNumber().integer().defined(),\n visitors: yupNumber().integer().defined(),\n anonymous_visitors_fallback: yupNumber().integer().optional().default(0),\n avg_session_seconds: yupNumber().defined(),\n online_live: yupNumber().integer().defined(),\n revenue_per_visitor: yupNumber().defined(),\n top_referrers: yupArray(MetricsTopReferrerSchema).defined(),\n top_region: MetricsTopRegionSchema.nullable().defined(),\n top_regions: yupArray(MetricsTopCountrySchema).optional().default([]),\n // Weighted across the window: sum(bounced)/sum(sessions) * 100. .optional()\n // for one release cycle so older servers (that don't return it yet) don't\n // hard-fail validation; default to 0 so consumers can read unconditionally.\n bounce_rate: yupNumber().optional().default(0),\n daily_bounce_rate: yupArray(MetricsDataPointSchema).optional().default([]),\n daily_avg_session_seconds: yupArray(MetricsDataPointSchema).optional().default([]),\n // User-Agent-derived breakdowns for the analytics overview. Computed from the\n // `data.user_agent` blob on `$page-view` events, captured client-side.\n // Optional + default-[] for one release cycle so older clients / servers\n // without UA capture don't fail validation.\n top_browsers: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_operating_systems: yupArray(MetricsNamedCountSchema).optional().default([]),\n top_devices: yupArray(MetricsNamedCountSchema).optional().default([]),\n conversion_rate: yupNumber().optional(),\n deltas: yupMixed().optional(),\n}).defined();\n\nexport const MetricsLoginMethodEntrySchema = yupObject({\n method: yupString().defined(),\n count: yupNumber().integer().defined(),\n}).defined();\n\n// Recent user summary — a slim projection of UsersCrud[\"Admin\"][\"Read\"] with\n// just the fields the overview list views actually read. Defined here so the\n// metrics response stays self-contained and doesn't pull in users-crud.\n//\n// `.noUnknown(false)` tells our strict object validator to allow the extra\n// fields that the backend returns as part of the full users-crud payload —\n// `is_anonymous`, `has_password`, `oauth_providers`, etc. — without rejecting\n// them. Only the keys explicitly listed here are validated; extras pass through.\nexport const MetricsRecentUserSchema = yupObject({\n id: yupString().defined(),\n display_name: yupString().nullable().defined(),\n primary_email: yupString().nullable().defined(),\n profile_image_url: yupString().nullable().defined(),\n signed_up_at_millis: yupNumber().defined(),\n last_active_at_millis: yupNumber().nullable().defined(),\n}).noUnknown(false).defined();\n\n// Per-user activity clickmap — a simple list of daily event counts for a single\n// user. Backed by ClickHouse `analytics_internal.events` filtered by user_id,\n// project_id, and branch_id. See `/internal/user-activity` on the backend.\nexport const UserActivityResponseBodySchema = yupObject({\n data_points: MetricsDataPointsSchema,\n}).defined();\n\nexport const AnalyticsClickmapKindSchema = yupString().oneOf([\"team_user_hour_of_week\", \"session_replay_clicks\"]).defined();\nexport const AnalyticsClickmapDeviceSchema = yupString().oneOf([\"tv\", \"widescreen\", \"desktop\", \"laptop\", \"tablet\", \"mobile\"]).defined();\n\nexport const AnalyticsClickmapTokenResponseBodySchema = yupObject({\n token: yupString().defined(),\n origin: yupString().defined(),\n expires_at_millis: yupNumber().integer().defined(),\n}).defined();\n\nexport const AnalyticsClickmapCellSchema = yupObject({\n weekday: yupNumber().integer().min(1).max(7).defined(),\n hour: yupNumber().integer().min(0).max(23).defined(),\n value: yupNumber().integer().defined(),\n}).defined();\n\nexport const AnalyticsClickmapResponseBodySchema = yupObject({\n kind: AnalyticsClickmapKindSchema,\n cells: yupArray(AnalyticsClickmapCellSchema).defined(),\n // Fraction of source rows the result was computed from (1 = full scan).\n // Returned counts are pre-scaled by 1/sampling.\n sampling: yupNumber().min(0).max(1).optional().default(1),\n routes: yupArray(yupObject({\n path: yupString().defined(),\n clicks: yupNumber().integer().defined(),\n users: yupNumber().integer().defined(),\n replays: yupNumber().integer().defined(),\n }).defined()).optional().default([]),\n users: yupArray(yupObject({\n id: yupString().defined(),\n display_name: yupString().nullable().defined(),\n primary_email: yupString().nullable().defined(),\n profile_image_url: yupString().nullable().defined(),\n clicks: yupNumber().integer().defined(),\n replays: yupNumber().integer().defined(),\n last_event_at_millis: yupNumber().defined(),\n }).defined()).optional().default([]),\n replays: yupArray(yupObject({\n id: yupString().defined(),\n user_id: yupString().nullable().defined(),\n route_path: yupString().nullable().defined(),\n viewport_width: yupNumber().integer().nullable().defined(),\n viewport_height: yupNumber().integer().nullable().defined(),\n clicks: yupNumber().integer().defined(),\n last_event_at_millis: yupNumber().defined(),\n }).defined()).optional().default([]),\n selectors: yupArray(yupObject({\n selector: yupString().defined(),\n clicks: yupNumber().integer().defined(),\n }).defined()).optional().default([]),\n // PostHog-style aggregated element identities. Resilient to DOM drift\n // because the chain encodes ancestor tags/classes/attrs/text rather than\n // a positional CSS selector.\n elements: yupArray(yupObject({\n elements_chain: yupString().defined(),\n elements_text: yupString().defined(),\n tag_name: yupString().defined(),\n href: yupString().nullable().defined(),\n clicks: yupNumber().integer().defined(),\n // Optional for one release cycle so new overlay clients can validate\n // responses from older servers that only returned aggregate click counts.\n dead_clicks: yupNumber().integer().optional().default(0),\n }).defined()).optional().default([]),\n}).defined();\n\n// Recent \"currently live\" users keyed by ISO country code. Populated by\n// joining a bounded ClickHouse selection from the live `$token-refresh` window\n// with the corresponding Prisma profile rows, so the overview globe can render\n// real avatars of real users from each country. Optional for one release cycle\n// so clients talking to older servers don't fail validation on the returned\n// body.\nexport const MetricsActiveUsersByCountrySchema = yupRecord(\n yupString().defined(),\n yupArray(MetricsRecentUserSchema).defined(),\n).optional().default({});\n\nexport const MetricsResponseBodySchema = yupObject({\n total_users: yupNumber().integer().defined(),\n // Count of distinct users seen refreshing a token in the last ~2 minutes —\n // the \"who's online right now\" number rendered on the overview globe. Derived\n // from the same `$token-refresh` window that powers `active_users_by_country`,\n // so it works for every project regardless of whether the analytics app\n // (page-view-based `analytics_overview.online_live`) is installed.\n //\n // Optional for one release cycle so older servers don't fail schema\n // validation on the returned body. Tighten to `.defined()` after.\n live_users: yupNumber().integer().optional().default(0),\n daily_users: MetricsDataPointsSchema,\n daily_active_users: MetricsDataPointsSchema,\n hourly_users: yupArray(MetricsDataPointSchema).optional().default([]),\n hourly_active_users: yupArray(MetricsDataPointSchema).optional().default([]),\n users_by_country: yupRecord(yupString().defined(), yupNumber().defined()).defined(),\n active_users_by_country: MetricsActiveUsersByCountrySchema,\n // recently_registered/active are CRUD User objects passed through from the\n // backend. The schema only validates the fields the dashboard actually\n // reads — extra fields from UsersCrud[\"Admin\"][\"Read\"] are allowed through.\n recently_registered: yupArray(MetricsRecentUserSchema).defined(),\n recently_active: yupArray(MetricsRecentUserSchema).defined(),\n login_methods: yupArray(MetricsLoginMethodEntrySchema).defined(),\n auth_overview: MetricsAuthOverviewSchema,\n payments_overview: MetricsPaymentsOverviewSchema,\n email_overview: MetricsEmailOverviewSchema,\n analytics_overview: MetricsAnalyticsOverviewSchema,\n}).defined();\n\nexport const MetricsUserCountsSchema = yupObject({\n total_users: yupNumber().integer().defined(),\n anonymous_users: yupNumber().integer().defined(),\n}).defined();\n\n// Derived static types — single source of truth lives in the schemas above.\nexport type MetricsDataPoint = yup.InferType<typeof MetricsDataPointSchema>;\nexport type MetricsActivitySplit = yup.InferType<typeof MetricsActivitySplitSchema>;\nexport type MetricsAuthOverview = yup.InferType<typeof MetricsAuthOverviewSchema>;\nexport type MetricsPaymentsOverview = yup.InferType<typeof MetricsPaymentsOverviewSchema>;\nexport type MetricsRecentEmail = yup.InferType<typeof MetricsRecentEmailSchema>;\nexport type MetricsDailyEmailStatusBreakdown = yup.InferType<typeof MetricsDailyEmailStatusBreakdownSchema>;\nexport type MetricsEmailOverview = yup.InferType<typeof MetricsEmailOverviewSchema>;\nexport type MetricsDailyRevenuePoint = yup.InferType<typeof MetricsDailyRevenuePointSchema>;\nexport type MetricsTopReferrer = yup.InferType<typeof MetricsTopReferrerSchema>;\nexport type MetricsTopRegion = yup.InferType<typeof MetricsTopRegionSchema>;\nexport type MetricsTopCountry = yup.InferType<typeof MetricsTopCountrySchema>;\nexport type MetricsNamedCount = yup.InferType<typeof MetricsNamedCountSchema>;\nexport type MetricsAnalyticsOverview = yup.InferType<typeof MetricsAnalyticsOverviewSchema>;\nexport type MetricsLoginMethodEntry = yup.InferType<typeof MetricsLoginMethodEntrySchema>;\nexport type MetricsRecentUser = yup.InferType<typeof MetricsRecentUserSchema>;\nexport type MetricsResponse = yup.InferType<typeof MetricsResponseBodySchema>;\nexport type MetricsUserCounts = yup.InferType<typeof MetricsUserCountsSchema>;\nexport type UserActivityResponse = yup.InferType<typeof UserActivityResponseBodySchema>;\nexport type AnalyticsClickmapKind = yup.InferType<typeof AnalyticsClickmapKindSchema>;\nexport type AnalyticsClickmapDevice = yup.InferType<typeof AnalyticsClickmapDeviceSchema>;\nexport type AnalyticsClickmapCell = yup.InferType<typeof AnalyticsClickmapCellSchema>;\nexport type AnalyticsClickmapResponse = yup.InferType<typeof AnalyticsClickmapResponseBodySchema>;\nexport type AnalyticsClickmapTokenResponse = yup.InferType<typeof AnalyticsClickmapTokenResponseBodySchema>;\n\n// Single (camelCase) options shape for the clickmap SDK surface — shared by the\n// StackAdminApp interface and its implementation so the two can't drift. The\n// HexclaveAdminInterface transport layer maps these to the snake_case request body.\nexport type AnalyticsClickmapOptions = {\n kind: AnalyticsClickmapKind,\n memberUserIds?: string[],\n routePath?: string,\n routeRegex?: string,\n urlPattern?: string,\n userId?: string,\n replayId?: string,\n device?: AnalyticsClickmapDevice,\n viewportWidthMin?: number,\n viewportWidthMax?: number,\n sampling?: number,\n since: string,\n until: string,\n};\n"],"mappings":"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"}
|
|
@@ -49,16 +49,16 @@ declare const conversationSummarySchema: yup$1.ObjectSchema<{
|
|
|
49
49
|
userPrimaryEmail: string | null;
|
|
50
50
|
userProfileImageUrl: string | null;
|
|
51
51
|
subject: string;
|
|
52
|
-
status: "
|
|
52
|
+
status: "open" | "pending" | "closed";
|
|
53
53
|
priority: "low" | "normal" | "high" | "urgent";
|
|
54
54
|
source: "email" | "manual" | "chat" | "api";
|
|
55
55
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
56
56
|
preview: string | null;
|
|
57
57
|
lastActivityAt: string;
|
|
58
58
|
metadata: {
|
|
59
|
-
tags: string[];
|
|
60
59
|
assignedToUserId: string | null;
|
|
61
60
|
assignedToDisplayName: string | null;
|
|
61
|
+
tags: string[];
|
|
62
62
|
firstResponseDueAt: string | null;
|
|
63
63
|
firstResponseAt: string | null;
|
|
64
64
|
nextResponseDueAt: string | null;
|
|
@@ -129,7 +129,7 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
|
|
|
129
129
|
userId: string | null;
|
|
130
130
|
teamId: string | null;
|
|
131
131
|
subject: string;
|
|
132
|
-
status: "
|
|
132
|
+
status: "open" | "pending" | "closed";
|
|
133
133
|
priority: "low" | "normal" | "high" | "urgent";
|
|
134
134
|
source: "email" | "manual" | "chat" | "api";
|
|
135
135
|
messageType: "message" | "internal-note" | "status-change";
|
|
@@ -173,29 +173,29 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
|
|
|
173
173
|
lastOutboundAt?: string | null | undefined;
|
|
174
174
|
closedAt?: string | null | undefined;
|
|
175
175
|
recordMetadata?: {} | null | undefined;
|
|
176
|
-
|
|
177
|
-
tags: string[];
|
|
178
|
-
assignedToUserId: string | null;
|
|
179
|
-
assignedToDisplayName: string | null;
|
|
180
|
-
firstResponseDueAt: string | null;
|
|
181
|
-
firstResponseAt: string | null;
|
|
182
|
-
nextResponseDueAt: string | null;
|
|
183
|
-
lastCustomerReplyAt: string | null;
|
|
184
|
-
lastAgentReplyAt: string | null;
|
|
185
|
-
};
|
|
186
|
-
source: "email" | "manual" | "chat" | "api";
|
|
187
|
-
status: "pending" | "open" | "closed";
|
|
188
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
189
|
-
subject: string;
|
|
176
|
+
status: "open" | "pending" | "closed";
|
|
190
177
|
conversationId: string;
|
|
191
178
|
userId: string | null;
|
|
192
179
|
teamId: string | null;
|
|
193
180
|
userDisplayName: string | null;
|
|
194
181
|
userPrimaryEmail: string | null;
|
|
195
182
|
userProfileImageUrl: string | null;
|
|
183
|
+
subject: string;
|
|
184
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
185
|
+
source: "email" | "manual" | "chat" | "api";
|
|
196
186
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
197
187
|
preview: string | null;
|
|
198
188
|
lastActivityAt: string;
|
|
189
|
+
metadata: {
|
|
190
|
+
assignedToUserId: string | null;
|
|
191
|
+
assignedToDisplayName: string | null;
|
|
192
|
+
tags: string[];
|
|
193
|
+
firstResponseDueAt: string | null;
|
|
194
|
+
firstResponseAt: string | null;
|
|
195
|
+
nextResponseDueAt: string | null;
|
|
196
|
+
lastCustomerReplyAt: string | null;
|
|
197
|
+
lastAgentReplyAt: string | null;
|
|
198
|
+
};
|
|
199
199
|
}[];
|
|
200
200
|
hasMore: boolean;
|
|
201
201
|
}, yup$1.AnyObject, {
|
|
@@ -211,43 +211,43 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
211
211
|
lastOutboundAt?: string | null | undefined;
|
|
212
212
|
closedAt?: string | null | undefined;
|
|
213
213
|
recordMetadata?: {} | null | undefined;
|
|
214
|
-
|
|
215
|
-
tags: string[];
|
|
216
|
-
assignedToUserId: string | null;
|
|
217
|
-
assignedToDisplayName: string | null;
|
|
218
|
-
firstResponseDueAt: string | null;
|
|
219
|
-
firstResponseAt: string | null;
|
|
220
|
-
nextResponseDueAt: string | null;
|
|
221
|
-
lastCustomerReplyAt: string | null;
|
|
222
|
-
lastAgentReplyAt: string | null;
|
|
223
|
-
};
|
|
224
|
-
source: "email" | "manual" | "chat" | "api";
|
|
225
|
-
status: "pending" | "open" | "closed";
|
|
226
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
227
|
-
subject: string;
|
|
214
|
+
status: "open" | "pending" | "closed";
|
|
228
215
|
conversationId: string;
|
|
229
216
|
userId: string | null;
|
|
230
217
|
teamId: string | null;
|
|
231
218
|
userDisplayName: string | null;
|
|
232
219
|
userPrimaryEmail: string | null;
|
|
233
220
|
userProfileImageUrl: string | null;
|
|
221
|
+
subject: string;
|
|
222
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
223
|
+
source: "email" | "manual" | "chat" | "api";
|
|
234
224
|
lastMessageType: "message" | "internal-note" | "status-change";
|
|
235
225
|
preview: string | null;
|
|
236
226
|
lastActivityAt: string;
|
|
227
|
+
metadata: {
|
|
228
|
+
assignedToUserId: string | null;
|
|
229
|
+
assignedToDisplayName: string | null;
|
|
230
|
+
tags: string[];
|
|
231
|
+
firstResponseDueAt: string | null;
|
|
232
|
+
firstResponseAt: string | null;
|
|
233
|
+
nextResponseDueAt: string | null;
|
|
234
|
+
lastCustomerReplyAt: string | null;
|
|
235
|
+
lastAgentReplyAt: string | null;
|
|
236
|
+
};
|
|
237
237
|
};
|
|
238
238
|
messages: {
|
|
239
|
-
|
|
240
|
-
body: string | null;
|
|
241
|
-
source: "email" | "manual" | "chat" | "api";
|
|
242
|
-
status: "pending" | "open" | "closed";
|
|
239
|
+
status: "open" | "pending" | "closed";
|
|
243
240
|
id: string;
|
|
244
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
245
|
-
subject: string;
|
|
246
241
|
conversationId: string;
|
|
247
242
|
userId: string | null;
|
|
248
243
|
teamId: string | null;
|
|
244
|
+
subject: string;
|
|
245
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
246
|
+
source: "email" | "manual" | "chat" | "api";
|
|
247
|
+
metadata: {} | null;
|
|
249
248
|
createdAt: string;
|
|
250
249
|
messageType: "message" | "internal-note" | "status-change";
|
|
250
|
+
body: string | null;
|
|
251
251
|
attachments: {}[];
|
|
252
252
|
sender: {
|
|
253
253
|
type: "user" | "agent" | "system";
|
|
@@ -257,8 +257,8 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
257
257
|
};
|
|
258
258
|
}[];
|
|
259
259
|
entryPoints: {
|
|
260
|
-
metadata: {} | null;
|
|
261
260
|
id: string;
|
|
261
|
+
metadata: {} | null;
|
|
262
262
|
createdAt: string;
|
|
263
263
|
updatedAt: string;
|
|
264
264
|
channelType: string;
|
|
@@ -16,9 +16,9 @@ declare const currentUserCrud: CrudSchemaFromOptions<{
|
|
|
16
16
|
is_anonymous: boolean;
|
|
17
17
|
is_restricted: boolean;
|
|
18
18
|
requires_totp_mfa: boolean;
|
|
19
|
-
primary_email_verified: boolean;
|
|
20
19
|
profile_image_url: string | null;
|
|
21
20
|
signed_up_at_millis: number;
|
|
21
|
+
primary_email_verified: boolean;
|
|
22
22
|
has_password: boolean;
|
|
23
23
|
otp_auth_enabled: boolean;
|
|
24
24
|
passkey_auth_enabled: boolean;
|
|
@@ -92,8 +92,8 @@ declare const currentUserCrud: CrudSchemaFromOptions<{
|
|
|
92
92
|
server_metadata?: {} | null | undefined;
|
|
93
93
|
display_name: string;
|
|
94
94
|
id: string;
|
|
95
|
-
profile_image_url: string | null;
|
|
96
95
|
created_at_millis: number;
|
|
96
|
+
profile_image_url: string | null;
|
|
97
97
|
} | null;
|
|
98
98
|
selected_team_id: string | null;
|
|
99
99
|
profile_image_url: string | null;
|