@memberjunction/content-autotagging 3.3.0 → 4.0.0
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/CloudStorage/generic/CloudStorageBase.d.ts +28 -0
- package/dist/CloudStorage/generic/CloudStorageBase.d.ts.map +1 -0
- package/dist/CloudStorage/generic/CloudStorageBase.js +38 -0
- package/dist/CloudStorage/generic/CloudStorageBase.js.map +1 -0
- package/dist/CloudStorage/index.d.ts +3 -0
- package/dist/CloudStorage/index.d.ts.map +1 -0
- package/dist/CloudStorage/index.js +3 -0
- package/dist/CloudStorage/index.js.map +1 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.d.ts +20 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.d.ts.map +1 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.js +86 -0
- package/dist/CloudStorage/providers/AutotagAzureBlob.js.map +1 -0
- package/dist/Core/generic/AutotagBase.d.ts +7 -0
- package/dist/Core/generic/AutotagBase.d.ts.map +1 -0
- package/dist/Core/generic/AutotagBase.js +3 -0
- package/dist/Core/generic/AutotagBase.js.map +1 -0
- package/dist/Core/index.d.ts +2 -0
- package/dist/Core/index.d.ts.map +1 -0
- package/dist/Core/index.js +2 -0
- package/dist/Core/index.js.map +1 -0
- package/dist/Engine/generic/AutotagBaseEngine.d.ts +131 -0
- package/dist/Engine/generic/AutotagBaseEngine.d.ts.map +1 -0
- package/dist/Engine/generic/AutotagBaseEngine.js +620 -0
- package/dist/Engine/generic/AutotagBaseEngine.js.map +1 -0
- package/dist/Engine/generic/content.types.d.ts +32 -0
- package/dist/Engine/generic/content.types.d.ts.map +1 -0
- package/dist/Engine/generic/content.types.js +7 -0
- package/dist/Engine/generic/content.types.js.map +1 -0
- package/dist/Engine/generic/process.types.d.ts +30 -0
- package/dist/Engine/generic/process.types.d.ts.map +1 -0
- package/dist/Engine/generic/process.types.js +7 -0
- package/dist/Engine/generic/process.types.js.map +1 -0
- package/dist/Engine/index.d.ts +4 -0
- package/dist/Engine/index.d.ts.map +1 -0
- package/dist/Engine/index.js +4 -0
- package/dist/Engine/index.js.map +1 -0
- package/dist/Entity/generic/AutotagEntity.d.ts +19 -0
- package/dist/Entity/generic/AutotagEntity.d.ts.map +1 -0
- package/dist/Entity/generic/AutotagEntity.js +127 -0
- package/dist/Entity/generic/AutotagEntity.js.map +1 -0
- package/dist/Entity/index.d.ts +2 -0
- package/dist/Entity/index.d.ts.map +1 -0
- package/dist/Entity/index.js +2 -0
- package/dist/Entity/index.js.map +1 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +39 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts.map +1 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js +171 -0
- package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +1 -0
- package/dist/LocalFileSystem/index.d.ts +2 -0
- package/dist/LocalFileSystem/index.d.ts.map +1 -0
- package/dist/LocalFileSystem/index.js +2 -0
- package/dist/LocalFileSystem/index.js.map +1 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts +30 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts.map +1 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.js +177 -0
- package/dist/RSSFeed/generic/AutotagRSSFeed.js.map +1 -0
- package/dist/RSSFeed/generic/RSS.types.d.ts +13 -0
- package/dist/RSSFeed/generic/RSS.types.d.ts.map +1 -0
- package/dist/RSSFeed/generic/RSS.types.js +3 -0
- package/dist/RSSFeed/generic/RSS.types.js.map +1 -0
- package/dist/RSSFeed/index.d.ts +3 -0
- package/dist/RSSFeed/index.d.ts.map +1 -0
- package/dist/RSSFeed/index.js +3 -0
- package/dist/RSSFeed/index.js.map +1 -0
- package/dist/Websites/generic/AutotagWebsite.d.ts +85 -0
- package/dist/Websites/generic/AutotagWebsite.d.ts.map +1 -0
- package/dist/Websites/generic/AutotagWebsite.js +355 -0
- package/dist/Websites/generic/AutotagWebsite.js.map +1 -0
- package/dist/Websites/index.d.ts +2 -0
- package/dist/Websites/index.d.ts.map +1 -0
- package/dist/Websites/index.js +2 -0
- package/dist/Websites/index.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/src/CloudStorage/generic/CloudStorageBase.d.ts +3 -3
- package/dist/src/CloudStorage/generic/CloudStorageBase.js +2 -2
- package/dist/src/CloudStorage/index.d.ts +2 -2
- package/dist/src/CloudStorage/index.js +2 -2
- package/dist/src/CloudStorage/providers/AutotagAzureBlob.d.ts +2 -2
- package/dist/src/CloudStorage/providers/AutotagAzureBlob.js +1 -1
- package/dist/src/Core/index.d.ts +1 -1
- package/dist/src/Core/index.js +1 -1
- package/dist/src/Engine/generic/AutotagBaseEngine.d.ts +2 -2
- package/dist/src/Engine/generic/AutotagBaseEngine.js +2 -2
- package/dist/src/Engine/index.d.ts +3 -3
- package/dist/src/Engine/index.js +3 -3
- package/dist/src/Entity/generic/AutotagEntity.d.ts +2 -2
- package/dist/src/Entity/generic/AutotagEntity.js +2 -2
- package/dist/src/Entity/index.d.ts +1 -1
- package/dist/src/Entity/index.js +1 -1
- package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +2 -2
- package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.js +2 -2
- package/dist/src/LocalFileSystem/index.d.ts +1 -1
- package/dist/src/LocalFileSystem/index.js +1 -1
- package/dist/src/RSSFeed/generic/AutotagRSSFeed.d.ts +3 -3
- package/dist/src/RSSFeed/generic/AutotagRSSFeed.js +3 -3
- package/dist/src/RSSFeed/index.d.ts +2 -2
- package/dist/src/RSSFeed/index.js +2 -2
- package/dist/src/Websites/generic/AutotagWebsite.d.ts +2 -2
- package/dist/src/Websites/generic/AutotagWebsite.js +2 -2
- package/dist/src/Websites/index.d.ts +1 -1
- package/dist/src/Websites/index.js +1 -1
- package/dist/src/index.d.ts +6 -6
- package/dist/src/index.js +6 -6
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -20
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare class ContentItemParams {
|
|
2
|
+
contentSourceID: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
ContentTypeID: string;
|
|
6
|
+
ContentSourceTypeID: string;
|
|
7
|
+
ContentFileTypeID: string;
|
|
8
|
+
URL: string;
|
|
9
|
+
AIModelID?: string;
|
|
10
|
+
minTags?: number;
|
|
11
|
+
maxTags?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare class ContentSourceParams {
|
|
14
|
+
contentSourceID: string;
|
|
15
|
+
name?: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
ContentTypeID: string;
|
|
18
|
+
ContentSourceTypeID: string;
|
|
19
|
+
ContentFileTypeID: string;
|
|
20
|
+
URL: string;
|
|
21
|
+
AIModelID?: string;
|
|
22
|
+
minTags?: number;
|
|
23
|
+
maxTags?: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class ContentSourceTypeParams {
|
|
26
|
+
contentSourceID: string;
|
|
27
|
+
contentSourceTypeID: string;
|
|
28
|
+
name: string;
|
|
29
|
+
value: string;
|
|
30
|
+
type: string;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=content.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.types.d.ts","sourceRoot":"","sources":["../../../src/Engine/generic/content.types.ts"],"names":[],"mappings":"AAAA,qBAAa,iBAAiB;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,mBAAmB;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,uBAAuB;IAChC,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content.types.js","sourceRoot":"","sources":["../../../src/Engine/generic/content.types.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,iBAAiB;CAW7B;AAED,MAAM,OAAO,mBAAmB;CAW/B;AAED,MAAM,OAAO,uBAAuB;CAMnC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export declare class ProcessRunParams {
|
|
2
|
+
sourceID: string;
|
|
3
|
+
startTime: Date;
|
|
4
|
+
endTime: Date;
|
|
5
|
+
numItemsProcessed: number;
|
|
6
|
+
}
|
|
7
|
+
export declare class ContentItemProcessParams {
|
|
8
|
+
text: string;
|
|
9
|
+
modelID: string;
|
|
10
|
+
minTags: number;
|
|
11
|
+
maxTags: number;
|
|
12
|
+
contentItemID: string;
|
|
13
|
+
contentTypeID: string;
|
|
14
|
+
contentFileTypeID: string;
|
|
15
|
+
contentSourceTypeID: string;
|
|
16
|
+
}
|
|
17
|
+
export declare class ContentItemProcessResults {
|
|
18
|
+
title: string;
|
|
19
|
+
author: string[];
|
|
20
|
+
publicationDate: Date;
|
|
21
|
+
keywords: string[];
|
|
22
|
+
content_text: string;
|
|
23
|
+
processStartTime: Date;
|
|
24
|
+
processEndTime: Date;
|
|
25
|
+
contentItemID: string;
|
|
26
|
+
}
|
|
27
|
+
export interface JsonObject {
|
|
28
|
+
[key: string]: any;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=process.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.types.d.ts","sourceRoot":"","sources":["../../../src/Engine/generic/process.types.ts"],"names":[],"mappings":"AAAA,qBAAa,gBAAgB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;IAChB,OAAO,EAAE,IAAI,CAAC;IACd,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAED,qBAAa,wBAAwB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;CAC/B;AAED,qBAAa,yBAAyB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,eAAe,EAAE,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,IAAI,CAAC;IACvB,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACtB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"process.types.js","sourceRoot":"","sources":["../../../src/Engine/generic/process.types.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,gBAAgB;CAK5B;AAED,MAAM,OAAO,wBAAwB;CASpC;AAED,MAAM,OAAO,yBAAyB;CASrC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Engine/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAA;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
2
|
+
import { ContentSourceParams } from "../../Engine/index.js";
|
|
3
|
+
import { UserInfo, BaseEntity } from "@memberjunction/core";
|
|
4
|
+
import { ContentSourceEntity, ContentItemEntity } from "@memberjunction/core-entities";
|
|
5
|
+
export declare class AutotagEntity extends AutotagBase {
|
|
6
|
+
private contextUser;
|
|
7
|
+
private engine;
|
|
8
|
+
protected contentSourceTypeID: string;
|
|
9
|
+
private EntityName;
|
|
10
|
+
private EntityFields;
|
|
11
|
+
constructor();
|
|
12
|
+
Autotag(contextUser: UserInfo): Promise<void>;
|
|
13
|
+
SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
|
|
14
|
+
getNewOrModifiedContentItems(contentSourceParams: ContentSourceParams, contextUser: UserInfo): Promise<ContentItemEntity[]>;
|
|
15
|
+
setContentItemsFromEntityResults(results: BaseEntity[], contentSourceParams: ContentSourceParams, lastRunDate: Date): Promise<ContentItemEntity[]>;
|
|
16
|
+
setNewContentItem(item: BaseEntity, contentSourceParams: ContentSourceParams): Promise<ContentItemEntity>;
|
|
17
|
+
getTextFromEntityResult(result: BaseEntity): string;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=AutotagEntity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagEntity.d.ts","sourceRoot":"","sources":["../../../src/Entity/generic/AutotagEntity.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAqB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAqB,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvF,qBACa,aAAc,SAAQ,WAAW;IAC1C,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACrC,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,YAAY,CAAU;;IAMjB,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAsC7F,4BAA4B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwB3H,gCAAgC,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAelJ,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuB/G,uBAAuB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;CAU7D"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { RegisterClass } from "@memberjunction/global";
|
|
11
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
12
|
+
import { AutotagBaseEngine } from "../../Engine/index.js";
|
|
13
|
+
import { Metadata, RunView } from "@memberjunction/core";
|
|
14
|
+
let AutotagEntity = class AutotagEntity extends AutotagBase {
|
|
15
|
+
constructor() {
|
|
16
|
+
super();
|
|
17
|
+
this.engine = AutotagBaseEngine.Instance;
|
|
18
|
+
}
|
|
19
|
+
async Autotag(contextUser) {
|
|
20
|
+
this.contextUser = contextUser;
|
|
21
|
+
this.contentSourceTypeID = await this.engine.setSubclassContentSourceType('Entity', this.contextUser);
|
|
22
|
+
const contentSources = await this.engine.getAllContentSources(this.contextUser, this.contentSourceTypeID) || [];
|
|
23
|
+
const contentItemsToProcess = await this.SetContentItemsToProcess(contentSources);
|
|
24
|
+
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser);
|
|
25
|
+
}
|
|
26
|
+
async SetContentItemsToProcess(contentSources) {
|
|
27
|
+
const contentItemsToProcess = [];
|
|
28
|
+
for (const contentSource of contentSources) {
|
|
29
|
+
// If content source parameters were provided, set them. Otherwise, use the default values.
|
|
30
|
+
const contentSourceParamsMap = await this.engine.getContentSourceParams(contentSource, this.contextUser);
|
|
31
|
+
if (contentSourceParamsMap) {
|
|
32
|
+
// Override defaults with content source specific params
|
|
33
|
+
contentSourceParamsMap.forEach((value, key) => {
|
|
34
|
+
if (key in this) {
|
|
35
|
+
this[key] = value;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
const contentSourceParams = {
|
|
40
|
+
contentSourceID: contentSource.ID,
|
|
41
|
+
name: contentSource.Name,
|
|
42
|
+
ContentTypeID: contentSource.ContentTypeID,
|
|
43
|
+
ContentFileTypeID: contentSource.ContentFileTypeID,
|
|
44
|
+
ContentSourceTypeID: contentSource.ContentSourceTypeID,
|
|
45
|
+
URL: contentSource.URL
|
|
46
|
+
};
|
|
47
|
+
const contentItems = await this.getNewOrModifiedContentItems(contentSourceParams, this.contextUser);
|
|
48
|
+
if (contentItems && contentItems.length > 0) {
|
|
49
|
+
contentItemsToProcess.push(...contentItems);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// No content items found to process
|
|
53
|
+
console.log(`No content items found to process for content source: ${contentSource.Name}`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return contentItemsToProcess;
|
|
57
|
+
}
|
|
58
|
+
async getNewOrModifiedContentItems(contentSourceParams, contextUser) {
|
|
59
|
+
const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSourceParams.contentSourceID, contextUser);
|
|
60
|
+
const lastRunDateISOString = lastRunDate.toISOString();
|
|
61
|
+
const rv = new RunView();
|
|
62
|
+
// Get all entities that have been added/updated since the last run date
|
|
63
|
+
const results = await rv.RunView({
|
|
64
|
+
EntityName: this.EntityName,
|
|
65
|
+
Fields: this.EntityFields,
|
|
66
|
+
ExtraFilter: `__mj_UpdatedAt > '${lastRunDateISOString}'`,
|
|
67
|
+
ResultType: 'entity_object'
|
|
68
|
+
}, contextUser);
|
|
69
|
+
const entityResults = results.Results;
|
|
70
|
+
if (results.Results && results.Results.length > 0) {
|
|
71
|
+
const contentItems = await this.setContentItemsFromEntityResults(entityResults, contentSourceParams, lastRunDate);
|
|
72
|
+
return contentItems;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async setContentItemsFromEntityResults(results, contentSourceParams, lastRunDate) {
|
|
79
|
+
const contentItems = [];
|
|
80
|
+
for (const result of results) {
|
|
81
|
+
const lastUpdatedAt = result.Get('__mj_UpdatedAt');
|
|
82
|
+
if (lastUpdatedAt > lastRunDate) {
|
|
83
|
+
const contentItem = await this.setNewContentItem(result, contentSourceParams);
|
|
84
|
+
if (contentItem) {
|
|
85
|
+
contentItems.push(contentItem);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return contentItems;
|
|
90
|
+
}
|
|
91
|
+
async setNewContentItem(item, contentSourceParams) {
|
|
92
|
+
const md = new Metadata();
|
|
93
|
+
const text = this.getTextFromEntityResult(item);
|
|
94
|
+
const contentItem = await md.GetEntityObject('Content Items', this.contextUser);
|
|
95
|
+
contentItem.NewRecord();
|
|
96
|
+
contentItem.ContentSourceID = contentSourceParams.contentSourceID;
|
|
97
|
+
contentItem.Name = contentSourceParams.name;
|
|
98
|
+
contentItem.Description = await this.engine.getContentItemDescription(contentSourceParams, this.contextUser);
|
|
99
|
+
contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
|
|
100
|
+
contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
|
|
101
|
+
contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
|
|
102
|
+
contentItem.Text = text;
|
|
103
|
+
contentItem.Checksum = await this.engine.getChecksumFromText(text);
|
|
104
|
+
contentItem.URL = contentSourceParams.URL;
|
|
105
|
+
if (await contentItem.Save()) {
|
|
106
|
+
return contentItem;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
throw new Error('Failed to save content item');
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
getTextFromEntityResult(result) {
|
|
113
|
+
let text = '';
|
|
114
|
+
// For every field in the field list, add the field's name and value to the text in the format FieldName: FieldValue
|
|
115
|
+
for (const field of this.EntityFields) {
|
|
116
|
+
const fieldVal = result.Get(field);
|
|
117
|
+
text += `${field}: ${fieldVal}\n`;
|
|
118
|
+
}
|
|
119
|
+
return text;
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
AutotagEntity = __decorate([
|
|
123
|
+
RegisterClass(AutotagBase, 'AutotagEntity'),
|
|
124
|
+
__metadata("design:paramtypes", [])
|
|
125
|
+
], AutotagEntity);
|
|
126
|
+
export { AutotagEntity };
|
|
127
|
+
//# sourceMappingURL=AutotagEntity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagEntity.js","sourceRoot":"","sources":["../../../src/Entity/generic/AutotagEntity.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAuB,MAAM,cAAc,CAAC;AACtE,OAAO,EAAY,QAAQ,EAAE,OAAO,EAAc,MAAM,sBAAsB,CAAC;AAIxE,IAAM,aAAa,GAAnB,MAAM,aAAc,SAAQ,WAAW;IAO1C;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7C,CAAC;IACM,KAAK,CAAC,OAAO,CAAC,WAAqB;QACtC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,mBAAmB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACtG,MAAM,cAAc,GAA0B,MAAM,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,CAAC;QACvI,MAAM,qBAAqB,GAAwB,MAAM,IAAI,CAAC,wBAAwB,CAAC,cAAc,CAAC,CAAA;QACtG,MAAM,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,qBAAqB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5F,CAAC;IAEM,KAAK,CAAC,wBAAwB,CAAC,cAAqC;QACvE,MAAM,qBAAqB,GAAwB,EAAE,CAAA;QAErD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAEzC,2FAA2F;YAC3F,MAAM,sBAAsB,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,aAAa,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzG,IAAI,sBAAsB,EAAE,CAAC;gBACzB,wDAAwD;gBACxD,sBAAsB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC1C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;wBACb,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC/B,CAAC;gBACL,CAAC,CAAC,CAAA;YACN,CAAC;YAED,MAAM,mBAAmB,GAAwB;gBAC7C,eAAe,EAAE,aAAa,CAAC,EAAE;gBACjC,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;gBAClD,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;gBACtD,GAAG,EAAE,aAAa,CAAC,GAAG;aACzB,CAAA;YAED,MAAM,YAAY,GAAwB,MAAM,IAAI,CAAC,4BAA4B,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACzH,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC1C,qBAAqB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChD,CAAC;iBACI,CAAC;gBACF,oCAAoC;gBACpC,OAAO,CAAC,GAAG,CAAC,yDAAyD,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;YAC/F,CAAC;QACL,CAAC;QAED,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAEM,KAAK,CAAC,4BAA4B,CAAC,mBAAwC,EAAE,WAAqB;QACrG,MAAM,WAAW,GAAS,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;QACzH,MAAM,oBAAoB,GAAW,WAAW,CAAC,WAAW,EAAE,CAAC;QAE/D,MAAM,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC;QAEzB,wEAAwE;QACxE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAa;YACzC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,MAAM,EAAE,IAAI,CAAC,YAAY;YACzB,WAAW,EAAE,qBAAqB,oBAAoB,GAAG;YACzD,UAAU,EAAE,eAAe;SAC9B,EAAE,WAAW,CAAC,CAAC;QAEhB,MAAM,aAAa,GAAiB,OAAO,CAAC,OAAO,CAAA;QACnD,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,YAAY,GAAwB,MAAM,IAAI,CAAC,gCAAgC,CAAC,aAAa,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;YACvI,OAAO,YAAY,CAAC;QACxB,CAAC;aACI,CAAC;YACF,OAAO,EAAE,CAAC;QACd,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,gCAAgC,CAAC,OAAqB,EAAE,mBAAwC,EAAE,WAAiB;QAC5H,MAAM,YAAY,GAAwB,EAAE,CAAC;QAC7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;YACnD,IAAI,aAAa,GAAG,WAAW,EAAE,CAAC;gBAC9B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;gBAC9E,IAAI,WAAW,EAAC,CAAC;oBACb,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBACnC,CAAC;YACL,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAC;IACxB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,IAAgB,EAAE,mBAAwC;QACrF,MAAM,EAAE,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,eAAe,CAAoB,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACnG,WAAW,CAAC,SAAS,EAAE,CAAC;QACxB,WAAW,CAAC,eAAe,GAAG,mBAAmB,CAAC,eAAe,CAAC;QAClE,WAAW,CAAC,IAAI,GAAG,mBAAmB,CAAC,IAAI,CAAA;QAC3C,WAAW,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,mBAAmB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;QAC5G,WAAW,CAAC,aAAa,GAAG,mBAAmB,CAAC,aAAa,CAAA;QAC7D,WAAW,CAAC,iBAAiB,GAAG,mBAAmB,CAAC,iBAAiB,CAAA;QACrE,WAAW,CAAC,mBAAmB,GAAG,mBAAmB,CAAC,mBAAmB,CAAA;QACzE,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,WAAW,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;QACnE,WAAW,CAAC,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC;QAE1C,IAAG,MAAM,WAAW,CAAC,IAAI,EAAE,EAAC,CAAC;YACzB,OAAO,WAAW,CAAC;QACvB,CAAC;aACI,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAEM,uBAAuB,CAAC,MAAkB;QAC7C,IAAI,IAAI,GAAG,EAAE,CAAA;QACb,oHAAoH;QACpH,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YAClC,IAAI,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,CAAA;QACrC,CAAC;QAED,OAAO,IAAI,CAAC;IAChB,CAAC;CACJ,CAAA;AAjIY,aAAa;IADzB,aAAa,CAAC,WAAW,EAAE,eAAe,CAAC;;GAC/B,aAAa,CAiIzB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Entity/index.ts"],"names":[],"mappings":"AAAA,cAAc,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
2
|
+
import { ContentSourceParams } from "../../Engine/index.js";
|
|
3
|
+
import { UserInfo } from "@memberjunction/core";
|
|
4
|
+
import { ContentSourceEntity, ContentItemEntity } from "@memberjunction/core-entities";
|
|
5
|
+
import { OpenAI } from "openai";
|
|
6
|
+
export declare class AutotagLocalFileSystem extends AutotagBase {
|
|
7
|
+
private contextUser;
|
|
8
|
+
private engine;
|
|
9
|
+
protected contentSourceTypeID: string;
|
|
10
|
+
static _openAI: OpenAI;
|
|
11
|
+
constructor();
|
|
12
|
+
getContextUser(): UserInfo | null;
|
|
13
|
+
/**
|
|
14
|
+
* Implemented abstract method from the AutotagBase class. that runs the entire autotagging process. This method is the entry point for the autotagging process.
|
|
15
|
+
* It initializes the connection, retrieves the content sources corresponding to the content source type, sets the content items that we want to process,
|
|
16
|
+
* extracts and processes the text, and sets the results in the database.
|
|
17
|
+
*/
|
|
18
|
+
Autotag(contextUser: UserInfo): Promise<void>;
|
|
19
|
+
/**
|
|
20
|
+
* Implemented abstract method from the AutotagBase class. Given a list of content sources, this method should return a list
|
|
21
|
+
* of content source items that have been modified or added after the most recent process run for that content source.
|
|
22
|
+
* @param contentSources - An array of content sources to check for modified or added content source items
|
|
23
|
+
* @returns - An array of content source items that have been modified or added after the most recent process run for that content source
|
|
24
|
+
*/
|
|
25
|
+
SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
|
|
26
|
+
setContentSourceParams(contentSource: ContentSourceEntity): Promise<ContentSourceParams>;
|
|
27
|
+
/**
|
|
28
|
+
* Given a content source and last run date, recursively traverse through the directory and return a
|
|
29
|
+
* list of content source items that have been modified or added after the last run date.
|
|
30
|
+
* @param contentSource
|
|
31
|
+
* @param lastRunDate
|
|
32
|
+
* @param contextUser
|
|
33
|
+
* @returns
|
|
34
|
+
*/
|
|
35
|
+
SetNewAndModifiedContentItems(contentSourceParams: ContentSourceParams, lastRunDate: Date, contextUser: UserInfo): Promise<ContentItemEntity[]>;
|
|
36
|
+
setAddedContentItem(filePath: string, contentSourceParams: ContentSourceParams): Promise<ContentItemEntity>;
|
|
37
|
+
setModifiedContentItem(filePath: string, contentSourceParams: ContentSourceParams): Promise<ContentItemEntity>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=AutotagLocalFileSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagLocalFileSystem.d.ts","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAqB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKhC,qBACa,sBAAuB,SAAQ,WAAW;IACnD,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;IACrC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;;IAOhB,cAAc,IAAI,QAAQ,GAAG,IAAI;IAIxC;;;;OAIG;IACU,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;;;;MAKE;IACW,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA+B7F,sBAAsB,CAAC,aAAa,EAAE,mBAAmB;IAwBtE;;;;;;;OAOG;IACU,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IA+B/I,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAuB3G,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;CAgB9H"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
8
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
9
|
+
};
|
|
10
|
+
import { RegisterClass } from "@memberjunction/global";
|
|
11
|
+
import fs from 'fs';
|
|
12
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
13
|
+
import { AutotagBaseEngine } from "../../Engine/index.js";
|
|
14
|
+
import { Metadata } from "@memberjunction/core";
|
|
15
|
+
import path from 'path';
|
|
16
|
+
import dotenv from 'dotenv';
|
|
17
|
+
dotenv.config({ quiet: true });
|
|
18
|
+
let AutotagLocalFileSystem = class AutotagLocalFileSystem extends AutotagBase {
|
|
19
|
+
constructor() {
|
|
20
|
+
super();
|
|
21
|
+
this.engine = AutotagBaseEngine.Instance;
|
|
22
|
+
}
|
|
23
|
+
getContextUser() {
|
|
24
|
+
return this.contextUser;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Implemented abstract method from the AutotagBase class. that runs the entire autotagging process. This method is the entry point for the autotagging process.
|
|
28
|
+
* It initializes the connection, retrieves the content sources corresponding to the content source type, sets the content items that we want to process,
|
|
29
|
+
* extracts and processes the text, and sets the results in the database.
|
|
30
|
+
*/
|
|
31
|
+
async Autotag(contextUser) {
|
|
32
|
+
this.contextUser = contextUser;
|
|
33
|
+
this.contentSourceTypeID = await this.engine.setSubclassContentSourceType('Local File System', this.contextUser);
|
|
34
|
+
const contentSources = await this.engine.getAllContentSources(this.contextUser, this.contentSourceTypeID) || [];
|
|
35
|
+
const contentItemsToProcess = await this.SetContentItemsToProcess(contentSources);
|
|
36
|
+
await this.engine.ExtractTextAndProcessWithLLM(contentItemsToProcess, this.contextUser);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Implemented abstract method from the AutotagBase class. Given a list of content sources, this method should return a list
|
|
40
|
+
* of content source items that have been modified or added after the most recent process run for that content source.
|
|
41
|
+
* @param contentSources - An array of content sources to check for modified or added content source items
|
|
42
|
+
* @returns - An array of content source items that have been modified or added after the most recent process run for that content source
|
|
43
|
+
*/
|
|
44
|
+
async SetContentItemsToProcess(contentSources) {
|
|
45
|
+
const contentItemsToProcess = [];
|
|
46
|
+
for (const contentSource of contentSources) {
|
|
47
|
+
// First check that the directory exists
|
|
48
|
+
if (fs.existsSync(contentSource.URL)) {
|
|
49
|
+
const contentSourceParams = await this.setContentSourceParams(contentSource);
|
|
50
|
+
const lastRunDate = await this.engine.getContentSourceLastRunDate(contentSourceParams.contentSourceID, this.contextUser);
|
|
51
|
+
// Traverse through all the files in the directory
|
|
52
|
+
if (lastRunDate) {
|
|
53
|
+
const contentItems = await this.SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, this.contextUser);
|
|
54
|
+
if (contentItems && contentItems.length > 0) {
|
|
55
|
+
contentItemsToProcess.push(...contentItems);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
// No content items found to process
|
|
59
|
+
console.log(`No content items found to process for content source: ${contentSource.Get('Name')}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
throw new Error('Invalid last run date');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
console.log(`Invalid Content Source ${contentSource.Name}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return contentItemsToProcess;
|
|
71
|
+
}
|
|
72
|
+
async setContentSourceParams(contentSource) {
|
|
73
|
+
// If content source parameters were provided, set them. Otherwise, use the default values.
|
|
74
|
+
const contentSourceParamsMap = await this.engine.getContentSourceParams(contentSource, this.contextUser);
|
|
75
|
+
if (contentSourceParamsMap) {
|
|
76
|
+
// Override defaults with content source specific params
|
|
77
|
+
contentSourceParamsMap.forEach((value, key) => {
|
|
78
|
+
if (key in this) {
|
|
79
|
+
this[key] = value;
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
const contentSourceParams = {
|
|
84
|
+
contentSourceID: contentSource.ID,
|
|
85
|
+
name: contentSource.Name,
|
|
86
|
+
ContentTypeID: contentSource.ContentTypeID,
|
|
87
|
+
ContentSourceTypeID: contentSource.ContentSourceTypeID,
|
|
88
|
+
ContentFileTypeID: contentSource.ContentFileTypeID,
|
|
89
|
+
URL: contentSource.URL
|
|
90
|
+
};
|
|
91
|
+
return contentSourceParams;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Given a content source and last run date, recursively traverse through the directory and return a
|
|
95
|
+
* list of content source items that have been modified or added after the last run date.
|
|
96
|
+
* @param contentSource
|
|
97
|
+
* @param lastRunDate
|
|
98
|
+
* @param contextUser
|
|
99
|
+
* @returns
|
|
100
|
+
*/
|
|
101
|
+
async SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, contextUser) {
|
|
102
|
+
const contentItems = [];
|
|
103
|
+
let contentSourcePath = contentSourceParams.URL;
|
|
104
|
+
const filesAndDirs = fs.readdirSync(contentSourcePath);
|
|
105
|
+
for (const file of filesAndDirs) {
|
|
106
|
+
const filePath = path.join(contentSourcePath, file);
|
|
107
|
+
const stats = fs.statSync(filePath);
|
|
108
|
+
if (stats.isDirectory()) {
|
|
109
|
+
contentSourceParams.URL = filePath;
|
|
110
|
+
await this.SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, contextUser);
|
|
111
|
+
}
|
|
112
|
+
else if (stats.isFile()) {
|
|
113
|
+
const modifiedDate = new Date(stats.mtime.toUTCString());
|
|
114
|
+
const changedDate = new Date(stats.ctime.toUTCString());
|
|
115
|
+
if (changedDate > lastRunDate) {
|
|
116
|
+
// The file has been added, create a new record for this file
|
|
117
|
+
const contentItem = await this.setAddedContentItem(filePath, contentSourceParams);
|
|
118
|
+
contentItems.push(contentItem); // Content item was added, add to list
|
|
119
|
+
}
|
|
120
|
+
else if (modifiedDate > lastRunDate) {
|
|
121
|
+
// The file's contents has been, update the record for this file
|
|
122
|
+
const contentItem = await this.setModifiedContentItem(filePath, contentSourceParams);
|
|
123
|
+
contentItems.push(contentItem);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return contentItems;
|
|
128
|
+
}
|
|
129
|
+
async setAddedContentItem(filePath, contentSourceParams) {
|
|
130
|
+
const md = new Metadata();
|
|
131
|
+
const text = await this.engine.parseFileFromPath(filePath);
|
|
132
|
+
const contentItem = await md.GetEntityObject('Content Items', this.contextUser);
|
|
133
|
+
contentItem.NewRecord();
|
|
134
|
+
contentItem.ContentSourceID = contentSourceParams.contentSourceID;
|
|
135
|
+
contentItem.Name = contentSourceParams.name;
|
|
136
|
+
contentItem.Description = await this.engine.getContentItemDescription(contentSourceParams, this.contextUser);
|
|
137
|
+
contentItem.ContentTypeID = contentSourceParams.ContentTypeID;
|
|
138
|
+
contentItem.ContentFileTypeID = contentSourceParams.ContentFileTypeID;
|
|
139
|
+
contentItem.ContentSourceTypeID = contentSourceParams.ContentSourceTypeID;
|
|
140
|
+
contentItem.Checksum = await this.engine.getChecksumFromText(text);
|
|
141
|
+
contentItem.URL = contentSourceParams.URL;
|
|
142
|
+
contentItem.Text = text;
|
|
143
|
+
if (await contentItem.Save()) {
|
|
144
|
+
return contentItem;
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
throw new Error('Failed to save content item');
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async setModifiedContentItem(filePath, contentSourceParams) {
|
|
151
|
+
const md = new Metadata();
|
|
152
|
+
const contentItem = await md.GetEntityObject('Content Items', this.contextUser);
|
|
153
|
+
const contentItemID = await this.engine.getContentItemIDFromURL(contentSourceParams, this.contextUser);
|
|
154
|
+
await contentItem.Load(contentItemID);
|
|
155
|
+
const text = await this.engine.parseFileFromPath(filePath);
|
|
156
|
+
contentItem.Text = text;
|
|
157
|
+
contentItem.Checksum = await this.engine.getChecksumFromText(text);
|
|
158
|
+
if (await contentItem.Save()) {
|
|
159
|
+
return contentItem;
|
|
160
|
+
}
|
|
161
|
+
else {
|
|
162
|
+
throw new Error('Failed to save content item');
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
AutotagLocalFileSystem = __decorate([
|
|
167
|
+
RegisterClass(AutotagBase, 'AutotagLocalFileSystem'),
|
|
168
|
+
__metadata("design:paramtypes", [])
|
|
169
|
+
], AutotagLocalFileSystem);
|
|
170
|
+
export { AutotagLocalFileSystem };
|
|
171
|
+
//# sourceMappingURL=AutotagLocalFileSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagLocalFileSystem.js","sourceRoot":"","sources":["../../../src/LocalFileSystem/generic/AutotagLocalFileSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/LocalFileSystem/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/LocalFileSystem/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { UserInfo } from '@memberjunction/core';
|
|
2
|
+
import { AutotagBase } from "../../Core/index.js";
|
|
3
|
+
import { ContentSourceParams } from "../../Engine/index.js";
|
|
4
|
+
import { ContentSourceEntity, ContentItemEntity } from '@memberjunction/core-entities';
|
|
5
|
+
import { RSSItem } from './RSS.types.js';
|
|
6
|
+
export declare class AutotagRSSFeed extends AutotagBase {
|
|
7
|
+
private contextUser;
|
|
8
|
+
private engine;
|
|
9
|
+
protected contentSourceTypeID: string;
|
|
10
|
+
constructor();
|
|
11
|
+
protected getContextUser(): UserInfo;
|
|
12
|
+
/**
|
|
13
|
+
* Implemented abstract method from the AutotagBase class. that runs the entire autotagging process. This method is the entry point for the autotagging process.
|
|
14
|
+
* It initializes the connection, retrieves the content sources corresponding to the content source type, sets the content items that we want to process,
|
|
15
|
+
* extracts and processes the text, and sets the results in the database.
|
|
16
|
+
*/
|
|
17
|
+
Autotag(contextUser: UserInfo): Promise<void>;
|
|
18
|
+
/**
|
|
19
|
+
* Implemented abstract method from the AutotagBase class. Given a list of content sources, this method should return a list
|
|
20
|
+
* of content source items that have been modified or added after the most recent process run for that content source.
|
|
21
|
+
* @param contentSources - An array of content sources to check for modified or added content source items
|
|
22
|
+
* @returns - An array of content source items that have been modified or added after the most recent process run for that content source
|
|
23
|
+
*/
|
|
24
|
+
SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
|
|
25
|
+
SetNewAndModifiedContentItems(allRSSItems: RSSItem[], contentSourceParams: ContentSourceParams): Promise<ContentItemEntity[]>;
|
|
26
|
+
parseRSSFeed(url: string): Promise<RSSItem[]>;
|
|
27
|
+
protected urlIsValid(url: string): Promise<boolean>;
|
|
28
|
+
getChecksumFromRSSItem(RSSContentItem: RSSItem, contextUser: UserInfo): Promise<string>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=AutotagRSSFeed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AutotagRSSFeed.d.ts","sourceRoot":"","sources":["../../../src/RSSFeed/generic/AutotagRSSFeed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAqB,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACvF,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAOtC,qBACa,cAAe,SAAQ,WAAW;IAC3C,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,MAAM,CAAoB;IAClC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;;IAOrC,SAAS,CAAC,cAAc,IAAI,QAAQ;IAIpC;;;;OAIG;IACU,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;;;;OAKG;IACU,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAuC7F,6BAA6B,CAAC,WAAW,EAAE,OAAO,EAAE,EAAE,mBAAmB,EAAE,mBAAmB,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAkD7H,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;cAqC1C,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW5C,sBAAsB,CAAC,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;CAIvG"}
|