@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.
Files changed (27) hide show
  1. package/dist/reports/model/entities/Visitor.d.ts +1 -0
  2. package/dist/reports/model/entities/Visitor.d.ts.map +1 -1
  3. package/dist/reports/model/entities/Visitor.js +4 -0
  4. package/dist/reports/model/entities/Visitor.js.map +1 -1
  5. package/dist/reports/workflows/activities/AddActivityWorkflow.d.ts +1 -0
  6. package/dist/reports/workflows/activities/AddActivityWorkflow.d.ts.map +1 -1
  7. package/dist/reports/workflows/activities/AddActivityWorkflow.js +7 -0
  8. package/dist/reports/workflows/activities/AddActivityWorkflow.js.map +1 -1
  9. package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.d.ts +1 -0
  10. package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.d.ts.map +1 -1
  11. package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.js +2 -1
  12. package/dist/reports/workflows/visitor-added/VisitorAddedWorkflow.js.map +1 -1
  13. package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.d.ts +1 -1
  14. package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.d.ts.map +1 -1
  15. package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.js +6 -5
  16. package/dist/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.js.map +1 -1
  17. package/dist/server/workflows/search/IndexAppFilesWorkflow.d.ts +1 -1
  18. package/dist/server/workflows/search/IndexAppFilesWorkflow.d.ts.map +1 -1
  19. package/dist/server/workflows/search/IndexAppFilesWorkflow.js +27 -7
  20. package/dist/server/workflows/search/IndexAppFilesWorkflow.js.map +1 -1
  21. package/dist/tsconfig.tsbuildinfo +1 -1
  22. package/package.json +1 -1
  23. package/src/reports/model/entities/Visitor.ts +3 -0
  24. package/src/reports/workflows/activities/AddActivityWorkflow.ts +10 -0
  25. package/src/reports/workflows/visitor-added/VisitorAddedWorkflow.ts +3 -2
  26. package/src/reports/wwwroot/routes/social-mail/reports/api/track/[event]/get.tsx +14 -11
  27. package/src/server/workflows/search/IndexAppFilesWorkflow.ts +28 -4
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@social-mail/social-mail-web-server",
3
- "version": "1.8.21",
3
+ "version": "1.8.23",
4
4
  "description": "## Phase 1",
5
5
  "main": "index.js",
6
6
  "type": "module",
@@ -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 visitor = await this.getVisitor(this.request.cookies["vid"], siteID);
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
- await this.index();
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
- const files = await db.appFiles
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
- await this.saveTextContent(iterator, tempFileService, db);
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) {