clarion-shared-types 1.0.109 → 1.0.110
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/cjs/modules/permission/enums/permission-actions.enum.js +2 -0
- package/dist/cjs/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/cjs/modules/user/index.js +1 -0
- package/dist/cjs/modules/user/index.js.map +1 -1
- package/dist/cjs/modules/user/interfaces/account-analytics.js +17 -0
- package/dist/cjs/modules/user/interfaces/account-analytics.js.map +1 -0
- package/dist/esm/modules/permission/enums/permission-actions.enum.js +2 -0
- package/dist/esm/modules/permission/enums/permission-actions.enum.js.map +1 -1
- package/dist/esm/modules/user/index.js +1 -0
- package/dist/esm/modules/user/index.js.map +1 -1
- package/dist/esm/modules/user/interfaces/account-analytics.js +16 -0
- package/dist/esm/modules/user/interfaces/account-analytics.js.map +1 -0
- package/dist/types/modules/permission/enums/permission-actions.enum.d.ts +1 -0
- package/dist/types/modules/user/index.d.ts +1 -0
- package/dist/types/modules/user/interfaces/account-analytics.d.ts +278 -0
- package/package.json +1 -1
|
@@ -41,6 +41,8 @@ var PermissionActions;
|
|
|
41
41
|
PermissionActions["READ_USER"] = "read:user";
|
|
42
42
|
PermissionActions["UPDATE_USER"] = "update:user";
|
|
43
43
|
PermissionActions["DELETE_USER"] = "delete:user";
|
|
44
|
+
// User Analytics - accounts, sign-ups, sign-ins, codes, guardians and deletions over a period, counts only.
|
|
45
|
+
PermissionActions["READ_USER_ANALYTICS"] = "read:user-analytics";
|
|
44
46
|
// Module: Incident
|
|
45
47
|
PermissionActions["CREATE_INCIDENT"] = "create:incident";
|
|
46
48
|
PermissionActions["READ_INCIDENT"] = "read:incident";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":";;;AAAA,IAAY,
|
|
1
|
+
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,4 +24,5 @@ __exportStar(require("./interfaces/guardian"), exports);
|
|
|
24
24
|
__exportStar(require("./interfaces/guardian-relation"), exports);
|
|
25
25
|
__exportStar(require("./interfaces/guardians-response"), exports);
|
|
26
26
|
__exportStar(require("./interfaces/user-analytics-data"), exports);
|
|
27
|
+
__exportStar(require("./interfaces/account-analytics"), exports);
|
|
27
28
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/user/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,qEAAmD;AACnD,wEAAsD;AAEtD,oDAAkC;AAClC,4DAA0C;AAC1C,4DAA0C;AAC1C,wDAAsC;AACtC,iEAA+C;AAC/C,kEAAgD;AAChD,mEAAiD"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/user/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2DAAyC;AACzC,qEAAmD;AACnD,wEAAsD;AAEtD,oDAAkC;AAClC,4DAA0C;AAC1C,4DAA0C;AAC1C,wDAAsC;AACtC,iEAA+C;AAC/C,kEAAgD;AAChD,mEAAiD;AACjD,iEAA+C"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Account analytics (the admin's User Analytics): who has an account and how they got
|
|
4
|
+
* one, whether they finished signing up, who signs in and how often, what goes wrong
|
|
5
|
+
* signing in, one-time codes and passwords, guardians, and who asked to leave.
|
|
6
|
+
*
|
|
7
|
+
* One read, computed by clarion-authentication from one consistent snapshot, so every
|
|
8
|
+
* number on a dashboard agrees with every other. Counts only: never a name, an e-mail
|
|
9
|
+
* address, a phone number or anything a user typed.
|
|
10
|
+
*
|
|
11
|
+
* Two kinds of source. Accounts, guardians and deletion requests are records the service
|
|
12
|
+
* has always kept, so their history goes back to the first account. Sign-ins, one-time
|
|
13
|
+
* codes and password changes come from the service's activity log, which begins on
|
|
14
|
+
* `activitySince`: before it, the only trace of a sign-in is each account's LAST one.
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
//# sourceMappingURL=account-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/user/interfaces/account-analytics.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -38,6 +38,8 @@ export var PermissionActions;
|
|
|
38
38
|
PermissionActions["READ_USER"] = "read:user";
|
|
39
39
|
PermissionActions["UPDATE_USER"] = "update:user";
|
|
40
40
|
PermissionActions["DELETE_USER"] = "delete:user";
|
|
41
|
+
// User Analytics - accounts, sign-ups, sign-ins, codes, guardians and deletions over a period, counts only.
|
|
42
|
+
PermissionActions["READ_USER_ANALYTICS"] = "read:user-analytics";
|
|
41
43
|
// Module: Incident
|
|
42
44
|
PermissionActions["CREATE_INCIDENT"] = "create:incident";
|
|
43
45
|
PermissionActions["READ_INCIDENT"] = "read:incident";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"permission-actions.enum.js","sourceRoot":"","sources":["../../../../../src/modules/permission/enums/permission-actions.enum.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,4 +8,5 @@ export * from './interfaces/guardian';
|
|
|
8
8
|
export * from './interfaces/guardian-relation';
|
|
9
9
|
export * from './interfaces/guardians-response';
|
|
10
10
|
export * from './interfaces/user-analytics-data';
|
|
11
|
+
export * from './interfaces/account-analytics';
|
|
11
12
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/user/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/user/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AAEtD,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,iCAAiC,CAAC;AAChD,cAAc,kCAAkC,CAAC;AACjD,cAAc,gCAAgC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account analytics (the admin's User Analytics): who has an account and how they got
|
|
3
|
+
* one, whether they finished signing up, who signs in and how often, what goes wrong
|
|
4
|
+
* signing in, one-time codes and passwords, guardians, and who asked to leave.
|
|
5
|
+
*
|
|
6
|
+
* One read, computed by clarion-authentication from one consistent snapshot, so every
|
|
7
|
+
* number on a dashboard agrees with every other. Counts only: never a name, an e-mail
|
|
8
|
+
* address, a phone number or anything a user typed.
|
|
9
|
+
*
|
|
10
|
+
* Two kinds of source. Accounts, guardians and deletion requests are records the service
|
|
11
|
+
* has always kept, so their history goes back to the first account. Sign-ins, one-time
|
|
12
|
+
* codes and password changes come from the service's activity log, which begins on
|
|
13
|
+
* `activitySince`: before it, the only trace of a sign-in is each account's LAST one.
|
|
14
|
+
*/
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=account-analytics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"account-analytics.js","sourceRoot":"","sources":["../../../../../src/modules/user/interfaces/account-analytics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
|
|
@@ -26,6 +26,7 @@ export declare enum PermissionActions {
|
|
|
26
26
|
READ_USER = "read:user",
|
|
27
27
|
UPDATE_USER = "update:user",
|
|
28
28
|
DELETE_USER = "delete:user",
|
|
29
|
+
READ_USER_ANALYTICS = "read:user-analytics",
|
|
29
30
|
CREATE_INCIDENT = "create:incident",
|
|
30
31
|
READ_INCIDENT = "read:incident",
|
|
31
32
|
UPDATE_INCIDENT = "update:incident",
|
|
@@ -0,0 +1,278 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Account analytics (the admin's User Analytics): who has an account and how they got
|
|
3
|
+
* one, whether they finished signing up, who signs in and how often, what goes wrong
|
|
4
|
+
* signing in, one-time codes and passwords, guardians, and who asked to leave.
|
|
5
|
+
*
|
|
6
|
+
* One read, computed by clarion-authentication from one consistent snapshot, so every
|
|
7
|
+
* number on a dashboard agrees with every other. Counts only: never a name, an e-mail
|
|
8
|
+
* address, a phone number or anything a user typed.
|
|
9
|
+
*
|
|
10
|
+
* Two kinds of source. Accounts, guardians and deletion requests are records the service
|
|
11
|
+
* has always kept, so their history goes back to the first account. Sign-ins, one-time
|
|
12
|
+
* codes and password changes come from the service's activity log, which begins on
|
|
13
|
+
* `activitySince`: before it, the only trace of a sign-in is each account's LAST one.
|
|
14
|
+
*/
|
|
15
|
+
/** How the period is cut into points for the charts. Chosen by the service from the length of the period. */
|
|
16
|
+
export type AccountAnalyticsBucket = 'hour' | 'day' | 'week' | 'month';
|
|
17
|
+
export interface AccountAnalyticsRange {
|
|
18
|
+
/** Inclusive, ISO 8601. The first account when the period asked for was "forever". */
|
|
19
|
+
from: string;
|
|
20
|
+
/** Exclusive, ISO 8601. */
|
|
21
|
+
to: string;
|
|
22
|
+
bucket: AccountAnalyticsBucket;
|
|
23
|
+
/** IANA time zone the buckets, the days and the hour-of-week grid are cut in. */
|
|
24
|
+
timeZone: string;
|
|
25
|
+
}
|
|
26
|
+
/** A count by a key (a status, a role, a band), largest first unless the section says otherwise. */
|
|
27
|
+
export interface AccountAnalyticsCount<K extends string = string> {
|
|
28
|
+
key: K;
|
|
29
|
+
count: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* What an account is for, from its roles - one per account, the first that applies:
|
|
33
|
+
* - PLATFORM Super-Admin;
|
|
34
|
+
* - ORGANIZATION an organization's staff (any Organization:* role);
|
|
35
|
+
* - CONTROL_CENTRE a control room's staff (any Control-Centre:* role);
|
|
36
|
+
* - RESPONDER a responder;
|
|
37
|
+
* - CORPORATE_CLIENT a corporate client's own staff;
|
|
38
|
+
* - MOBILE somebody using the app (Mobile-User);
|
|
39
|
+
* - NONE no role.
|
|
40
|
+
*/
|
|
41
|
+
export type AccountKind = 'PLATFORM' | 'ORGANIZATION' | 'CONTROL_CENTRE' | 'RESPONDER' | 'CORPORATE_CLIENT' | 'MOBILE' | 'NONE';
|
|
42
|
+
/** How long ago an account last signed in, as it stands now. */
|
|
43
|
+
export type AccountRecencyBand = '1d' | '7d' | '30d' | '90d' | 'older' | 'never';
|
|
44
|
+
/** A row per brand of app: accounts that belong to it. */
|
|
45
|
+
export interface AccountAnalyticsAppRow {
|
|
46
|
+
/** IncidentAppId: Upesy, G4S, GardaWorld, GRM, Pasha... */
|
|
47
|
+
app: string;
|
|
48
|
+
/** At the end of the period. */
|
|
49
|
+
total: number;
|
|
50
|
+
/** Created in the period. */
|
|
51
|
+
created: number;
|
|
52
|
+
/** Signed in during the period (as far as is known - see `AccountAnalyticsAccounts.activeInPeriod`). */
|
|
53
|
+
active: number;
|
|
54
|
+
}
|
|
55
|
+
export interface AccountAnalyticsKindRow {
|
|
56
|
+
kind: AccountKind;
|
|
57
|
+
total: number;
|
|
58
|
+
created: number;
|
|
59
|
+
active: number;
|
|
60
|
+
}
|
|
61
|
+
/** Of the accounts created in the period, how far each got - as they stand now. */
|
|
62
|
+
export interface AccountAnalyticsFunnel {
|
|
63
|
+
created: number;
|
|
64
|
+
/** Confirmed their phone or e-mail with a one-time code. */
|
|
65
|
+
verified: number;
|
|
66
|
+
acceptedTerms: number;
|
|
67
|
+
/** Signed in at least once. */
|
|
68
|
+
signedIn: number;
|
|
69
|
+
}
|
|
70
|
+
export interface AccountAnalyticsAccounts {
|
|
71
|
+
/** Null for "forever". */
|
|
72
|
+
totalAtStart: number | null;
|
|
73
|
+
totalAtEnd: number;
|
|
74
|
+
created: number;
|
|
75
|
+
/** Of those: somebody using the app, and everybody else (staff of any kind). */
|
|
76
|
+
createdMobile: number;
|
|
77
|
+
createdStaff: number;
|
|
78
|
+
/**
|
|
79
|
+
* Accounts that signed in during the period: every account with a sign-in in the
|
|
80
|
+
* activity log, and - for the time before the log - every account whose LAST sign-in
|
|
81
|
+
* falls in the period. Exact from `activitySince` on; a floor before it.
|
|
82
|
+
*/
|
|
83
|
+
activeInPeriod: number;
|
|
84
|
+
/** Active accounts that were created in an earlier period. */
|
|
85
|
+
returning: number;
|
|
86
|
+
funnel: AccountAnalyticsFunnel;
|
|
87
|
+
/** Now: never confirmed their phone or e-mail with a one-time code. */
|
|
88
|
+
pendingNow: number;
|
|
89
|
+
/** Now: never signed in. */
|
|
90
|
+
neverSignedIn: number;
|
|
91
|
+
/** Now: last signed in more than 90 days ago. */
|
|
92
|
+
dormant: number;
|
|
93
|
+
/** Hours from creating the account to its first sign-in, for first sign-ins in the period (activity log only). */
|
|
94
|
+
medianHoursToFirstSignIn: number | null;
|
|
95
|
+
byKind: AccountAnalyticsKindRow[];
|
|
96
|
+
byApp: AccountAnalyticsAppRow[];
|
|
97
|
+
/** At the end of the period: an account is counted under every role it holds. */
|
|
98
|
+
byRole: AccountAnalyticsCount[];
|
|
99
|
+
/** Now: active, pending, inactive. */
|
|
100
|
+
byStatus: AccountAnalyticsCount[];
|
|
101
|
+
/** At the end of the period: KE, UG, TZ. */
|
|
102
|
+
byCountry: AccountAnalyticsCount[];
|
|
103
|
+
/** Now, fixed order, zeros included. */
|
|
104
|
+
recency: AccountAnalyticsCount<AccountRecencyBand>[];
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* How somebody signed in:
|
|
108
|
+
* - PASSWORD e-mail and password (the admin and the web);
|
|
109
|
+
* - OTP phone number and a one-time code (the app);
|
|
110
|
+
* - REVIEWER the app-store reviewers' account.
|
|
111
|
+
*/
|
|
112
|
+
export type AccountSignInMethod = 'PASSWORD' | 'OTP' | 'REVIEWER';
|
|
113
|
+
export interface AccountAnalyticsMethodRow {
|
|
114
|
+
method: string;
|
|
115
|
+
succeeded: number;
|
|
116
|
+
failed: number;
|
|
117
|
+
}
|
|
118
|
+
export interface AccountAnalyticsSignIns {
|
|
119
|
+
attempts: number;
|
|
120
|
+
succeeded: number;
|
|
121
|
+
failed: number;
|
|
122
|
+
/** succeeded / attempts; null with none. */
|
|
123
|
+
successRate: number | null;
|
|
124
|
+
/** Distinct accounts that signed in. */
|
|
125
|
+
users: number;
|
|
126
|
+
/** An account's very first sign-in. */
|
|
127
|
+
firstSignIns: number;
|
|
128
|
+
/** Failed for an e-mail or a code that matches no account (counted, never stored). */
|
|
129
|
+
unknownAccount: number;
|
|
130
|
+
byMethod: AccountAnalyticsMethodRow[];
|
|
131
|
+
/** INVALID_CREDENTIALS, UNVERIFIED, UNKNOWN_ACCOUNT, INVALID_TOKEN, ERROR... */
|
|
132
|
+
failureReasons: AccountAnalyticsCount[];
|
|
133
|
+
averageDailyUsers: number;
|
|
134
|
+
peakDailyUsers: number;
|
|
135
|
+
/** YYYY-MM-DD, local to the range's time zone. */
|
|
136
|
+
peakDay: string | null;
|
|
137
|
+
}
|
|
138
|
+
export interface AccountAnalyticsOtpActionRow {
|
|
139
|
+
/** What the code was for: login, register, verify_phone, reset_password, create_user... */
|
|
140
|
+
action: string;
|
|
141
|
+
sent: number;
|
|
142
|
+
verified: number;
|
|
143
|
+
}
|
|
144
|
+
export interface AccountAnalyticsOtp {
|
|
145
|
+
/** First sends and resends. */
|
|
146
|
+
sent: number;
|
|
147
|
+
resent: number;
|
|
148
|
+
/** Refused for asking too often. */
|
|
149
|
+
refused: number;
|
|
150
|
+
verified: number;
|
|
151
|
+
failed: number;
|
|
152
|
+
/** verified / (verified + failed); null with none. */
|
|
153
|
+
successRate: number | null;
|
|
154
|
+
/** From a code being sent to it being confirmed. */
|
|
155
|
+
medianSecondsToVerify: number | null;
|
|
156
|
+
byAction: AccountAnalyticsOtpActionRow[];
|
|
157
|
+
/** INVALID_OTP, EXPIRED_OTP, NO_OTP, INVALID_TOKEN. */
|
|
158
|
+
failureReasons: AccountAnalyticsCount[];
|
|
159
|
+
}
|
|
160
|
+
export interface AccountAnalyticsPasswords {
|
|
161
|
+
resetRequested: number;
|
|
162
|
+
resetCompleted: number;
|
|
163
|
+
resetFailed: number;
|
|
164
|
+
changed: number;
|
|
165
|
+
changeFailed: number;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The people an account holder chose to be alerted when they raise an SOS: app users
|
|
169
|
+
* (a two-way link, which the guardian accepts) and people reached by SMS.
|
|
170
|
+
*/
|
|
171
|
+
export interface AccountAnalyticsGuardians {
|
|
172
|
+
/** Accepted app-guardian links at the end of the period. */
|
|
173
|
+
links: number;
|
|
174
|
+
/** Links made in the period. */
|
|
175
|
+
linksCreated: number;
|
|
176
|
+
/** Accounts with at least one accepted app guardian, at the end of the period. */
|
|
177
|
+
protectedAccounts: number;
|
|
178
|
+
/** Distinct app users guarding somebody. */
|
|
179
|
+
guardians: number;
|
|
180
|
+
/** Share of app (Mobile-User) accounts with at least one guardian of either kind, now. */
|
|
181
|
+
mobileCoverage: number | null;
|
|
182
|
+
pending: number;
|
|
183
|
+
rejected: number;
|
|
184
|
+
/** Links with the guardian marked primary. */
|
|
185
|
+
primary: number;
|
|
186
|
+
/** Guardians reached by SMS, and the accounts that have one - now. */
|
|
187
|
+
smsGuardians: number;
|
|
188
|
+
accountsWithSmsGuardians: number;
|
|
189
|
+
byRelationship: AccountAnalyticsCount[];
|
|
190
|
+
}
|
|
191
|
+
/** Requests to delete an account, and why. */
|
|
192
|
+
export interface AccountAnalyticsDeletions {
|
|
193
|
+
requested: number;
|
|
194
|
+
/** Every request ever made in scope. */
|
|
195
|
+
total: number;
|
|
196
|
+
/** Requesters whose account still exists now. */
|
|
197
|
+
stillPresent: number;
|
|
198
|
+
byReason: AccountAnalyticsCount[];
|
|
199
|
+
}
|
|
200
|
+
export interface AccountAnalyticsPoint {
|
|
201
|
+
/** The bucket's start, local to the range's time zone, without an offset ("2026-09-21T00:00:00"). */
|
|
202
|
+
bucket: string;
|
|
203
|
+
created: number;
|
|
204
|
+
createdMobile: number;
|
|
205
|
+
createdStaff: number;
|
|
206
|
+
/** Of those created in the bucket: verified, signed in - as they stand now. */
|
|
207
|
+
createdVerified: number;
|
|
208
|
+
createdSignedIn: number;
|
|
209
|
+
/** Accounts in existence at the end of the bucket. */
|
|
210
|
+
totalAccounts: number;
|
|
211
|
+
signIns: number;
|
|
212
|
+
failedSignIns: number;
|
|
213
|
+
/** Distinct accounts that signed in during the bucket (activity log). */
|
|
214
|
+
activeUsers: number;
|
|
215
|
+
otpSent: number;
|
|
216
|
+
otpVerified: number;
|
|
217
|
+
deletionRequests: number;
|
|
218
|
+
guardianLinks: number;
|
|
219
|
+
}
|
|
220
|
+
/** When accounts are created and used, by weekday (1 = Monday) and hour. */
|
|
221
|
+
export interface AccountAnalyticsHeatCell {
|
|
222
|
+
weekday: number;
|
|
223
|
+
hour: number;
|
|
224
|
+
signUps: number;
|
|
225
|
+
signIns: number;
|
|
226
|
+
}
|
|
227
|
+
/** The previous period of the same length, for the change on each headline figure. Absent for "forever". */
|
|
228
|
+
export interface AccountAnalyticsPrevious {
|
|
229
|
+
from: string;
|
|
230
|
+
to: string;
|
|
231
|
+
created: number;
|
|
232
|
+
activeInPeriod: number;
|
|
233
|
+
signIns: number;
|
|
234
|
+
failedSignIns: number;
|
|
235
|
+
otpSent: number;
|
|
236
|
+
otpVerified: number;
|
|
237
|
+
deletionRequests: number;
|
|
238
|
+
guardianLinks: number;
|
|
239
|
+
}
|
|
240
|
+
/** A Super-Admin's view of every organization: one row each, biggest first. */
|
|
241
|
+
export interface AccountAnalyticsOrganizationRow {
|
|
242
|
+
organizationId: number;
|
|
243
|
+
total: number;
|
|
244
|
+
created: number;
|
|
245
|
+
active: number;
|
|
246
|
+
mobile: number;
|
|
247
|
+
staff: number;
|
|
248
|
+
signIns: number;
|
|
249
|
+
failedSignIns: number;
|
|
250
|
+
}
|
|
251
|
+
export interface AccountAnalytics {
|
|
252
|
+
/** Whose figures: one organization (and one control centre in it), or null for every organization. */
|
|
253
|
+
organizationId: number | null;
|
|
254
|
+
controlCentreId: number | null;
|
|
255
|
+
range: AccountAnalyticsRange;
|
|
256
|
+
generatedAt: string;
|
|
257
|
+
/** When the activity log's first record in scope was made; null while it is empty. */
|
|
258
|
+
activitySince: string | null;
|
|
259
|
+
previous: AccountAnalyticsPrevious | null;
|
|
260
|
+
timeline: AccountAnalyticsPoint[];
|
|
261
|
+
/** All 168 hours of the week, Monday first, zeros included. */
|
|
262
|
+
heatmap: AccountAnalyticsHeatCell[];
|
|
263
|
+
accounts: AccountAnalyticsAccounts;
|
|
264
|
+
signIns: AccountAnalyticsSignIns;
|
|
265
|
+
otp: AccountAnalyticsOtp;
|
|
266
|
+
passwords: AccountAnalyticsPasswords;
|
|
267
|
+
guardians: AccountAnalyticsGuardians;
|
|
268
|
+
deletions: AccountAnalyticsDeletions;
|
|
269
|
+
/** A Super-Admin looking at every organization only. */
|
|
270
|
+
byOrganization?: AccountAnalyticsOrganizationRow[];
|
|
271
|
+
}
|
|
272
|
+
/** What a dashboard asks: the period, and - for a Super-Admin - whose figures. */
|
|
273
|
+
export interface AccountAnalyticsQuery {
|
|
274
|
+
from?: string;
|
|
275
|
+
to?: string;
|
|
276
|
+
timeZone?: string;
|
|
277
|
+
organizationId?: number;
|
|
278
|
+
}
|