@memberjunction/content-autotagging 3.4.0 → 4.1.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.
Files changed (142) hide show
  1. package/README.md +109 -213
  2. package/dist/CloudStorage/generic/CloudStorageBase.d.ts +28 -0
  3. package/dist/CloudStorage/generic/CloudStorageBase.d.ts.map +1 -0
  4. package/dist/{src/CloudStorage → CloudStorage}/generic/CloudStorageBase.js +6 -16
  5. package/dist/CloudStorage/generic/CloudStorageBase.js.map +1 -0
  6. package/dist/CloudStorage/index.d.ts +3 -0
  7. package/dist/CloudStorage/index.d.ts.map +1 -0
  8. package/dist/CloudStorage/index.js +3 -0
  9. package/dist/CloudStorage/index.js.map +1 -0
  10. package/dist/{src/CloudStorage → CloudStorage}/providers/AutotagAzureBlob.d.ts +6 -4
  11. package/dist/CloudStorage/providers/AutotagAzureBlob.d.ts.map +1 -0
  12. package/dist/{src/CloudStorage → CloudStorage}/providers/AutotagAzureBlob.js +17 -22
  13. package/dist/CloudStorage/providers/AutotagAzureBlob.js.map +1 -0
  14. package/dist/Core/generic/AutotagBase.d.ts.map +1 -0
  15. package/dist/Core/generic/AutotagBase.js +3 -0
  16. package/dist/Core/generic/AutotagBase.js.map +1 -0
  17. package/dist/Core/index.d.ts +2 -0
  18. package/dist/Core/index.d.ts.map +1 -0
  19. package/dist/Core/index.js +2 -0
  20. package/dist/Core/index.js.map +1 -0
  21. package/dist/Engine/generic/AutotagBaseEngine.d.ts +131 -0
  22. package/dist/Engine/generic/AutotagBaseEngine.d.ts.map +1 -0
  23. package/dist/{src/Engine → Engine}/generic/AutotagBaseEngine.js +133 -73
  24. package/dist/Engine/generic/AutotagBaseEngine.js.map +1 -0
  25. package/dist/Engine/generic/content.types.d.ts.map +1 -0
  26. package/dist/Engine/generic/content.types.js +7 -0
  27. package/dist/Engine/generic/content.types.js.map +1 -0
  28. package/dist/Engine/generic/process.types.d.ts.map +1 -0
  29. package/dist/Engine/generic/process.types.js +7 -0
  30. package/dist/Engine/generic/process.types.js.map +1 -0
  31. package/dist/Engine/index.d.ts +4 -0
  32. package/dist/Engine/index.d.ts.map +1 -0
  33. package/dist/Engine/index.js +4 -0
  34. package/dist/Engine/index.js.map +1 -0
  35. package/dist/{src/Entity → Entity}/generic/AutotagEntity.d.ts +2 -2
  36. package/dist/Entity/generic/AutotagEntity.d.ts.map +1 -0
  37. package/dist/{src/Entity → Entity}/generic/AutotagEntity.js +16 -19
  38. package/dist/Entity/generic/AutotagEntity.js.map +1 -0
  39. package/dist/Entity/index.d.ts +2 -0
  40. package/dist/Entity/index.d.ts.map +1 -0
  41. package/dist/Entity/index.js +2 -0
  42. package/dist/Entity/index.js.map +1 -0
  43. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +39 -0
  44. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts.map +1 -0
  45. package/dist/{src/LocalFileSystem → LocalFileSystem}/generic/AutotagLocalFileSystem.js +46 -30
  46. package/dist/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +1 -0
  47. package/dist/LocalFileSystem/index.d.ts +2 -0
  48. package/dist/LocalFileSystem/index.d.ts.map +1 -0
  49. package/dist/LocalFileSystem/index.js +2 -0
  50. package/dist/LocalFileSystem/index.js.map +1 -0
  51. package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts +30 -0
  52. package/dist/RSSFeed/generic/AutotagRSSFeed.d.ts.map +1 -0
  53. package/dist/{src/RSSFeed → RSSFeed}/generic/AutotagRSSFeed.js +43 -34
  54. package/dist/RSSFeed/generic/AutotagRSSFeed.js.map +1 -0
  55. package/dist/RSSFeed/generic/RSS.types.d.ts.map +1 -0
  56. package/dist/RSSFeed/generic/RSS.types.js +3 -0
  57. package/dist/RSSFeed/generic/RSS.types.js.map +1 -0
  58. package/dist/RSSFeed/index.d.ts +3 -0
  59. package/dist/RSSFeed/index.d.ts.map +1 -0
  60. package/dist/RSSFeed/index.js +3 -0
  61. package/dist/RSSFeed/index.js.map +1 -0
  62. package/dist/Websites/generic/AutotagWebsite.d.ts +85 -0
  63. package/dist/Websites/generic/AutotagWebsite.d.ts.map +1 -0
  64. package/dist/{src/Websites → Websites}/generic/AutotagWebsite.js +103 -72
  65. package/dist/Websites/generic/AutotagWebsite.js.map +1 -0
  66. package/dist/Websites/index.d.ts +2 -0
  67. package/dist/Websites/index.d.ts.map +1 -0
  68. package/dist/Websites/index.js +2 -0
  69. package/dist/Websites/index.js.map +1 -0
  70. package/dist/index.d.ts +7 -0
  71. package/dist/index.d.ts.map +1 -0
  72. package/dist/index.js +7 -0
  73. package/dist/index.js.map +1 -0
  74. package/package.json +21 -20
  75. package/dist/src/CloudStorage/generic/CloudStorageBase.d.ts +0 -16
  76. package/dist/src/CloudStorage/generic/CloudStorageBase.d.ts.map +0 -1
  77. package/dist/src/CloudStorage/generic/CloudStorageBase.js.map +0 -1
  78. package/dist/src/CloudStorage/index.d.ts +0 -3
  79. package/dist/src/CloudStorage/index.d.ts.map +0 -1
  80. package/dist/src/CloudStorage/index.js +0 -19
  81. package/dist/src/CloudStorage/index.js.map +0 -1
  82. package/dist/src/CloudStorage/providers/AutotagAzureBlob.d.ts.map +0 -1
  83. package/dist/src/CloudStorage/providers/AutotagAzureBlob.js.map +0 -1
  84. package/dist/src/Core/generic/AutotagBase.d.ts.map +0 -1
  85. package/dist/src/Core/generic/AutotagBase.js +0 -7
  86. package/dist/src/Core/generic/AutotagBase.js.map +0 -1
  87. package/dist/src/Core/index.d.ts +0 -2
  88. package/dist/src/Core/index.d.ts.map +0 -1
  89. package/dist/src/Core/index.js +0 -18
  90. package/dist/src/Core/index.js.map +0 -1
  91. package/dist/src/Engine/generic/AutotagBaseEngine.d.ts +0 -52
  92. package/dist/src/Engine/generic/AutotagBaseEngine.d.ts.map +0 -1
  93. package/dist/src/Engine/generic/AutotagBaseEngine.js.map +0 -1
  94. package/dist/src/Engine/generic/content.types.d.ts.map +0 -1
  95. package/dist/src/Engine/generic/content.types.js +0 -38
  96. package/dist/src/Engine/generic/content.types.js.map +0 -1
  97. package/dist/src/Engine/generic/process.types.d.ts.map +0 -1
  98. package/dist/src/Engine/generic/process.types.js +0 -33
  99. package/dist/src/Engine/generic/process.types.js.map +0 -1
  100. package/dist/src/Engine/index.d.ts +0 -4
  101. package/dist/src/Engine/index.d.ts.map +0 -1
  102. package/dist/src/Engine/index.js +0 -20
  103. package/dist/src/Engine/index.js.map +0 -1
  104. package/dist/src/Entity/generic/AutotagEntity.d.ts.map +0 -1
  105. package/dist/src/Entity/generic/AutotagEntity.js.map +0 -1
  106. package/dist/src/Entity/index.d.ts +0 -2
  107. package/dist/src/Entity/index.d.ts.map +0 -1
  108. package/dist/src/Entity/index.js +0 -18
  109. package/dist/src/Entity/index.js.map +0 -1
  110. package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts +0 -20
  111. package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.d.ts.map +0 -1
  112. package/dist/src/LocalFileSystem/generic/AutotagLocalFileSystem.js.map +0 -1
  113. package/dist/src/LocalFileSystem/index.d.ts +0 -2
  114. package/dist/src/LocalFileSystem/index.d.ts.map +0 -1
  115. package/dist/src/LocalFileSystem/index.js +0 -18
  116. package/dist/src/LocalFileSystem/index.js.map +0 -1
  117. package/dist/src/RSSFeed/generic/AutotagRSSFeed.d.ts +0 -19
  118. package/dist/src/RSSFeed/generic/AutotagRSSFeed.d.ts.map +0 -1
  119. package/dist/src/RSSFeed/generic/AutotagRSSFeed.js.map +0 -1
  120. package/dist/src/RSSFeed/generic/RSS.types.d.ts.map +0 -1
  121. package/dist/src/RSSFeed/generic/RSS.types.js +0 -17
  122. package/dist/src/RSSFeed/generic/RSS.types.js.map +0 -1
  123. package/dist/src/RSSFeed/index.d.ts +0 -3
  124. package/dist/src/RSSFeed/index.d.ts.map +0 -1
  125. package/dist/src/RSSFeed/index.js +0 -19
  126. package/dist/src/RSSFeed/index.js.map +0 -1
  127. package/dist/src/Websites/generic/AutotagWebsite.d.ts +0 -33
  128. package/dist/src/Websites/generic/AutotagWebsite.d.ts.map +0 -1
  129. package/dist/src/Websites/generic/AutotagWebsite.js.map +0 -1
  130. package/dist/src/Websites/index.d.ts +0 -2
  131. package/dist/src/Websites/index.d.ts.map +0 -1
  132. package/dist/src/Websites/index.js +0 -18
  133. package/dist/src/Websites/index.js.map +0 -1
  134. package/dist/src/index.d.ts +0 -7
  135. package/dist/src/index.d.ts.map +0 -1
  136. package/dist/src/index.js +0 -25
  137. package/dist/src/index.js.map +0 -1
  138. package/dist/tsconfig.tsbuildinfo +0 -1
  139. /package/dist/{src/Core → Core}/generic/AutotagBase.d.ts +0 -0
  140. /package/dist/{src/Engine → Engine}/generic/content.types.d.ts +0 -0
  141. /package/dist/{src/Engine → Engine}/generic/process.types.d.ts +0 -0
  142. /package/dist/{src/RSSFeed → RSSFeed}/generic/RSS.types.d.ts +0 -0
package/README.md CHANGED
@@ -1,20 +1,42 @@
1
1
  # @memberjunction/content-autotagging
2
2
 
3
- A powerful AI-driven package for automatically processing, analyzing, and tagging content from various sources including RSS feeds, websites, local files, and cloud storage.
3
+ AI-powered content ingestion and autotagging engine for MemberJunction. Scans content from multiple sources (local files, websites, RSS feeds, cloud storage), extracts text from documents, and uses LLMs to generate tags, summaries, and metadata attributes.
4
4
 
5
5
  ## Overview
6
6
 
7
- The `@memberjunction/content-autotagging` package provides an extensible framework for ingesting content from diverse sources and leveraging AI models to extract meaningful tags, summaries, and metadata. Built on the MemberJunction platform, it helps organizations automatically organize and categorize their content for improved searchability and insights.
8
-
9
- ## Features
10
-
11
- - **Multiple Content Sources**: Support for RSS feeds, websites, local file systems, and cloud storage (Azure Blob)
12
- - **AI-Powered Processing**: Integrates with various AI models to generate tags, summaries, and metadata
13
- - **Extensible Architecture**: Easy to add new content sources and processing strategies
14
- - **Smart Content Detection**: Validates content types and filters out irrelevant content
15
- - **Incremental Processing**: Only processes new or modified content since last run
16
- - **File Format Support**: Handles PDFs, Office documents, HTML, and plain text
17
- - **Chunking Strategy**: Intelligently chunks large content to fit within AI model token limits
7
+ The `@memberjunction/content-autotagging` package provides an extensible framework for ingesting content from diverse sources and leveraging AI models to extract meaningful tags, summaries, and metadata. Built on the MemberJunction platform, it helps organizations automatically organize and categorize their content.
8
+
9
+ ```mermaid
10
+ graph TD
11
+ A["AutotagBaseEngine<br/>(Orchestrator)"] --> B["Content Sources"]
12
+ B --> C["Local File System"]
13
+ B --> D["Websites"]
14
+ B --> E["RSS Feeds"]
15
+ B --> F["Cloud Storage<br/>(Azure Blob)"]
16
+
17
+ A --> G["Text Extraction"]
18
+ G --> H["PDF Parser"]
19
+ G --> I["Office Parser"]
20
+ G --> J["HTML Parser<br/>(Cheerio)"]
21
+
22
+ A --> K["LLM Processing"]
23
+ K --> L["Tag Generation"]
24
+ K --> M["Attribute Extraction"]
25
+
26
+ A --> N["Content Items<br/>(Database)"]
27
+ A --> O["Content Item Attributes<br/>(Database)"]
28
+
29
+ style A fill:#2d6a9f,stroke:#1a4971,color:#fff
30
+ style B fill:#7c5295,stroke:#563a6b,color:#fff
31
+ style C fill:#2d8659,stroke:#1a5c3a,color:#fff
32
+ style D fill:#2d8659,stroke:#1a5c3a,color:#fff
33
+ style E fill:#2d8659,stroke:#1a5c3a,color:#fff
34
+ style F fill:#2d8659,stroke:#1a5c3a,color:#fff
35
+ style G fill:#b8762f,stroke:#8a5722,color:#fff
36
+ style K fill:#7c5295,stroke:#563a6b,color:#fff
37
+ style N fill:#2d6a9f,stroke:#1a4971,color:#fff
38
+ style O fill:#2d6a9f,stroke:#1a4971,color:#fff
39
+ ```
18
40
 
19
41
  ## Installation
20
42
 
@@ -22,39 +44,46 @@ The `@memberjunction/content-autotagging` package provides an extensible framewo
22
44
  npm install @memberjunction/content-autotagging
23
45
  ```
24
46
 
25
- ## Dependencies
47
+ ## Content Processing Pipeline
48
+
49
+ ```mermaid
50
+ sequenceDiagram
51
+ participant Source as Content Source
52
+ participant Engine as AutotagBaseEngine
53
+ participant Extract as Text Extractor
54
+ participant AI as LLM
55
+ participant DB as Database
56
+
57
+ Source->>Engine: Provide content items
58
+ Engine->>Engine: Change detection (checksum)
59
+ Engine->>Extract: Extract text (PDF/Office/HTML)
60
+ Extract-->>Engine: Raw text
61
+ Engine->>Engine: Chunk text for token limits
62
+ Engine->>AI: Generate tags and attributes
63
+ AI-->>Engine: Structured metadata
64
+ Engine->>DB: Save ContentItem + Attributes
65
+ Engine->>DB: Create ProcessRun record
66
+ ```
26
67
 
27
- ### MemberJunction Dependencies
28
- - `@memberjunction/ai` (2.43.0) - AI model integration
29
- - `@memberjunction/aiengine` (2.43.0) - AI processing pipeline
30
- - `@memberjunction/core` (2.43.0) - Core MemberJunction functionality
31
- - `@memberjunction/core-entities` (2.43.0) - Entity models
32
- - `@memberjunction/global` (2.43.0) - Global utilities
33
-
34
- ### External Dependencies
35
- - `axios` - HTTP requests
36
- - `cheerio` - HTML parsing and web scraping
37
- - `pdf-parse` - PDF document parsing
38
- - `officeparser` - Microsoft Office document parsing
39
- - `rss-parser` - RSS feed parsing
40
- - `date-fns` & `date-fns-tz` - Date manipulation and timezone handling
41
- - `openai` - OpenAI API integration
42
- - `xml2js` - XML parsing
43
- - `crypto` - Checksum generation
44
-
45
- ## Architecture
46
-
47
- The package follows a modular architecture with these key components:
48
-
49
- ### Core Classes
50
-
51
- 1. **AutotagBase** - Abstract base class defining the autotagging interface
52
- 2. **AutotagBaseEngine** - Central processing engine handling AI interactions and content processing
53
- 3. **Content Source Implementations**:
54
- - `AutotagRSSFeed` - RSS feed processing
55
- - `AutotagWebsite` - Website crawling and processing
56
- - `AutotagLocalFileSystem` - Local file processing
57
- - `AutotagAzureBlob` - Azure Blob Storage integration
68
+ ## Content Sources
69
+
70
+ | Source | Class | Description |
71
+ |--------|-------|-------------|
72
+ | Local Files | `AutotagLocalFileSystem` | Scans local directories for documents |
73
+ | Websites | `AutotagWebsite` | Crawls web pages and extracts content |
74
+ | RSS Feeds | `AutotagRSSFeed` | Parses RSS/Atom feeds for articles |
75
+ | Azure Blob | `AutotagAzureBlob` | Processes files from Azure Blob Storage |
76
+
77
+ All sources extend `AutotagBase`, which provides the common interface for content discovery and ingestion.
78
+
79
+ ## Supported File Formats
80
+
81
+ | Format | Library | Extensions |
82
+ |--------|---------|------------|
83
+ | PDF | `pdf-parse` | .pdf |
84
+ | Office Documents | `officeparser` | .docx, .xlsx, .pptx |
85
+ | HTML/Web Pages | `cheerio` | .html, .htm |
86
+ | Plain Text | Native | .txt, .md, .csv |
58
87
 
59
88
  ## Usage
60
89
 
@@ -62,238 +91,105 @@ The package follows a modular architecture with these key components:
62
91
 
63
92
  ```typescript
64
93
  import { AutotagRSSFeed } from '@memberjunction/content-autotagging';
65
- import { UserInfo } from '@memberjunction/core';
66
94
 
67
95
  const rssTagger = new AutotagRSSFeed();
68
- const userContext: UserInfo = { /* your user context */ };
69
-
70
- // Process all configured RSS feeds
71
- await rssTagger.Autotag(userContext);
96
+ await rssTagger.Autotag(contextUser);
72
97
  ```
73
98
 
74
99
  ### Website Content Processing
75
100
 
76
101
  ```typescript
77
102
  import { AutotagWebsite } from '@memberjunction/content-autotagging';
78
- import { UserInfo } from '@memberjunction/core';
79
103
 
80
104
  const websiteTagger = new AutotagWebsite();
81
- const userContext: UserInfo = { /* your user context */ };
82
-
83
- // Process all configured websites with crawling options
84
- await websiteTagger.Autotag(userContext);
105
+ await websiteTagger.Autotag(contextUser);
85
106
  ```
86
107
 
87
108
  ### Local File System Processing
88
109
 
89
110
  ```typescript
90
111
  import { AutotagLocalFileSystem } from '@memberjunction/content-autotagging';
91
- import { UserInfo } from '@memberjunction/core';
92
112
 
93
113
  const fileTagger = new AutotagLocalFileSystem();
94
- const userContext: UserInfo = { /* your user context */ };
95
-
96
- // Process files from configured local directories
97
- await fileTagger.Autotag(userContext);
114
+ await fileTagger.Autotag(contextUser);
98
115
  ```
99
116
 
100
117
  ### Azure Blob Storage Processing
101
118
 
102
119
  ```typescript
103
120
  import { AutotagAzureBlob } from '@memberjunction/content-autotagging';
104
- import { UserInfo } from '@memberjunction/core';
105
121
 
106
122
  const blobTagger = new AutotagAzureBlob(
107
123
  process.env.AZURE_STORAGE_CONNECTION_STRING,
108
124
  'your-container-name'
109
125
  );
110
-
111
126
  await blobTagger.Authenticate();
112
- await blobTagger.Autotag(userContext);
127
+ await blobTagger.Autotag(contextUser);
113
128
  ```
114
129
 
115
130
  ### Direct Engine Usage
116
131
 
117
- For more control over the processing pipeline:
118
-
119
132
  ```typescript
120
133
  import { AutotagBaseEngine } from '@memberjunction/content-autotagging';
121
- import { ContentItemEntity } from '@memberjunction/core-entities';
122
134
 
123
135
  const engine = AutotagBaseEngine.Instance;
124
-
125
- // Process specific content items
126
- const contentItems: ContentItemEntity[] = [ /* your content items */ ];
127
- await engine.ExtractTextAndProcessWithLLM(contentItems, userContext);
136
+ await engine.ExtractTextAndProcessWithLLM(contentItems, contextUser);
128
137
  ```
129
138
 
130
- ## Content Processing Pipeline
131
-
132
- 1. **Content Source Discovery**: Retrieves configured content sources from the database
133
- 2. **Content Acquisition**: Fetches content from each source (RSS, web, files, etc.)
134
- 3. **Change Detection**: Compares checksums to identify new or modified content
135
- 4. **Text Extraction**: Extracts text from various formats (HTML, PDF, Office docs)
136
- 5. **AI Processing**:
137
- - Chunks content to fit model token limits
138
- - Validates content type
139
- - Generates title, summary, and keywords
140
- - Extracts custom attributes based on content type
141
- 6. **Storage**: Saves results to MemberJunction entities:
142
- - Content Items
143
- - Content Item Tags
144
- - Content Item Attributes
145
-
146
- ## Configuration
147
-
148
- ### Content Source Configuration
149
-
150
- Content sources are configured in the MemberJunction database with these key fields:
151
- - `Name`: Display name
152
- - `URL`: Source location (RSS URL, website URL, file path, etc.)
153
- - `ContentTypeID`: Type of content (article, blog post, etc.)
154
- - `ContentSourceTypeID`: Source type (RSS Feed, Website, etc.)
155
- - `ContentFileTypeID`: Expected file format
156
-
157
- ### AI Model Configuration
158
-
159
- The package uses AI models configured in MemberJunction. Key parameters:
160
- - `modelID`: Specific AI model to use
161
- - `minTags`: Minimum number of tags to generate
162
- - `maxTags`: Maximum number of tags to generate
163
- - Token limits are automatically handled based on model configuration
164
-
165
- ### Website Crawling Options
166
-
167
- For website sources, these parameters can be configured:
168
- - `CrawlOtherSitesInTopLevelDomain`: Whether to crawl other subdomains
169
- - `CrawlSitesInLowerLevelDomain`: Whether to crawl child paths
170
- - `MaxDepth`: Maximum crawl depth
171
- - `RootURL`: Base URL for crawling
172
- - `URLPattern`: Regex pattern for URL filtering
173
-
174
- ## Extending the Package
175
-
176
- ### Creating a Custom Content Source
139
+ ## Creating a Custom Content Source
177
140
 
178
141
  ```typescript
179
142
  import { AutotagBase } from '@memberjunction/content-autotagging';
180
143
  import { RegisterClass } from '@memberjunction/global';
181
- import { ContentSourceEntity, ContentItemEntity } from '@memberjunction/core-entities';
182
- import { UserInfo } from '@memberjunction/core';
183
144
 
184
145
  @RegisterClass(AutotagBase, 'AutotagCustomSource')
185
146
  export class AutotagCustomSource extends AutotagBase {
186
- public async SetContentItemsToProcess(
187
- contentSources: ContentSourceEntity[]
188
- ): Promise<ContentItemEntity[]> {
189
- // Implement logic to fetch and create content items
190
- const contentItems: ContentItemEntity[] = [];
191
-
192
- // Your custom source logic here
193
-
147
+ public async SetContentItemsToProcess(contentSources) {
148
+ // Fetch and create content items from your custom source
194
149
  return contentItems;
195
150
  }
196
151
 
197
- public async Autotag(contextUser: UserInfo): Promise<void> {
198
- // Set up content source type
152
+ public async Autotag(contextUser) {
199
153
  const contentSourceTypeID = await this.engine.setSubclassContentSourceType(
200
- 'Custom Source',
201
- contextUser
154
+ 'Custom Source', contextUser
202
155
  );
203
-
204
- // Get configured sources
205
156
  const contentSources = await this.engine.getAllContentSources(
206
- contextUser,
207
- contentSourceTypeID
157
+ contextUser, contentSourceTypeID
208
158
  );
209
-
210
- // Process content
211
159
  const contentItems = await this.SetContentItemsToProcess(contentSources);
212
160
  await this.engine.ExtractTextAndProcessWithLLM(contentItems, contextUser);
213
161
  }
214
162
  }
215
163
  ```
216
164
 
217
- ### Custom Content Type Attributes
218
-
219
- Add custom prompts for specific content types by creating Content Type Attributes in the database. These will be automatically included in the AI processing prompts.
220
-
221
- ## API Reference
222
-
223
- ### AutotagBase (Abstract)
224
-
225
- ```typescript
226
- abstract class AutotagBase {
227
- abstract SetContentItemsToProcess(
228
- contentSources: ContentSourceEntity[]
229
- ): Promise<ContentItemEntity[]>;
230
-
231
- abstract Autotag(contextUser: UserInfo): Promise<void>;
232
- }
233
- ```
234
-
235
- ### AutotagBaseEngine
236
-
237
- ```typescript
238
- class AutotagBaseEngine extends AIEngine {
239
- // Process content items with AI
240
- async ExtractTextAndProcessWithLLM(
241
- contentItems: ContentItemEntity[],
242
- contextUser: UserInfo
243
- ): Promise<void>;
244
-
245
- // Process individual content item text
246
- async ProcessContentItemText(
247
- params: ContentItemProcessParams,
248
- contextUser: UserInfo
249
- ): Promise<void>;
250
-
251
- // Get all content sources for a type
252
- async getAllContentSources(
253
- contextUser: UserInfo,
254
- contentSourceTypeID: string
255
- ): Promise<ContentSourceEntity[]>;
256
- }
257
- ```
258
-
259
- ## Environment Variables
260
-
261
- ```bash
262
- # For Azure Blob Storage
263
- AZURE_STORAGE_CONNECTION_STRING=your_connection_string
264
-
265
- # AI Model API Keys (handled by @memberjunction/ai)
266
- OPENAI_API_KEY=your_openai_key
267
- # Other AI provider keys as needed
268
- ```
269
-
270
- ## Error Handling
165
+ ## Database Entities
271
166
 
272
- The package includes comprehensive error handling:
273
- - Invalid content detection with automatic cleanup
274
- - Checksum-based duplicate detection
275
- - Graceful handling of parsing failures
276
- - Token limit management with automatic chunking
277
- - Network retry logic for external sources
167
+ | Entity | Purpose |
168
+ |--------|---------|
169
+ | Content Sources | Configuration for each content source |
170
+ | Content Items | Individual pieces of content with extracted text |
171
+ | Content Item Tags | AI-generated tags |
172
+ | Content Item Attributes | Additional extracted metadata |
173
+ | Content Process Runs | Processing history and audit trail |
174
+ | Content Types | Content categorization definitions |
175
+ | Content Source Types | Source type definitions |
176
+ | Content File Types | Supported file format definitions |
278
177
 
279
- ## Performance Considerations
280
-
281
- - **Incremental Processing**: Only new/modified content is processed
282
- - **Parallel Processing**: Content items can be processed in parallel
283
- - **Chunking**: Large documents are automatically chunked for AI processing
284
- - **Caching**: Processed content checksums prevent reprocessing
285
-
286
- ## Database Schema
178
+ ## Dependencies
287
179
 
288
- The package works with these MemberJunction entities:
289
- - `Content Sources` - Configuration for each source
290
- - `Content Items` - Individual pieces of content
291
- - `Content Item Tags` - Generated tags
292
- - `Content Item Attributes` - Additional extracted metadata
293
- - `Content Process Runs` - Processing history
294
- - `Content Types` - Content categorization
295
- - `Content Source Types` - Source type definitions
180
+ | Package | Purpose |
181
+ |---------|---------|
182
+ | `@memberjunction/core` | Entity system and metadata |
183
+ | `@memberjunction/global` | Class registration |
184
+ | `@memberjunction/core-entities` | Content entity types |
185
+ | `@memberjunction/ai` | LLM integration |
186
+ | `@memberjunction/aiengine` | AI Engine base class |
187
+ | `pdf-parse` | PDF text extraction |
188
+ | `officeparser` | Office document parsing |
189
+ | `cheerio` | HTML parsing |
190
+ | `axios` | HTTP requests for web content |
191
+ | `rss-parser` | RSS feed parsing |
296
192
 
297
193
  ## License
298
194
 
299
- ISC
195
+ ISC
@@ -0,0 +1,28 @@
1
+ import { AutotagBase } from "../../Core/index.js";
2
+ import { AutotagBaseEngine } from "../../Engine/index.js";
3
+ import { ContentSourceParams } from "../../Engine/index.js";
4
+ import { UserInfo } from "@memberjunction/core";
5
+ import { ContentSourceEntity, ContentItemEntity } from "@memberjunction/core-entities";
6
+ export declare abstract class CloudStorageBase extends AutotagBase {
7
+ protected contextUser: UserInfo;
8
+ protected engine: AutotagBaseEngine;
9
+ protected contentSourceTypeID: string;
10
+ constructor();
11
+ /**
12
+ * Abstract method to be implemented in the subclass. This method authenticates the user to the cloud storage.
13
+ */
14
+ abstract Authenticate(): Promise<void>;
15
+ /**
16
+ * Abstract method to be implemented in the subclass. Given a list of content sources, this method should return a list
17
+ * of content source items that have been modified or added after the most recent process run for that content source.
18
+ * Each cloud storage provider has a different way of accessing files and checking for modified or added items.
19
+ * @param contentSources - An array of content sources to check for modified or added content source items
20
+ * @param lastRunDate - The date of the most recent process run for the content source
21
+ * @param contextUser - The user context for the autotagging process
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
+ abstract SetNewAndModifiedContentItems(contentSourceParams: ContentSourceParams, lastRunDate: Date, contextUser: UserInfo): Promise<ContentItemEntity[]>;
25
+ Autotag(contextUser: UserInfo): Promise<void>;
26
+ SetContentItemsToProcess(contentSources: ContentSourceEntity[]): Promise<ContentItemEntity[]>;
27
+ }
28
+ //# sourceMappingURL=CloudStorageBase.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudStorageBase.d.ts","sourceRoot":"","sources":["../../../src/CloudStorage/generic/CloudStorageBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAIvF,8BAAsB,gBAAiB,SAAQ,WAAW;IACtD,SAAS,CAAC,WAAW,EAAE,QAAQ,CAAC;IAChC,SAAS,CAAC,MAAM,EAAE,iBAAiB,CAAC;IACpC,SAAS,CAAC,mBAAmB,EAAE,MAAM,CAAA;;IAOrC;;MAEE;aACc,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAE7C;;;;;;;;MAQE;aACc,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAElJ,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;CAyB7G"}
@@ -1,20 +1,11 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.CloudStorageBase = void 0;
7
- const Core_1 = require("../../Core");
8
- const Engine_1 = require("../../Engine");
9
- const dotenv_1 = __importDefault(require("dotenv"));
10
- dotenv_1.default.config();
11
- class CloudStorageBase extends Core_1.AutotagBase {
12
- contextUser;
13
- engine;
14
- contentSourceTypeID;
1
+ import { AutotagBase } from "../../Core/index.js";
2
+ import { AutotagBaseEngine } from "../../Engine/index.js";
3
+ import dotenv from 'dotenv';
4
+ dotenv.config({ quiet: true });
5
+ export class CloudStorageBase extends AutotagBase {
15
6
  constructor() {
16
7
  super();
17
- this.engine = Engine_1.AutotagBaseEngine.Instance;
8
+ this.engine = AutotagBaseEngine.Instance;
18
9
  }
19
10
  async Autotag(contextUser) {
20
11
  this.contextUser = contextUser;
@@ -44,5 +35,4 @@ class CloudStorageBase extends Core_1.AutotagBase {
44
35
  return contentItemsToProcess;
45
36
  }
46
37
  }
47
- exports.CloudStorageBase = CloudStorageBase;
48
38
  //# sourceMappingURL=CloudStorageBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CloudStorageBase.js","sourceRoot":"","sources":["../../../src/CloudStorage/generic/CloudStorageBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAIjD,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9B,MAAM,OAAgB,gBAAiB,SAAQ,WAAW;IAKtD;QACI,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC;IAC7C,CAAC;IAkBM,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,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAC7G,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;YACzC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAE1B,MAAM,mBAAmB,GAAwB;gBAC7C,eAAe,EAAE,aAAa,CAAC,EAAE;gBACjC,IAAI,EAAE,aAAa,CAAC,IAAI;gBACxB,aAAa,EAAE,aAAa,CAAC,aAAa;gBAC1C,mBAAmB,EAAE,aAAa,CAAC,mBAAmB;gBACtD,iBAAiB,EAAE,aAAa,CAAC,iBAAiB;gBAClD,GAAG,EAAE,aAAa,CAAC,GAAG;aACzB,CAAA;YAED,MAAM,WAAW,GAAS,MAAM,IAAI,CAAC,MAAM,CAAC,2BAA2B,CAAC,mBAAmB,CAAC,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAE/H,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,6BAA6B,CAAC,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAClH,qBAAqB,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YAChD,CAAC;QACL,CAAC;QAED,OAAO,qBAAqB,CAAC;IACjC,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ export * from './generic/CloudStorageBase.js';
2
+ export * from './providers/AutotagAzureBlob.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/CloudStorage/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './generic/CloudStorageBase.js';
2
+ export * from './providers/AutotagAzureBlob.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/CloudStorage/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA"}
@@ -1,15 +1,17 @@
1
- /// <reference types="node" />
2
- /// <reference types="node" />
3
- import { CloudStorageBase } from "../generic/CloudStorageBase";
1
+ import { CloudStorageBase } from "../generic/CloudStorageBase.js";
4
2
  import { UserInfo } from "@memberjunction/core";
5
3
  import { ContentItemEntity } from "@memberjunction/core-entities";
6
- import { ContentSourceParams } from "../../Engine";
4
+ import { ContentSourceParams } from "../../Engine/index.js";
7
5
  export declare class AutotagAzureBlob extends CloudStorageBase {
8
6
  private blobServiceClient;
9
7
  private containerClient;
10
8
  private connectionString;
11
9
  private containerName;
12
10
  constructor(connectionString: string, containerName: string);
11
+ /**
12
+ * Implemented abstract method from the CloudStorageBase class for cloud storage authentication. This method authenticates the user to the Azure Blob Storage.
13
+ * @returns void
14
+ */
13
15
  Authenticate(): Promise<void>;
14
16
  SetNewAndModifiedContentItems(contentSourceParams: ContentSourceParams, lastRunDate: Date, contextUser: UserInfo, prefix?: string): Promise<ContentItemEntity[]>;
15
17
  extractText(file: string): Promise<string>;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutotagAzureBlob.d.ts","sourceRoot":"","sources":["../../../src/CloudStorage/providers/AutotagAzureBlob.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAGlE,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGnD,qBAAa,gBAAiB,SAAQ,gBAAgB;IAClD,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,aAAa,CAAS;gBAElB,gBAAgB,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM;IAO3D;;;MAGE;IACW,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAc7B,6BAA6B,CAAC,mBAAmB,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAG,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAwC1J,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAQ1C,cAAc,CAAC,cAAc,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;CAYtF"}
@@ -1,28 +1,22 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.AutotagAzureBlob = void 0;
7
- const CloudStorageBase_1 = require("../generic/CloudStorageBase");
8
- const storage_blob_1 = require("@azure/storage-blob");
9
- const dotenv_1 = __importDefault(require("dotenv"));
10
- const core_1 = require("@memberjunction/core");
11
- const path_1 = __importDefault(require("path"));
12
- dotenv_1.default.config();
13
- class AutotagAzureBlob extends CloudStorageBase_1.CloudStorageBase {
14
- blobServiceClient;
15
- containerClient;
16
- connectionString;
17
- containerName;
1
+ import { CloudStorageBase } from "../generic/CloudStorageBase.js";
2
+ import { BlobServiceClient } from '@azure/storage-blob';
3
+ import dotenv from 'dotenv';
4
+ import { Metadata } from "@memberjunction/core";
5
+ import path from "path";
6
+ dotenv.config({ quiet: true });
7
+ export class AutotagAzureBlob extends CloudStorageBase {
18
8
  constructor(connectionString, containerName) {
19
9
  super();
20
10
  this.connectionString = connectionString;
21
11
  this.containerName = containerName;
22
12
  }
13
+ /**
14
+ * Implemented abstract method from the CloudStorageBase class for cloud storage authentication. This method authenticates the user to the Azure Blob Storage.
15
+ * @returns void
16
+ */
23
17
  async Authenticate() {
24
18
  try {
25
- this.blobServiceClient = storage_blob_1.BlobServiceClient.fromConnectionString(this.connectionString);
19
+ this.blobServiceClient = BlobServiceClient.fromConnectionString(this.connectionString);
26
20
  for await (const container of this.blobServiceClient.listContainers()) {
27
21
  console.log(`Container: ${container.name}`);
28
22
  }
@@ -36,9 +30,10 @@ class AutotagAzureBlob extends CloudStorageBase_1.CloudStorageBase {
36
30
  async SetNewAndModifiedContentItems(contentSourceParams, lastRunDate, contextUser, prefix = '') {
37
31
  const contentItemsToProcess = [];
38
32
  for await (const blob of this.containerClient.listBlobsFlat()) {
39
- const filePath = path_1.default.join(this.containerName, blob.name);
33
+ const filePath = path.join(this.containerName, blob.name);
40
34
  if (blob.properties.createdOn && blob.properties.createdOn > lastRunDate) {
41
- const md = new core_1.Metadata();
35
+ // The file has been created, add a new record for this file
36
+ const md = new Metadata();
42
37
  const contentItem = await md.GetEntityObject('Content Items', contextUser);
43
38
  const text = await this.extractText(blob.name);
44
39
  contentItem.ContentSourceID = contentSourceParams.contentSourceID;
@@ -54,7 +49,8 @@ class AutotagAzureBlob extends CloudStorageBase_1.CloudStorageBase {
54
49
  contentItemsToProcess.push(contentItem);
55
50
  }
56
51
  else if (blob.properties.lastModified && blob.properties.lastModified > lastRunDate) {
57
- const md = new core_1.Metadata();
52
+ // The file has been modified, update the record for this file
53
+ const md = new Metadata();
58
54
  const contentItem = await md.GetEntityObject('Content Items', contextUser);
59
55
  const contentItemID = await this.engine.getContentItemIDFromURL(contentSourceParams, contextUser);
60
56
  await contentItem.Load(contentItemID);
@@ -87,5 +83,4 @@ class AutotagAzureBlob extends CloudStorageBase_1.CloudStorageBase {
87
83
  });
88
84
  }
89
85
  }
90
- exports.AutotagAzureBlob = AutotagAzureBlob;
91
86
  //# sourceMappingURL=AutotagAzureBlob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutotagAzureBlob.js","sourceRoot":"","sources":["../../../src/CloudStorage/providers/AutotagAzureBlob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutotagBase.d.ts","sourceRoot":"","sources":["../../../src/Core/generic/AutotagBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvF,8BAAsB,WAAW;aACb,wBAAwB,CAAC,cAAc,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;aAC7F,OAAO,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;CAChE"}
@@ -0,0 +1,3 @@
1
+ export class AutotagBase {
2
+ }
3
+ //# sourceMappingURL=AutotagBase.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AutotagBase.js","sourceRoot":"","sources":["../../../src/Core/generic/AutotagBase.ts"],"names":[],"mappings":"AAGA,MAAM,OAAgB,WAAW;CAGhC"}
@@ -0,0 +1,2 @@
1
+ export * from './generic/AutotagBase.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './generic/AutotagBase.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/Core/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC"}