@abyss-project/main 1.0.66 → 1.0.67
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/api/index.d.ts +1 -0
- package/dist/api/index.js +1 -0
- package/dist/api/short-link.api.d.ts +15 -0
- package/dist/api/short-link.api.js +58 -0
- package/dist/types/enum/abyss-application-event.enum.d.ts +3 -0
- package/dist/types/enum/abyss-application-event.enum.js +3 -0
- package/dist/types/interface/api/index.d.ts +4 -0
- package/dist/types/interface/api/index.js +4 -0
- package/dist/types/interface/api/requests/short-link.admin.request.d.ts +26 -0
- package/dist/types/interface/api/requests/short-link.admin.request.js +2 -0
- package/dist/types/interface/api/requests/short-link.request.d.ts +66 -0
- package/dist/types/interface/api/requests/short-link.request.js +2 -0
- package/dist/types/interface/api/responses/short-link.admin.response.d.ts +14 -0
- package/dist/types/interface/api/responses/short-link.admin.response.js +2 -0
- package/dist/types/interface/api/responses/short-link.response.d.ts +35 -0
- package/dist/types/interface/api/responses/short-link.response.js +2 -0
- package/dist/types/interface/index.d.ts +2 -0
- package/dist/types/interface/index.js +2 -0
- package/dist/types/interface/models/project.model.d.ts +2 -0
- package/dist/types/interface/models/short-link-click.model.d.ts +18 -0
- package/dist/types/interface/models/short-link-click.model.js +2 -0
- package/dist/types/interface/models/short-link.model.d.ts +50 -0
- package/dist/types/interface/models/short-link.model.js +2 -0
- package/dist/types/interface/models/user.model.d.ts +2 -1
- package/package.json +1 -1
package/dist/api/index.d.ts
CHANGED
package/dist/api/index.js
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { IGetShortLinkParams, IGetShortLinkResponse, IGetShortLinkBySlugParams, IGetShortLinkBySlugResponse, IValidateShortLinkPasswordBody, IValidateShortLinkPasswordResponse, IPaginateShortLinkQuery, IPaginateShortLinkResponse, IPaginateUserShortLinkQuery, IPaginateProjectShortLinkParams, IPaginateProjectShortLinkQuery, ICreateShortLinkBody, ICreateShortLinkResponse, ICreateForProjectShortLinkParams, IUpdateShortLinkParams, IUpdateShortLinkBody, IUpdateShortLinkResponse, IDeleteShortLinkParams, IDeleteShortLinkResponse, IGetShortLinkStatsParams, IGetShortLinkStatsQuery, IGetShortLinkStatsResponse } from '../types';
|
|
2
|
+
export declare const shortLinkApi: {
|
|
3
|
+
get: (params: IGetShortLinkParams) => Promise<IGetShortLinkResponse>;
|
|
4
|
+
getBySlug: (params: IGetShortLinkBySlugParams) => Promise<IGetShortLinkBySlugResponse>;
|
|
5
|
+
validatePassword: (params: IGetShortLinkBySlugParams, body: IValidateShortLinkPasswordBody) => Promise<IValidateShortLinkPasswordResponse>;
|
|
6
|
+
paginate: (query: IPaginateShortLinkQuery) => Promise<IPaginateShortLinkResponse>;
|
|
7
|
+
paginateUser: (query: IPaginateUserShortLinkQuery) => Promise<IPaginateShortLinkResponse>;
|
|
8
|
+
paginateProject: (params: IPaginateProjectShortLinkParams, query: IPaginateProjectShortLinkQuery) => Promise<IPaginateShortLinkResponse>;
|
|
9
|
+
create: (body: ICreateShortLinkBody) => Promise<ICreateShortLinkResponse>;
|
|
10
|
+
createAnonymous: (body: ICreateShortLinkBody) => Promise<ICreateShortLinkResponse>;
|
|
11
|
+
createForProject: (params: ICreateForProjectShortLinkParams, body: ICreateShortLinkBody) => Promise<ICreateShortLinkResponse>;
|
|
12
|
+
update: (params: IUpdateShortLinkParams, body: IUpdateShortLinkBody) => Promise<IUpdateShortLinkResponse>;
|
|
13
|
+
delete: (params: IDeleteShortLinkParams) => Promise<IDeleteShortLinkResponse>;
|
|
14
|
+
getStats: (params: IGetShortLinkStatsParams, query?: IGetShortLinkStatsQuery) => Promise<IGetShortLinkStatsResponse>;
|
|
15
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.shortLinkApi = void 0;
|
|
4
|
+
const index_1 = require("../index");
|
|
5
|
+
exports.shortLinkApi = {
|
|
6
|
+
get: async (params) => {
|
|
7
|
+
const response = await index_1.AbyssCore.axios.get(`/short-link/${params.shortLinkId}`);
|
|
8
|
+
return response.data;
|
|
9
|
+
},
|
|
10
|
+
getBySlug: async (params) => {
|
|
11
|
+
const response = await index_1.AbyssCore.axios.get(`/short-link/slug/${params.slug}`);
|
|
12
|
+
return response.data;
|
|
13
|
+
},
|
|
14
|
+
validatePassword: async (params, body) => {
|
|
15
|
+
const response = await index_1.AbyssCore.axios.post(`/short-link/slug/${params.slug}/validate-password`, body);
|
|
16
|
+
return response.data;
|
|
17
|
+
},
|
|
18
|
+
paginate: async (query) => {
|
|
19
|
+
const response = await index_1.AbyssCore.axios.get('/short-link/paginate', { params: query });
|
|
20
|
+
return response.data;
|
|
21
|
+
},
|
|
22
|
+
paginateUser: async (query) => {
|
|
23
|
+
const response = await index_1.AbyssCore.axios.get('/short-link/user/paginate', { params: query });
|
|
24
|
+
return response.data;
|
|
25
|
+
},
|
|
26
|
+
paginateProject: async (params, query) => {
|
|
27
|
+
const response = await index_1.AbyssCore.axios.get(`/short-link/project/${params.projectId}/paginate`, {
|
|
28
|
+
params: query,
|
|
29
|
+
});
|
|
30
|
+
return response.data;
|
|
31
|
+
},
|
|
32
|
+
create: async (body) => {
|
|
33
|
+
const response = await index_1.AbyssCore.axios.post('/short-link/create', body);
|
|
34
|
+
return response.data;
|
|
35
|
+
},
|
|
36
|
+
createAnonymous: async (body) => {
|
|
37
|
+
const response = await index_1.AbyssCore.axios.post('/short-link/create-anonymous', body);
|
|
38
|
+
return response.data;
|
|
39
|
+
},
|
|
40
|
+
createForProject: async (params, body) => {
|
|
41
|
+
const response = await index_1.AbyssCore.axios.post(`/short-link/project/${params.projectId}/create`, body);
|
|
42
|
+
return response.data;
|
|
43
|
+
},
|
|
44
|
+
update: async (params, body) => {
|
|
45
|
+
const response = await index_1.AbyssCore.axios.put(`/short-link/${params.shortLinkId}`, body);
|
|
46
|
+
return response.data;
|
|
47
|
+
},
|
|
48
|
+
delete: async (params) => {
|
|
49
|
+
const response = await index_1.AbyssCore.axios.delete(`/short-link/${params.shortLinkId}`);
|
|
50
|
+
return response.data;
|
|
51
|
+
},
|
|
52
|
+
getStats: async (params, query) => {
|
|
53
|
+
const response = await index_1.AbyssCore.axios.get(`/short-link/${params.shortLinkId}/stats`, {
|
|
54
|
+
params: query,
|
|
55
|
+
});
|
|
56
|
+
return response.data;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
@@ -21,6 +21,9 @@ export declare enum AbyssApplicationEvent {
|
|
|
21
21
|
SERVER_SENT_EVENTS_ATLAS_OPEN = "server-sent-events.atlas.open",
|
|
22
22
|
SERVER_SENT_EVENTS_ATLAS_CLOSE = "server-sent-events.atlas.close",
|
|
23
23
|
SERVER_SENT_EVENTS_ATLAS_SEND = "server-sent-events.atlas.send",
|
|
24
|
+
SERVER_SENT_EVENTS_CLOUD_OPEN = "server-sent-events.cloud.open",
|
|
25
|
+
SERVER_SENT_EVENTS_CLOUD_CLOSE = "server-sent-events.cloud.close",
|
|
26
|
+
SERVER_SENT_EVENTS_CLOUD_SEND = "server-sent-events.cloud.send",
|
|
24
27
|
BOARD_CREATE = "board.create",
|
|
25
28
|
BOARD_UPDATE = "board.update",
|
|
26
29
|
BOARD_DELETE = "board.delete",
|
|
@@ -25,6 +25,9 @@ var AbyssApplicationEvent;
|
|
|
25
25
|
AbyssApplicationEvent["SERVER_SENT_EVENTS_ATLAS_OPEN"] = "server-sent-events.atlas.open";
|
|
26
26
|
AbyssApplicationEvent["SERVER_SENT_EVENTS_ATLAS_CLOSE"] = "server-sent-events.atlas.close";
|
|
27
27
|
AbyssApplicationEvent["SERVER_SENT_EVENTS_ATLAS_SEND"] = "server-sent-events.atlas.send";
|
|
28
|
+
AbyssApplicationEvent["SERVER_SENT_EVENTS_CLOUD_OPEN"] = "server-sent-events.cloud.open";
|
|
29
|
+
AbyssApplicationEvent["SERVER_SENT_EVENTS_CLOUD_CLOSE"] = "server-sent-events.cloud.close";
|
|
30
|
+
AbyssApplicationEvent["SERVER_SENT_EVENTS_CLOUD_SEND"] = "server-sent-events.cloud.send";
|
|
28
31
|
AbyssApplicationEvent["BOARD_CREATE"] = "board.create";
|
|
29
32
|
AbyssApplicationEvent["BOARD_UPDATE"] = "board.update";
|
|
30
33
|
AbyssApplicationEvent["BOARD_DELETE"] = "board.delete";
|
|
@@ -43,6 +43,8 @@ export * from './requests/atlas-page.request';
|
|
|
43
43
|
export * from './requests/atlas-group.request';
|
|
44
44
|
export * from './requests/atlas.public.request';
|
|
45
45
|
export * from './requests/memo.request';
|
|
46
|
+
export * from './requests/short-link.request';
|
|
47
|
+
export * from './requests/short-link.admin.request';
|
|
46
48
|
export * from './responses/auth.response';
|
|
47
49
|
export * from './responses/user.response';
|
|
48
50
|
export * from './responses/user.admin.response';
|
|
@@ -86,3 +88,5 @@ export * from './responses/atlas-page.response';
|
|
|
86
88
|
export * from './responses/atlas-group.response';
|
|
87
89
|
export * from './responses/atlas.public.response';
|
|
88
90
|
export * from './responses/memo.response';
|
|
91
|
+
export * from './responses/short-link.response';
|
|
92
|
+
export * from './responses/short-link.admin.response';
|
|
@@ -59,6 +59,8 @@ __exportStar(require("./requests/atlas-page.request"), exports);
|
|
|
59
59
|
__exportStar(require("./requests/atlas-group.request"), exports);
|
|
60
60
|
__exportStar(require("./requests/atlas.public.request"), exports);
|
|
61
61
|
__exportStar(require("./requests/memo.request"), exports);
|
|
62
|
+
__exportStar(require("./requests/short-link.request"), exports);
|
|
63
|
+
__exportStar(require("./requests/short-link.admin.request"), exports);
|
|
62
64
|
__exportStar(require("./responses/auth.response"), exports);
|
|
63
65
|
__exportStar(require("./responses/user.response"), exports);
|
|
64
66
|
__exportStar(require("./responses/user.admin.response"), exports);
|
|
@@ -102,3 +104,5 @@ __exportStar(require("./responses/atlas-page.response"), exports);
|
|
|
102
104
|
__exportStar(require("./responses/atlas-group.response"), exports);
|
|
103
105
|
__exportStar(require("./responses/atlas.public.response"), exports);
|
|
104
106
|
__exportStar(require("./responses/memo.response"), exports);
|
|
107
|
+
__exportStar(require("./responses/short-link.response"), exports);
|
|
108
|
+
__exportStar(require("./responses/short-link.admin.response"), exports);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { QueryPaginate } from '../type-message/base-paginate';
|
|
2
|
+
export type IPaginateShortLinkAdminQuery = {
|
|
3
|
+
title?: string;
|
|
4
|
+
userId?: string;
|
|
5
|
+
projectId?: string;
|
|
6
|
+
isActive?: boolean;
|
|
7
|
+
} & QueryPaginate;
|
|
8
|
+
export type IGetShortLinkAdminParams = {
|
|
9
|
+
shortLinkId: string;
|
|
10
|
+
};
|
|
11
|
+
export type IDeleteShortLinkAdminParams = {
|
|
12
|
+
shortLinkId: string;
|
|
13
|
+
};
|
|
14
|
+
export type IUpdateShortLinkAdminParams = {
|
|
15
|
+
shortLinkId: string;
|
|
16
|
+
};
|
|
17
|
+
export type IUpdateShortLinkAdminBody = {
|
|
18
|
+
originalUrl?: string;
|
|
19
|
+
slug?: string;
|
|
20
|
+
title?: string;
|
|
21
|
+
description?: string;
|
|
22
|
+
isActive?: boolean;
|
|
23
|
+
expiresAt?: Date | null;
|
|
24
|
+
maxClicks?: number | null;
|
|
25
|
+
password?: string | null;
|
|
26
|
+
};
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { QueryPaginate } from '../type-message/base-paginate';
|
|
2
|
+
export type IGetShortLinkParams = {
|
|
3
|
+
shortLinkId: string;
|
|
4
|
+
};
|
|
5
|
+
export type IGetShortLinkBySlugParams = {
|
|
6
|
+
slug: string;
|
|
7
|
+
};
|
|
8
|
+
export type IValidateShortLinkPasswordBody = {
|
|
9
|
+
password: string;
|
|
10
|
+
};
|
|
11
|
+
export type IPaginateShortLinkQuery = {
|
|
12
|
+
title?: string;
|
|
13
|
+
userId?: string;
|
|
14
|
+
projectId?: string;
|
|
15
|
+
isActive?: boolean;
|
|
16
|
+
} & QueryPaginate;
|
|
17
|
+
export type IPaginateUserShortLinkQuery = {
|
|
18
|
+
title?: string;
|
|
19
|
+
isActive?: boolean;
|
|
20
|
+
} & QueryPaginate;
|
|
21
|
+
export type IPaginateProjectShortLinkParams = {
|
|
22
|
+
projectId: string;
|
|
23
|
+
};
|
|
24
|
+
export type IPaginateProjectShortLinkQuery = {
|
|
25
|
+
title?: string;
|
|
26
|
+
isActive?: boolean;
|
|
27
|
+
} & QueryPaginate;
|
|
28
|
+
export type ICreateShortLinkBody = {
|
|
29
|
+
originalUrl: string;
|
|
30
|
+
slug?: string;
|
|
31
|
+
title?: string;
|
|
32
|
+
description?: string;
|
|
33
|
+
expiresAt?: Date;
|
|
34
|
+
maxClicks?: number;
|
|
35
|
+
password?: string;
|
|
36
|
+
};
|
|
37
|
+
export type ICreateForProjectShortLinkParams = {
|
|
38
|
+
projectId: string;
|
|
39
|
+
};
|
|
40
|
+
export type IUpdateShortLinkParams = {
|
|
41
|
+
shortLinkId: string;
|
|
42
|
+
};
|
|
43
|
+
export type IUpdateShortLinkBody = {
|
|
44
|
+
originalUrl?: string;
|
|
45
|
+
slug?: string;
|
|
46
|
+
title?: string;
|
|
47
|
+
description?: string;
|
|
48
|
+
isActive?: boolean;
|
|
49
|
+
expiresAt?: Date | null;
|
|
50
|
+
maxClicks?: number | null;
|
|
51
|
+
password?: string | null;
|
|
52
|
+
};
|
|
53
|
+
export type IDeleteShortLinkParams = {
|
|
54
|
+
shortLinkId: string;
|
|
55
|
+
};
|
|
56
|
+
export type IGetShortLinkStatsParams = {
|
|
57
|
+
shortLinkId: string;
|
|
58
|
+
};
|
|
59
|
+
export type IGetShortLinkStatsQuery = {
|
|
60
|
+
startDate?: string;
|
|
61
|
+
endDate?: string;
|
|
62
|
+
groupBy?: 'day' | 'week' | 'month';
|
|
63
|
+
};
|
|
64
|
+
export type IRedirectShortLinkParams = {
|
|
65
|
+
slug: string;
|
|
66
|
+
};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BasePaginate, IResponse } from '..';
|
|
2
|
+
import { IShortLink } from '../../models/short-link.model';
|
|
3
|
+
export type IPaginateShortLinkAdminResponse = IResponse<BasePaginate<IShortLink>>;
|
|
4
|
+
export interface IGetShortLinkAdminData {
|
|
5
|
+
shortLink: IShortLink;
|
|
6
|
+
}
|
|
7
|
+
export type IGetShortLinkAdminResponse = IResponse<IGetShortLinkAdminData>;
|
|
8
|
+
export interface IDeleteShortLinkAdminData {
|
|
9
|
+
}
|
|
10
|
+
export type IDeleteShortLinkAdminResponse = IResponse<IDeleteShortLinkAdminData>;
|
|
11
|
+
export interface IUpdateShortLinkAdminData {
|
|
12
|
+
shortLink: IShortLink;
|
|
13
|
+
}
|
|
14
|
+
export type IUpdateShortLinkAdminResponse = IResponse<IUpdateShortLinkAdminData>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { BasePaginate, IResponse } from '..';
|
|
2
|
+
import { IShortLink, IShortLinkWithStats } from '../../models/short-link.model';
|
|
3
|
+
export interface IGetShortLinkData {
|
|
4
|
+
shortLink: IShortLink;
|
|
5
|
+
}
|
|
6
|
+
export type IGetShortLinkResponse = IResponse<IGetShortLinkData>;
|
|
7
|
+
export interface IGetShortLinkBySlugData {
|
|
8
|
+
shortLink: IShortLink;
|
|
9
|
+
requiresPassword: boolean;
|
|
10
|
+
}
|
|
11
|
+
export type IGetShortLinkBySlugResponse = IResponse<IGetShortLinkBySlugData>;
|
|
12
|
+
export interface IValidateShortLinkPasswordData {
|
|
13
|
+
valid: boolean;
|
|
14
|
+
}
|
|
15
|
+
export type IValidateShortLinkPasswordResponse = IResponse<IValidateShortLinkPasswordData>;
|
|
16
|
+
export type IPaginateShortLinkResponse = IResponse<BasePaginate<IShortLink>>;
|
|
17
|
+
export interface ICreateShortLinkData {
|
|
18
|
+
shortLink: IShortLink;
|
|
19
|
+
}
|
|
20
|
+
export type ICreateShortLinkResponse = IResponse<ICreateShortLinkData>;
|
|
21
|
+
export interface IUpdateShortLinkData {
|
|
22
|
+
shortLink: IShortLink;
|
|
23
|
+
}
|
|
24
|
+
export type IUpdateShortLinkResponse = IResponse<IUpdateShortLinkData>;
|
|
25
|
+
export interface IDeleteShortLinkData {
|
|
26
|
+
}
|
|
27
|
+
export type IDeleteShortLinkResponse = IResponse<IDeleteShortLinkData>;
|
|
28
|
+
export interface IGetShortLinkStatsData {
|
|
29
|
+
shortLink: IShortLinkWithStats;
|
|
30
|
+
}
|
|
31
|
+
export type IGetShortLinkStatsResponse = IResponse<IGetShortLinkStatsData>;
|
|
32
|
+
export interface IRedirectShortLinkData {
|
|
33
|
+
url: string;
|
|
34
|
+
}
|
|
35
|
+
export type IRedirectShortLinkResponse = IResponse<IRedirectShortLinkData>;
|
|
@@ -40,3 +40,5 @@ export * from './models/atlas-group.model';
|
|
|
40
40
|
export * from './models/atlas-page.model';
|
|
41
41
|
export * from './models/atlas-page-content.model';
|
|
42
42
|
export * from './models/memo.model';
|
|
43
|
+
export * from './models/short-link.model';
|
|
44
|
+
export * from './models/short-link-click.model';
|
|
@@ -56,3 +56,5 @@ __exportStar(require("./models/atlas-group.model"), exports);
|
|
|
56
56
|
__exportStar(require("./models/atlas-page.model"), exports);
|
|
57
57
|
__exportStar(require("./models/atlas-page-content.model"), exports);
|
|
58
58
|
__exportStar(require("./models/memo.model"), exports);
|
|
59
|
+
__exportStar(require("./models/short-link.model"), exports);
|
|
60
|
+
__exportStar(require("./models/short-link-click.model"), exports);
|
|
@@ -9,6 +9,7 @@ import { IDraw } from './draw.model';
|
|
|
9
9
|
import { IAtlas } from './atlas.model';
|
|
10
10
|
import { IRetrospective } from './retrospective.model';
|
|
11
11
|
import { IMemo } from './memo.model';
|
|
12
|
+
import { IShortLink } from './short-link.model';
|
|
12
13
|
export interface IProject {
|
|
13
14
|
id?: string;
|
|
14
15
|
name: string;
|
|
@@ -29,4 +30,5 @@ export interface IProject {
|
|
|
29
30
|
retrospective?: IRetrospective[];
|
|
30
31
|
atlas?: IAtlas[];
|
|
31
32
|
memo?: IMemo[];
|
|
33
|
+
shortLink?: IShortLink[];
|
|
32
34
|
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { IShortLink } from './short-link.model';
|
|
2
|
+
export interface IShortLinkClick {
|
|
3
|
+
id: string;
|
|
4
|
+
shortLinkId: string;
|
|
5
|
+
ipAddress: string | null;
|
|
6
|
+
ipHash: string;
|
|
7
|
+
userAgent: string | null;
|
|
8
|
+
referer: string | null;
|
|
9
|
+
country: string | null;
|
|
10
|
+
city: string | null;
|
|
11
|
+
device: string | null;
|
|
12
|
+
browser: string | null;
|
|
13
|
+
os: string | null;
|
|
14
|
+
clickedAt: Date;
|
|
15
|
+
createdAt?: Date;
|
|
16
|
+
updatedAt?: Date;
|
|
17
|
+
shortLink?: IShortLink;
|
|
18
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { IUser } from './user.model';
|
|
2
|
+
import { IProject } from './project.model';
|
|
3
|
+
import { IShortLinkClick } from './short-link-click.model';
|
|
4
|
+
export interface IShortLink {
|
|
5
|
+
id: string;
|
|
6
|
+
slug: string;
|
|
7
|
+
originalUrl: string;
|
|
8
|
+
title: string | null;
|
|
9
|
+
description: string | null;
|
|
10
|
+
userId: string | null;
|
|
11
|
+
projectId: string | null;
|
|
12
|
+
isActive: boolean;
|
|
13
|
+
clickCount: number;
|
|
14
|
+
uniqueClickCount: number;
|
|
15
|
+
lastClickedAt: Date | null;
|
|
16
|
+
expiresAt: Date | null;
|
|
17
|
+
maxClicks: number | null;
|
|
18
|
+
password: string | null;
|
|
19
|
+
createdAt?: Date;
|
|
20
|
+
updatedAt?: Date;
|
|
21
|
+
deletedAt?: Date | null;
|
|
22
|
+
user?: IUser | null;
|
|
23
|
+
project?: IProject | null;
|
|
24
|
+
shortLinkClick?: IShortLinkClick[];
|
|
25
|
+
}
|
|
26
|
+
export interface IShortLinkWithStats extends IShortLink {
|
|
27
|
+
stats?: {
|
|
28
|
+
clicksByDay: {
|
|
29
|
+
date: string;
|
|
30
|
+
clicks: number;
|
|
31
|
+
uniqueClicks: number;
|
|
32
|
+
}[];
|
|
33
|
+
clicksByCountry: {
|
|
34
|
+
country: string;
|
|
35
|
+
clicks: number;
|
|
36
|
+
}[];
|
|
37
|
+
clicksByDevice: {
|
|
38
|
+
device: string;
|
|
39
|
+
clicks: number;
|
|
40
|
+
}[];
|
|
41
|
+
clicksByBrowser: {
|
|
42
|
+
browser: string;
|
|
43
|
+
clicks: number;
|
|
44
|
+
}[];
|
|
45
|
+
clicksByReferer: {
|
|
46
|
+
referer: string;
|
|
47
|
+
clicks: number;
|
|
48
|
+
}[];
|
|
49
|
+
};
|
|
50
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IAtlas, IBoard, IGiftCodeActivation, IMemo, IOAuthAccount, IProject, IRetrospective, IUserTransaction } from '..';
|
|
1
|
+
import { IAtlas, IBoard, IGiftCodeActivation, IMemo, IOAuthAccount, IProject, IRetrospective, IShortLink, IUserTransaction } from '..';
|
|
2
2
|
import { AbyssService, OnboardingSteps, UserCreditPurchaseCurrency, UserLanguage, UserType } from '../../enum';
|
|
3
3
|
import { OnboardingData } from '../../utils';
|
|
4
4
|
import { IBoardCardComment } from './board-card-comment.model';
|
|
@@ -46,6 +46,7 @@ export interface IUser {
|
|
|
46
46
|
retrospective?: IRetrospective[];
|
|
47
47
|
atlas?: IAtlas[];
|
|
48
48
|
memo?: IMemo[];
|
|
49
|
+
shortLink?: IShortLink[];
|
|
49
50
|
}
|
|
50
51
|
export type UserOnboardingStatus = {
|
|
51
52
|
completedAt?: Date | null;
|