@social-mail/social-mail-web-server 1.8.21 → 1.8.23
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/reports/model/entities/Visitor.d.ts +1 -0
- package/dist/reports/model/entities/Visitor.d.ts.map +1 -1
- package/dist/reports/model/entities/Visitor.js +4 -0
- package/dist/reports/model/entities/Visitor.js.map +1 -1
- package/dist/reports/workflows/activities/AddActivityWorkflow.d.ts +1 -0
- package/dist/reports/workflows/activities/AddActivityWorkflow.d.ts.map +1 -1
- package/dist/reports/workflows/activities/AddActivityWorkflow.js +7 -0
- package/dist/reports/workflows/activities/AddActivityWorkflow.js.map +1 -1
- package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.d.ts +1 -0
- package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.d.ts.map +1 -1
- package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.js +2 -1
- package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.js.map +1 -1
- package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.d.ts +1 -1
- package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.d.ts.map +1 -1
- package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.js +6 -5
- package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.js.map +1 -1
- package/dist/server/workflows/search/IndexAppFilesWorkflow.d.ts +1 -1
- package/dist/server/workflows/search/IndexAppFilesWorkflow.d.ts.map +1 -1
- package/dist/server/workflows/search/IndexAppFilesWorkflow.js +27 -7
- package/dist/server/workflows/search/IndexAppFilesWorkflow.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/reports/model/entities/Visitor.ts +3 -0
- package/src/reports/workflows/activities/AddActivityWorkflow.ts +10 -0
- package/src/reports/workflows/visitor-added/VisitorAddedWorkflow.ts +3 -2
- package/src/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.tsx +14 -11
- package/src/server/workflows/search/IndexAppFilesWorkflow.ts +28 -4
package/package.json
CHANGED
|
@@ -37,6 +37,9 @@ export default class Visitor {
|
|
|
37
37
|
@Column({ dataType: "Char", length: 400, nullable: true})
|
|
38
38
|
deviceVendor: string;
|
|
39
39
|
|
|
40
|
+
@Column({ dataType: "Char", length: 400, nullable: true})
|
|
41
|
+
referrer: string;
|
|
42
|
+
|
|
40
43
|
@Column({ dataType: "Char", length: 400, nullable: true})
|
|
41
44
|
cpu: string;
|
|
42
45
|
|
|
@@ -9,6 +9,7 @@ import Sql from "@entity-access/entity-access/dist/sql/Sql.js";
|
|
|
9
9
|
|
|
10
10
|
export interface IActivityInfo {
|
|
11
11
|
p: any;
|
|
12
|
+
r: any;
|
|
12
13
|
u: any;
|
|
13
14
|
q: any;
|
|
14
15
|
x: any;
|
|
@@ -50,11 +51,14 @@ export default class AddActivityWorkflow extends Workflow<{
|
|
|
50
51
|
}
|
|
51
52
|
} = this.input;
|
|
52
53
|
|
|
54
|
+
let { activity: { r: referrer } } = this.input;
|
|
55
|
+
|
|
53
56
|
await db.visitActivities.statements.insert({
|
|
54
57
|
visitID,
|
|
55
58
|
event,
|
|
56
59
|
page,
|
|
57
60
|
query,
|
|
61
|
+
referrer,
|
|
58
62
|
x,
|
|
59
63
|
y,
|
|
60
64
|
url
|
|
@@ -62,6 +66,8 @@ export default class AddActivityWorkflow extends Workflow<{
|
|
|
62
66
|
|
|
63
67
|
const visitor = await db.visitors.statements.select({}, { visitorID });
|
|
64
68
|
|
|
69
|
+
referrer = visitor.referrer;
|
|
70
|
+
|
|
65
71
|
await db.visitors.where(visitor, (p) => (v) => v.visitorID === p.visitorID)
|
|
66
72
|
.update(void 0, (p) => (v) => ({
|
|
67
73
|
firstVisitID: Sql.coll.min(v.visits.map((vv) => vv.visitID)),
|
|
@@ -142,5 +148,9 @@ export default class AddActivityWorkflow extends Workflow<{
|
|
|
142
148
|
if (country) {
|
|
143
149
|
await insertReport(startHour, `/country/${country}`, { country });
|
|
144
150
|
}
|
|
151
|
+
if (referrer) {
|
|
152
|
+
referrer = referrer.replace(/^https?\:\/\//i, "");
|
|
153
|
+
await insertReport(startHour, `/source/${referrer}`, { referrer });
|
|
154
|
+
}
|
|
145
155
|
}
|
|
146
156
|
}
|
|
@@ -4,7 +4,7 @@ import ReportDbContext from "../../model/ReportDbContext.js";
|
|
|
4
4
|
import myUaParser from "my-ua-parser";
|
|
5
5
|
import GeoIPService from "../../../server/services/geo-ip/GeoIPService.js";
|
|
6
6
|
|
|
7
|
-
export default class VisitorAddedWorkflow extends Workflow<{ visitorID }> {
|
|
7
|
+
export default class VisitorAddedWorkflow extends Workflow<{ visitorID, referrer }> {
|
|
8
8
|
|
|
9
9
|
run() {
|
|
10
10
|
return this.parseUserAgent();
|
|
@@ -15,7 +15,7 @@ export default class VisitorAddedWorkflow extends Workflow<{ visitorID }> {
|
|
|
15
15
|
@Inject db?: ReportDbContext,
|
|
16
16
|
@Inject geo?: GeoIPService
|
|
17
17
|
) {
|
|
18
|
-
const { visitorID } = this.input;
|
|
18
|
+
const { visitorID, referrer } = this.input;
|
|
19
19
|
const v = await db.visitors.statements.select({}, { visitorID });
|
|
20
20
|
|
|
21
21
|
const c = await geo.getBlock(v.ipAddress ?? "0.0.0.0");
|
|
@@ -35,6 +35,7 @@ export default class VisitorAddedWorkflow extends Workflow<{ visitorID }> {
|
|
|
35
35
|
|
|
36
36
|
await db.visitors.statements.update({
|
|
37
37
|
country,
|
|
38
|
+
referrer,
|
|
38
39
|
app,
|
|
39
40
|
appVersion,
|
|
40
41
|
os,
|
|
@@ -35,7 +35,16 @@ export default class extends Page<IActivityInfo> {
|
|
|
35
35
|
|
|
36
36
|
const time = DateTime.now;
|
|
37
37
|
|
|
38
|
-
const
|
|
38
|
+
const {
|
|
39
|
+
p,
|
|
40
|
+
u,
|
|
41
|
+
x,
|
|
42
|
+
y,
|
|
43
|
+
r,
|
|
44
|
+
q
|
|
45
|
+
} = this.query;
|
|
46
|
+
|
|
47
|
+
const visitor = await this.getVisitor(this.request.cookies["vid"], siteID, r);
|
|
39
48
|
|
|
40
49
|
const visitorID = visitor.visitorID;
|
|
41
50
|
|
|
@@ -67,13 +76,6 @@ export default class extends Page<IActivityInfo> {
|
|
|
67
76
|
this.response.cookie("vvid", visitID, { secure: true, httpOnly: true, maxAge: visitMaxAge });
|
|
68
77
|
}
|
|
69
78
|
|
|
70
|
-
const {
|
|
71
|
-
p,
|
|
72
|
-
u,
|
|
73
|
-
x,
|
|
74
|
-
y,
|
|
75
|
-
q
|
|
76
|
-
} = this.query;
|
|
77
79
|
|
|
78
80
|
await this.wc.queue(AddActivityWorkflow, {
|
|
79
81
|
siteID,
|
|
@@ -87,14 +89,15 @@ export default class extends Page<IActivityInfo> {
|
|
|
87
89
|
u,
|
|
88
90
|
x,
|
|
89
91
|
y,
|
|
90
|
-
q
|
|
92
|
+
q,
|
|
93
|
+
r
|
|
91
94
|
}
|
|
92
95
|
});
|
|
93
96
|
|
|
94
97
|
return this.json({});
|
|
95
98
|
}
|
|
96
99
|
|
|
97
|
-
async getVisitor(visitorID: any, siteID) {
|
|
100
|
+
async getVisitor(visitorID: any, siteID, referrer) {
|
|
98
101
|
|
|
99
102
|
const { db } = this;
|
|
100
103
|
|
|
@@ -118,7 +121,7 @@ export default class extends Page<IActivityInfo> {
|
|
|
118
121
|
});
|
|
119
122
|
|
|
120
123
|
visitorID = `${visitor.visitorID}`;
|
|
121
|
-
await this.wc.queue(VisitorAddedWorkflow, { visitorID });
|
|
124
|
+
await this.wc.queue(VisitorAddedWorkflow, { visitorID, referrer });
|
|
122
125
|
|
|
123
126
|
this.response.cookie("vid", visitorID, { secure: true, httpOnly: true, maxAge });
|
|
124
127
|
|
|
@@ -23,11 +23,18 @@ export default class IndexAppFilesWorkflow extends Workflow {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
async run() {
|
|
26
|
-
|
|
26
|
+
let start = -1;
|
|
27
|
+
for(;;) {
|
|
28
|
+
start = await this.index(start);
|
|
29
|
+
if (!BigInt(start)) {
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
27
33
|
}
|
|
28
34
|
|
|
29
35
|
@UniqueActivity
|
|
30
36
|
async index(
|
|
37
|
+
start,
|
|
31
38
|
@Inject db?: SocialMailContext,
|
|
32
39
|
@Inject tempFileService?: TempFileService
|
|
33
40
|
) {
|
|
@@ -35,16 +42,33 @@ export default class IndexAppFilesWorkflow extends Workflow {
|
|
|
35
42
|
db.verifyFilters = false;
|
|
36
43
|
db.raiseEvents = false;
|
|
37
44
|
|
|
38
|
-
|
|
39
|
-
.where(void 0, (p) => (x) => x.fileContentID !== null && x.fileContent.textDocumentID === null)
|
|
45
|
+
let q = db.appFiles
|
|
46
|
+
.where(void 0, (p) => (x) => x.fileContentID !== null && x.fileContent.textDocumentID === null);
|
|
47
|
+
|
|
48
|
+
if (BigInt(start) > 0) {
|
|
49
|
+
q = q.where({ start }, (p) => (x) => x.appFileID < p.start);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const files = await q
|
|
40
53
|
.orderByDescending(void 0, (p) => (x) => x.appFileID)
|
|
41
54
|
.limit(100)
|
|
42
55
|
.include((x) => x.fileContent)
|
|
43
56
|
.toArray();
|
|
44
57
|
|
|
58
|
+
if (!files.length) {
|
|
59
|
+
return 0;
|
|
60
|
+
}
|
|
61
|
+
|
|
45
62
|
for (const iterator of files) {
|
|
46
|
-
|
|
63
|
+
start = iterator.appFileID;
|
|
64
|
+
try {
|
|
65
|
+
await this.saveTextContent(iterator, tempFileService, db);
|
|
66
|
+
} catch (error) {
|
|
67
|
+
console.error(error);
|
|
68
|
+
}
|
|
47
69
|
}
|
|
70
|
+
|
|
71
|
+
return start;
|
|
48
72
|
}
|
|
49
73
|
|
|
50
74
|
private async extractText(file: LocalFile, tempFileService: TempFileService, db: SocialMailContext) {
|