@excali-boards/boards-api-client 1.1.41 → 1.1.43

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.
@@ -0,0 +1,60 @@
1
+ import { BoardsManager } from '../core/manager';
2
+ export declare class APIAnalytics {
3
+ private web;
4
+ constructor(web: BoardsManager);
5
+ getUserAnalytics({ auth }: AnalyticsFunctionsInput['getUserAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithBoard[]>>;
6
+ getBoardAnalytics({ auth, boardId, categoryId, groupId }: AnalyticsFunctionsInput['getBoardAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUser[]>>;
7
+ getCategoryAnalytics({ auth, categoryId, groupId }: AnalyticsFunctionsInput['getCategoryAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUserAndBoard[]>>;
8
+ getGroupAnalytics({ auth, groupId }: AnalyticsFunctionsInput['getGroupAnalytics']): Promise<import("..").WebResponse<UserBoardActivityWithUserAndBoard[]>>;
9
+ }
10
+ export type AnalyticsFunctionsInput = {
11
+ 'getUserAnalytics': {
12
+ auth: string;
13
+ };
14
+ 'getBoardAnalytics': {
15
+ auth: string;
16
+ boardId: string;
17
+ categoryId: string;
18
+ groupId: string;
19
+ };
20
+ 'getCategoryAnalytics': {
21
+ auth: string;
22
+ categoryId: string;
23
+ groupId: string;
24
+ };
25
+ 'getGroupAnalytics': {
26
+ auth: string;
27
+ groupId: string;
28
+ };
29
+ };
30
+ export type ActivityAnalytics = {
31
+ totalSessions: number;
32
+ totalActiveSeconds: number;
33
+ totalActions: number;
34
+ lastActivityAt: Date;
35
+ };
36
+ export type UserBoardActivityWithBoard = ActivityAnalytics & {
37
+ board: {
38
+ name: string;
39
+ boardId: string;
40
+ };
41
+ };
42
+ export type UserBoardActivityWithUser = ActivityAnalytics & {
43
+ user: {
44
+ userId: string;
45
+ displayName: string;
46
+ avatarUrl: string | null;
47
+ };
48
+ };
49
+ export type UserBoardActivityWithUserAndBoard = ActivityAnalytics & {
50
+ user: {
51
+ userId: string;
52
+ displayName: string;
53
+ avatarUrl: string | null;
54
+ };
55
+ board: {
56
+ name: string;
57
+ boardId: string;
58
+ categoryId: string;
59
+ };
60
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.APIAnalytics = void 0;
4
+ // Data.
5
+ class APIAnalytics {
6
+ web;
7
+ constructor(web) {
8
+ this.web = web;
9
+ }
10
+ // Methods.
11
+ async getUserAnalytics({ auth }) {
12
+ return await this.web.request({
13
+ method: 'GET', auth,
14
+ endpoint: this.web.qp('/analytics/user'),
15
+ });
16
+ }
17
+ async getBoardAnalytics({ auth, boardId, categoryId, groupId }) {
18
+ return await this.web.request({
19
+ method: 'GET', auth,
20
+ endpoint: this.web.qp(`/groups/${groupId}/categories/${categoryId}/boards/${boardId}/analytics`),
21
+ });
22
+ }
23
+ async getCategoryAnalytics({ auth, categoryId, groupId }) {
24
+ return await this.web.request({
25
+ method: 'GET', auth,
26
+ endpoint: this.web.qp(`/groups/${groupId}/categories/${categoryId}/analytics`),
27
+ });
28
+ }
29
+ async getGroupAnalytics({ auth, groupId }) {
30
+ return await this.web.request({
31
+ method: 'GET', auth,
32
+ endpoint: this.web.qp(`/groups/${groupId}/analytics`),
33
+ });
34
+ }
35
+ }
36
+ exports.APIAnalytics = APIAnalytics;
@@ -2,6 +2,7 @@ import { APIPermissions } from '../classes/permissions';
2
2
  import { RequestMethod, WebResponse } from '../types';
3
3
  import { APIFlashcards } from '../classes/flashcards';
4
4
  import { APICategories } from '../classes/categories';
5
+ import { APIAnalytics } from '../classes/analytics';
5
6
  import { APISessions } from '../classes/sessions';
6
7
  import { APICalendar } from '../classes/calendar';
7
8
  import { APIMetrics } from '../classes/metrics';
@@ -17,6 +18,7 @@ export declare class BoardsManager {
17
18
  readonly permissions: APIPermissions;
18
19
  readonly categories: APICategories;
19
20
  readonly flashcards: APIFlashcards;
21
+ readonly analytics: APIAnalytics;
20
22
  readonly calendar: APICalendar;
21
23
  readonly sessions: APISessions;
22
24
  readonly invites: APIInvites;
@@ -7,6 +7,7 @@ exports.BoardsManager = void 0;
7
7
  const permissions_1 = require("../classes/permissions");
8
8
  const flashcards_1 = require("../classes/flashcards");
9
9
  const categories_1 = require("../classes/categories");
10
+ const analytics_1 = require("../classes/analytics");
10
11
  const sessions_1 = require("../classes/sessions");
11
12
  const calendar_1 = require("../classes/calendar");
12
13
  const metrics_1 = require("../classes/metrics");
@@ -24,6 +25,7 @@ class BoardsManager {
24
25
  permissions = new permissions_1.APIPermissions(this);
25
26
  categories = new categories_1.APICategories(this);
26
27
  flashcards = new flashcards_1.APIFlashcards(this);
28
+ analytics = new analytics_1.APIAnalytics(this);
27
29
  calendar = new calendar_1.APICalendar(this);
28
30
  sessions = new sessions_1.APISessions(this);
29
31
  invites = new invites_1.APIInvites(this);
@@ -1,15 +1,5 @@
1
- import { TSPrisma, BoardType } from '../../prisma/generated/default';
2
1
  import { BoardRole, CategoryRole, GroupRole } from './vars';
3
- export type User = TSPrisma.TSPrismaModelsFull['User'];
4
- export type Group = TSPrisma.TSPrismaModelsFull['Group'];
5
- export type Category = TSPrisma.TSPrismaModelsFull['Category'];
6
- export type Board = TSPrisma.TSPrismaModelsFull['Board'];
7
- export type File = TSPrisma.TSPrismaModelsFull['File'];
8
- export type LoginMethod = TSPrisma.TSPrismaModelsFull['LoginMethod'];
9
- export type GroupPermission = TSPrisma.TSPrismaModelsFull['GroupPermission'];
10
- export type CategoryPermission = TSPrisma.TSPrismaModelsFull['CategoryPermission'];
11
- export type BoardPermission = TSPrisma.TSPrismaModelsFull['BoardPermission'];
12
- export type Invite = TSPrisma.TSPrismaModelsFull['Invite'];
2
+ import { BoardType } from '../../prisma/generated/default';
13
3
  export type UserRole = BoardRole | CategoryRole | GroupRole | GlobalRole;
14
4
  export declare enum GlobalRole {
15
5
  Developer = "Developer"
package/dist/index.d.ts CHANGED
@@ -6,6 +6,7 @@ export * from './external/vars';
6
6
  export * from './classes/permissions';
7
7
  export * from './classes/categories';
8
8
  export * from './classes/flashcards';
9
+ export * from './classes/analytics';
9
10
  export * from './classes/calendar';
10
11
  export * from './classes/sessions';
11
12
  export * from './classes/invites';
package/dist/index.js CHANGED
@@ -22,6 +22,7 @@ __exportStar(require("./external/vars"), exports);
22
22
  __exportStar(require("./classes/permissions"), exports);
23
23
  __exportStar(require("./classes/categories"), exports);
24
24
  __exportStar(require("./classes/flashcards"), exports);
25
+ __exportStar(require("./classes/analytics"), exports);
25
26
  __exportStar(require("./classes/calendar"), exports);
26
27
  __exportStar(require("./classes/sessions"), exports);
27
28
  __exportStar(require("./classes/invites"), exports);
@@ -1 +1 @@
1
- {"root":["../src/index.ts","../src/types.ts","../src/classes/admin.ts","../src/classes/boards.ts","../src/classes/calendar.ts","../src/classes/categories.ts","../src/classes/files.ts","../src/classes/flashcards.ts","../src/classes/groups.ts","../src/classes/invites.ts","../src/classes/metrics.ts","../src/classes/permissions.ts","../src/classes/sessions.ts","../src/classes/users.ts","../src/classes/utils.ts","../src/core/manager.ts","../src/core/utils.ts","../src/external/types.ts","../src/external/vars.ts"],"version":"5.9.2"}
1
+ {"root":["../src/index.ts","../src/types.ts","../src/classes/admin.ts","../src/classes/analytics.ts","../src/classes/boards.ts","../src/classes/calendar.ts","../src/classes/categories.ts","../src/classes/files.ts","../src/classes/flashcards.ts","../src/classes/groups.ts","../src/classes/invites.ts","../src/classes/metrics.ts","../src/classes/permissions.ts","../src/classes/sessions.ts","../src/classes/users.ts","../src/classes/utils.ts","../src/core/manager.ts","../src/core/utils.ts","../src/external/types.ts","../src/external/vars.ts"],"version":"5.9.2"}
package/dist/types.d.ts CHANGED
@@ -4,7 +4,7 @@ export type WebResponse<T, S extends StatusWebCode = StatusWebCode> = S extends
4
4
  data: T;
5
5
  } : {
6
6
  status: S;
7
- error: string;
7
+ error: string | string[];
8
8
  };
9
9
  export type Paginated<T> = {
10
10
  data: T extends (infer U)[] ? U[] : T[];
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.1.41",
2
+ "version": "1.1.43",
3
3
  "name": "@excali-boards/boards-api-client",
4
4
  "description": "A simple API client for the Boards API.",
5
5
  "repository": "https://github.com/Excali-Boards/boards-api-client",
@@ -47,6 +47,33 @@ model Board {
47
47
 
48
48
  files File[]
49
49
  boardPermission BoardPermission[]
50
+ userActivities UserBoardActivity[]
51
+
52
+ @@index([categoryId])
53
+ @@index([index])
54
+ }
55
+
56
+ model UserBoardActivity {
57
+ dbId String @id @default(uuid())
58
+
59
+ userId String
60
+ user User @relation(fields: [userId], references: [userId], onDelete: Cascade)
61
+
62
+ boardId String
63
+ board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)
64
+
65
+ totalSessions Int @default(0)
66
+ totalActiveSeconds Int @default(0)
67
+
68
+ totalActions Int @default(0)
69
+ lastActivityAt DateTime @default(now())
70
+
71
+ createdAt DateTime @default(now())
72
+ updatedAt DateTime @updatedAt
73
+
74
+ @@unique([userId, boardId])
75
+ @@index([boardId])
76
+ @@index([lastActivityAt])
50
77
  }
51
78
 
52
79
  model File {
@@ -59,4 +86,6 @@ model File {
59
86
 
60
87
  boardId String
61
88
  board Board @relation(fields: [boardId], references: [boardId], onDelete: Cascade)
89
+
90
+ @@index([boardId])
62
91
  }
@@ -10,7 +10,7 @@ model User {
10
10
 
11
11
  mainLoginType Platforms
12
12
  loginMethods LoginMethod[]
13
-
13
+
14
14
  invitedBy String?
15
15
  registrationMethod RegistrationMethod @default(direct)
16
16
 
@@ -20,9 +20,10 @@ model User {
20
20
 
21
21
  flashcardProgress DeckProgress[]
22
22
 
23
- sessions Session[]
24
- createdEvents Event[]
25
- createdInvites Invite[]
23
+ sessions Session[]
24
+ createdEvents Event[]
25
+ createdInvites Invite[]
26
+ boardActivities UserBoardActivity[]
26
27
  }
27
28
 
28
29
  model Session {