@memberjunction/core-actions 5.24.0 → 5.26.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/custom/files/add-document-content.action.d.ts +20 -0
- package/dist/custom/files/add-document-content.action.d.ts.map +1 -0
- package/dist/custom/files/add-document-content.action.js +74 -0
- package/dist/custom/files/add-document-content.action.js.map +1 -0
- package/dist/custom/files/base-file-storage.action.d.ts +6 -9
- package/dist/custom/files/base-file-storage.action.d.ts.map +1 -1
- package/dist/custom/files/base-file-storage.action.js +14 -39
- package/dist/custom/files/base-file-storage.action.js.map +1 -1
- package/dist/custom/files/create-document.action.d.ts +19 -0
- package/dist/custom/files/create-document.action.d.ts.map +1 -0
- package/dist/custom/files/create-document.action.js +65 -0
- package/dist/custom/files/create-document.action.js.map +1 -0
- package/dist/custom/files/excel-reader.action.js +1 -1
- package/dist/custom/files/excel-reader.action.js.map +1 -1
- package/dist/custom/files/finalize-document.action.d.ts +21 -0
- package/dist/custom/files/finalize-document.action.d.ts.map +1 -0
- package/dist/custom/files/finalize-document.action.js +94 -0
- package/dist/custom/files/finalize-document.action.js.map +1 -0
- package/dist/custom/files/index.d.ts +5 -0
- package/dist/custom/files/index.d.ts.map +1 -1
- package/dist/custom/files/index.js +6 -0
- package/dist/custom/files/index.js.map +1 -1
- package/dist/custom/files/list-storage-providers.action.d.ts.map +1 -1
- package/dist/custom/files/list-storage-providers.action.js +6 -33
- package/dist/custom/files/list-storage-providers.action.js.map +1 -1
- package/dist/custom/files/modify-document-section.action.d.ts +19 -0
- package/dist/custom/files/modify-document-section.action.d.ts.map +1 -0
- package/dist/custom/files/modify-document-section.action.js +85 -0
- package/dist/custom/files/modify-document-section.action.js.map +1 -0
- package/dist/custom/files/pdf-extractor.action.d.ts +8 -14
- package/dist/custom/files/pdf-extractor.action.d.ts.map +1 -1
- package/dist/custom/files/pdf-extractor.action.js +89 -91
- package/dist/custom/files/pdf-extractor.action.js.map +1 -1
- package/dist/custom/files/preview-document.action.d.ts +17 -0
- package/dist/custom/files/preview-document.action.d.ts.map +1 -0
- package/dist/custom/files/preview-document.action.js +50 -0
- package/dist/custom/files/preview-document.action.js.map +1 -0
- package/dist/custom/geo/scheduled-geocoding.action.d.ts +135 -0
- package/dist/custom/geo/scheduled-geocoding.action.d.ts.map +1 -0
- package/dist/custom/geo/scheduled-geocoding.action.js +428 -0
- package/dist/custom/geo/scheduled-geocoding.action.js.map +1 -0
- package/dist/custom/search/search.action.d.ts +67 -0
- package/dist/custom/search/search.action.d.ts.map +1 -0
- package/dist/custom/search/search.action.js +211 -0
- package/dist/custom/search/search.action.js.map +1 -0
- package/dist/custom/utilities/artifact-builder-service.d.ts +139 -0
- package/dist/custom/utilities/artifact-builder-service.d.ts.map +1 -0
- package/dist/custom/utilities/artifact-builder-service.js +338 -0
- package/dist/custom/utilities/artifact-builder-service.js.map +1 -0
- package/dist/custom/utilities/base-file-handler.d.ts +25 -3
- package/dist/custom/utilities/base-file-handler.d.ts.map +1 -1
- package/dist/custom/utilities/base-file-handler.js +81 -28
- package/dist/custom/utilities/base-file-handler.js.map +1 -1
- package/dist/custom/utilities/docx-renderer.d.ts +61 -0
- package/dist/custom/utilities/docx-renderer.d.ts.map +1 -0
- package/dist/custom/utilities/docx-renderer.js +409 -0
- package/dist/custom/utilities/docx-renderer.js.map +1 -0
- package/dist/custom/utilities/external-change-detection.action.d.ts.map +1 -1
- package/dist/custom/utilities/external-change-detection.action.js +7 -0
- package/dist/custom/utilities/external-change-detection.action.js.map +1 -1
- package/dist/custom/utilities/pdf-renderer.d.ts +53 -0
- package/dist/custom/utilities/pdf-renderer.d.ts.map +1 -0
- package/dist/custom/utilities/pdf-renderer.js +315 -0
- package/dist/custom/utilities/pdf-renderer.js.map +1 -0
- package/dist/custom/utilities/xlsx-renderer.d.ts +120 -0
- package/dist/custom/utilities/xlsx-renderer.d.ts.map +1 -0
- package/dist/custom/utilities/xlsx-renderer.js +165 -0
- package/dist/custom/utilities/xlsx-renderer.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/package.json +32 -27
- package/dist/custom/files/excel-writer.action.d.ts +0 -88
- package/dist/custom/files/excel-writer.action.d.ts.map +0 -1
- package/dist/custom/files/excel-writer.action.js +0 -326
- package/dist/custom/files/excel-writer.action.js.map +0 -1
- package/dist/custom/files/pdf-generator.action.d.ts +0 -66
- package/dist/custom/files/pdf-generator.action.d.ts.map +0 -1
- package/dist/custom/files/pdf-generator.action.js +0 -254
- package/dist/custom/files/pdf-generator.action.js.map +0 -1
|
@@ -0,0 +1,211 @@
|
|
|
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
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
8
|
+
import { RegisterClass } from "@memberjunction/global";
|
|
9
|
+
import { LogError, LogStatus } from "@memberjunction/core";
|
|
10
|
+
import { SearchEngine } from "@memberjunction/search-engine";
|
|
11
|
+
/**
|
|
12
|
+
* Action that executes a universal search across the organization's knowledge base.
|
|
13
|
+
*
|
|
14
|
+
* This action delegates to the `@memberjunction/search-engine` singleton which
|
|
15
|
+
* orchestrates vector similarity search, full-text search, entity LIKE-based search,
|
|
16
|
+
* and (optionally) storage file search. Results are fused via Reciprocal Rank Fusion (RRF),
|
|
17
|
+
* deduplicated, and enriched with entity icons, record names, and tags.
|
|
18
|
+
*
|
|
19
|
+
* Designed for use by AI agents (Sage, etc.), MCP connectors, A2A connectors,
|
|
20
|
+
* and workflow orchestration.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Simple search
|
|
25
|
+
* await runAction({
|
|
26
|
+
* ActionName: 'Search',
|
|
27
|
+
* Params: [{ Name: 'Query', Value: 'quarterly revenue by region' }]
|
|
28
|
+
* });
|
|
29
|
+
*
|
|
30
|
+
* // Advanced search with filters
|
|
31
|
+
* await runAction({
|
|
32
|
+
* ActionName: 'Search',
|
|
33
|
+
* Params: [
|
|
34
|
+
* { Name: 'Query', Value: 'customer onboarding process' },
|
|
35
|
+
* { Name: 'MaxResults', Value: 10 },
|
|
36
|
+
* { Name: 'MinScore', Value: 0.3 },
|
|
37
|
+
* { Name: 'EntityNames', Value: 'Documents,Knowledge Articles' },
|
|
38
|
+
* { Name: 'IncludeSources', Value: 'vector,fulltext' }
|
|
39
|
+
* ]
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
let SearchAction = class SearchAction extends BaseAction {
|
|
44
|
+
async InternalRunAction(params) {
|
|
45
|
+
try {
|
|
46
|
+
// --- Extract and validate input parameters ---
|
|
47
|
+
const query = this.getStringParam(params, "query");
|
|
48
|
+
if (!query) {
|
|
49
|
+
return this.createErrorResult("Query parameter is required", "MISSING_QUERY");
|
|
50
|
+
}
|
|
51
|
+
if (!params.ContextUser) {
|
|
52
|
+
return this.createErrorResult("User context is required", "MISSING_USER_CONTEXT");
|
|
53
|
+
}
|
|
54
|
+
const maxResults = this.getNumericParam(params, "maxresults", 25);
|
|
55
|
+
const minScore = this.getNumericParam(params, "minscore", 0);
|
|
56
|
+
const includeSources = this.parseIncludeSources(params);
|
|
57
|
+
const entityNames = this.parseEntityNames(params);
|
|
58
|
+
const tags = this.parseTags(params);
|
|
59
|
+
// --- Ensure SearchEngine is configured ---
|
|
60
|
+
await SearchEngine.Instance.Config({}, params.ContextUser);
|
|
61
|
+
// --- Build SearchParams ---
|
|
62
|
+
const searchParams = this.buildSearchParams(query, maxResults, minScore, entityNames, includeSources, tags);
|
|
63
|
+
LogStatus(`SearchAction: Searching for "${query}" (max ${maxResults}, minScore ${minScore})`);
|
|
64
|
+
// --- Execute search ---
|
|
65
|
+
const result = await SearchEngine.Instance.Search(searchParams, params.ContextUser);
|
|
66
|
+
if (!result.Success) {
|
|
67
|
+
return this.createErrorResult(result.ErrorMessage || "Search failed with no error message", "SEARCH_FAILED");
|
|
68
|
+
}
|
|
69
|
+
// --- Format results for output ---
|
|
70
|
+
const formattedResults = this.formatResults(result.Results);
|
|
71
|
+
// --- Build output parameters ---
|
|
72
|
+
const outputParams = [
|
|
73
|
+
{ Name: "Results", Value: formattedResults, Type: "Output" },
|
|
74
|
+
{ Name: "TotalCount", Value: result.TotalCount, Type: "Output" },
|
|
75
|
+
{ Name: "ElapsedMs", Value: result.ElapsedMs, Type: "Output" },
|
|
76
|
+
{ Name: "SourceCounts", Value: result.SourceCounts, Type: "Output" }
|
|
77
|
+
];
|
|
78
|
+
return {
|
|
79
|
+
Success: true,
|
|
80
|
+
ResultCode: "SUCCESS",
|
|
81
|
+
Message: `Found ${result.TotalCount} result(s) for "${query}" in ${result.ElapsedMs}ms`,
|
|
82
|
+
Params: outputParams
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
LogError(`SearchAction error: ${error instanceof Error ? error.message : String(error)}`);
|
|
87
|
+
return this.createErrorResult(`Unexpected error during search: ${error instanceof Error ? error.message : String(error)}`, "UNEXPECTED_ERROR");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// ─── Private helpers ──────────────────────────────────────────────
|
|
91
|
+
/**
|
|
92
|
+
* Parse the IncludeSources parameter into a SearchSource array.
|
|
93
|
+
* Accepts a comma-separated string.
|
|
94
|
+
*/
|
|
95
|
+
parseIncludeSources(params) {
|
|
96
|
+
const raw = this.getStringParam(params, "includesources");
|
|
97
|
+
if (!raw)
|
|
98
|
+
return undefined;
|
|
99
|
+
const validSources = ["vector", "fulltext", "entity"];
|
|
100
|
+
return raw
|
|
101
|
+
.split(",")
|
|
102
|
+
.map(s => s.trim().toLowerCase())
|
|
103
|
+
.filter((s) => validSources.includes(s));
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Parse the EntityNames filter parameter into a string array.
|
|
107
|
+
*/
|
|
108
|
+
parseEntityNames(params) {
|
|
109
|
+
const raw = this.getStringParam(params, "entitynames");
|
|
110
|
+
if (!raw)
|
|
111
|
+
return undefined;
|
|
112
|
+
return raw.split(",").map(s => s.trim()).filter(s => s.length > 0);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Parse the Tags filter parameter into a string array.
|
|
116
|
+
*/
|
|
117
|
+
parseTags(params) {
|
|
118
|
+
const raw = this.getStringParam(params, "tags");
|
|
119
|
+
if (!raw)
|
|
120
|
+
return undefined;
|
|
121
|
+
return raw.split(",").map(s => s.trim()).filter(s => s.length > 0);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Build a SearchParams object from the extracted and validated parameters.
|
|
125
|
+
*/
|
|
126
|
+
buildSearchParams(query, maxResults, minScore, entityNames, includeSources, tags) {
|
|
127
|
+
const searchParams = {
|
|
128
|
+
Query: query,
|
|
129
|
+
MaxResults: maxResults,
|
|
130
|
+
MinScore: minScore
|
|
131
|
+
};
|
|
132
|
+
const filters = this.buildFilters(entityNames, includeSources, tags);
|
|
133
|
+
if (filters) {
|
|
134
|
+
searchParams.Filters = filters;
|
|
135
|
+
}
|
|
136
|
+
return searchParams;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Build a SearchFilters object from the parsed filter parameters.
|
|
140
|
+
* Returns undefined if no filters are specified.
|
|
141
|
+
*/
|
|
142
|
+
buildFilters(entityNames, includeSources, tags) {
|
|
143
|
+
if (!entityNames && !includeSources && !tags) {
|
|
144
|
+
return undefined;
|
|
145
|
+
}
|
|
146
|
+
const filters = {};
|
|
147
|
+
if (entityNames && entityNames.length > 0) {
|
|
148
|
+
filters.EntityNames = entityNames;
|
|
149
|
+
}
|
|
150
|
+
if (includeSources && includeSources.length > 0) {
|
|
151
|
+
filters.SourceTypes = includeSources;
|
|
152
|
+
}
|
|
153
|
+
if (tags && tags.length > 0) {
|
|
154
|
+
filters.Tags = tags;
|
|
155
|
+
}
|
|
156
|
+
return filters;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Convert SearchResultItem objects into serialization-safe formatted results.
|
|
160
|
+
*/
|
|
161
|
+
formatResults(items) {
|
|
162
|
+
return items.map(item => ({
|
|
163
|
+
ID: item.ID,
|
|
164
|
+
EntityName: item.EntityName,
|
|
165
|
+
RecordID: item.RecordID,
|
|
166
|
+
SourceType: item.SourceType,
|
|
167
|
+
ResultType: item.ResultType,
|
|
168
|
+
Title: item.Title,
|
|
169
|
+
Snippet: item.Snippet,
|
|
170
|
+
Score: item.Score,
|
|
171
|
+
ScoreBreakdown: {
|
|
172
|
+
Vector: item.ScoreBreakdown.Vector,
|
|
173
|
+
FullText: item.ScoreBreakdown.FullText,
|
|
174
|
+
Entity: item.ScoreBreakdown.Entity,
|
|
175
|
+
Storage: item.ScoreBreakdown.Storage
|
|
176
|
+
},
|
|
177
|
+
Tags: item.Tags,
|
|
178
|
+
EntityIcon: item.EntityIcon,
|
|
179
|
+
RecordName: item.RecordName,
|
|
180
|
+
MatchedAt: item.MatchedAt instanceof Date ? item.MatchedAt.toISOString() : String(item.MatchedAt),
|
|
181
|
+
RawMetadata: item.RawMetadata
|
|
182
|
+
}));
|
|
183
|
+
}
|
|
184
|
+
// ─── Parameter extraction helpers ─────────────────────────────────
|
|
185
|
+
getStringParam(params, paramName) {
|
|
186
|
+
const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
|
|
187
|
+
if (!param || param.Value === undefined || param.Value === null)
|
|
188
|
+
return undefined;
|
|
189
|
+
const value = String(param.Value).trim();
|
|
190
|
+
return value.length > 0 ? value : undefined;
|
|
191
|
+
}
|
|
192
|
+
getNumericParam(params, paramName, defaultValue) {
|
|
193
|
+
const param = params.Params.find(p => p.Name.trim().toLowerCase() === paramName.toLowerCase());
|
|
194
|
+
if (!param || param.Value === undefined || param.Value === null)
|
|
195
|
+
return defaultValue;
|
|
196
|
+
const parsed = Number(param.Value);
|
|
197
|
+
return isNaN(parsed) ? defaultValue : parsed;
|
|
198
|
+
}
|
|
199
|
+
createErrorResult(message, code) {
|
|
200
|
+
return {
|
|
201
|
+
Success: false,
|
|
202
|
+
Message: message,
|
|
203
|
+
ResultCode: code
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
SearchAction = __decorate([
|
|
208
|
+
RegisterClass(BaseAction, "__Internal_Search")
|
|
209
|
+
], SearchAction);
|
|
210
|
+
export { SearchAction };
|
|
211
|
+
//# sourceMappingURL=search.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.action.js","sourceRoot":"","sources":["../../../src/custom/search/search.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { PDFOptions } from './pdf-renderer.js';
|
|
2
|
+
import { WordOptions } from './docx-renderer.js';
|
|
3
|
+
import { ExcelOptions } from './xlsx-renderer.js';
|
|
4
|
+
export type DocumentType = 'pdf' | 'docx' | 'xlsx';
|
|
5
|
+
export interface DocumentOptions {
|
|
6
|
+
pdf?: Partial<PDFOptions>;
|
|
7
|
+
word?: Partial<WordOptions>;
|
|
8
|
+
excel?: Partial<ExcelOptions>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A single content operation that can be added to a document.
|
|
12
|
+
* This is the union type that the LLM sends in the Operations parameter.
|
|
13
|
+
*/
|
|
14
|
+
export type DocumentOperation = {
|
|
15
|
+
type: 'heading';
|
|
16
|
+
level: 1 | 2 | 3 | 4 | 5 | 6;
|
|
17
|
+
text: string;
|
|
18
|
+
} | {
|
|
19
|
+
type: 'paragraph';
|
|
20
|
+
text: string;
|
|
21
|
+
bold?: boolean;
|
|
22
|
+
italic?: boolean;
|
|
23
|
+
align?: string;
|
|
24
|
+
} | {
|
|
25
|
+
type: 'table';
|
|
26
|
+
headers: string[];
|
|
27
|
+
rows: string[][];
|
|
28
|
+
} | {
|
|
29
|
+
type: 'list';
|
|
30
|
+
items: string[];
|
|
31
|
+
ordered?: boolean;
|
|
32
|
+
} | {
|
|
33
|
+
type: 'image';
|
|
34
|
+
src: string;
|
|
35
|
+
width?: number;
|
|
36
|
+
height?: number;
|
|
37
|
+
caption?: string;
|
|
38
|
+
} | {
|
|
39
|
+
type: 'pageBreak';
|
|
40
|
+
} | {
|
|
41
|
+
type: 'hr';
|
|
42
|
+
} | {
|
|
43
|
+
type: 'sheet';
|
|
44
|
+
name: string;
|
|
45
|
+
data: Record<string, unknown>[];
|
|
46
|
+
headers?: string[];
|
|
47
|
+
columnWidths?: number[];
|
|
48
|
+
} | {
|
|
49
|
+
type: 'formula';
|
|
50
|
+
sheet: string;
|
|
51
|
+
cell: string;
|
|
52
|
+
formula: string;
|
|
53
|
+
};
|
|
54
|
+
export interface DocumentSectionInfo {
|
|
55
|
+
id: string;
|
|
56
|
+
operations: DocumentOperation[];
|
|
57
|
+
}
|
|
58
|
+
export interface InProgressDocument {
|
|
59
|
+
handle: string;
|
|
60
|
+
documentType: DocumentType;
|
|
61
|
+
fileName: string;
|
|
62
|
+
options: DocumentOptions;
|
|
63
|
+
sections: DocumentSectionInfo[];
|
|
64
|
+
createdAt: Date;
|
|
65
|
+
lastModifiedAt: Date;
|
|
66
|
+
}
|
|
67
|
+
export interface DocumentPreview {
|
|
68
|
+
handle: string;
|
|
69
|
+
documentType: DocumentType;
|
|
70
|
+
fileName: string;
|
|
71
|
+
sectionCount: number;
|
|
72
|
+
sections: Array<{
|
|
73
|
+
id: string;
|
|
74
|
+
operationCount: number;
|
|
75
|
+
summary: string;
|
|
76
|
+
}>;
|
|
77
|
+
totalOperations: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Singleton service managing in-progress documents.
|
|
81
|
+
* Each document is identified by a UUID handle and persists across agent turns
|
|
82
|
+
* within the same Node.js process.
|
|
83
|
+
*/
|
|
84
|
+
export declare class ArtifactBuilderService {
|
|
85
|
+
private static _instance;
|
|
86
|
+
private documents;
|
|
87
|
+
private cleanupTimer;
|
|
88
|
+
private constructor();
|
|
89
|
+
static get Instance(): ArtifactBuilderService;
|
|
90
|
+
/**
|
|
91
|
+
* Create a new in-progress document and return its handle.
|
|
92
|
+
*/
|
|
93
|
+
CreateDocument(documentType: DocumentType, fileName?: string, options?: DocumentOptions): string;
|
|
94
|
+
/**
|
|
95
|
+
* Add content operations as a new section to an existing document.
|
|
96
|
+
* Returns the section ID(s) created.
|
|
97
|
+
*/
|
|
98
|
+
AddContent(handle: string, operations: DocumentOperation[]): string[];
|
|
99
|
+
/**
|
|
100
|
+
* Get a preview of the document's current state.
|
|
101
|
+
*/
|
|
102
|
+
GetPreview(handle: string): DocumentPreview;
|
|
103
|
+
/**
|
|
104
|
+
* Replace a section's content by ID.
|
|
105
|
+
*/
|
|
106
|
+
ReplaceSection(handle: string, sectionId: string, operations: DocumentOperation[]): void;
|
|
107
|
+
/**
|
|
108
|
+
* Remove a section by ID.
|
|
109
|
+
*/
|
|
110
|
+
RemoveSection(handle: string, sectionId: string): void;
|
|
111
|
+
/**
|
|
112
|
+
* Render the accumulated document to a binary buffer.
|
|
113
|
+
* The handle is disposed after finalization.
|
|
114
|
+
*/
|
|
115
|
+
Finalize(handle: string): Promise<{
|
|
116
|
+
buffer: Buffer;
|
|
117
|
+
fileName: string;
|
|
118
|
+
mimeType: string;
|
|
119
|
+
}>;
|
|
120
|
+
/**
|
|
121
|
+
* Dispose a document handle without finalizing.
|
|
122
|
+
*/
|
|
123
|
+
Dispose(handle: string): void;
|
|
124
|
+
/**
|
|
125
|
+
* Check if a handle exists.
|
|
126
|
+
*/
|
|
127
|
+
HasDocument(handle: string): boolean;
|
|
128
|
+
private finalizePDF;
|
|
129
|
+
private finalizeDocx;
|
|
130
|
+
private finalizeXlsx;
|
|
131
|
+
private operationsToPDFNodes;
|
|
132
|
+
private operationsToDocxSections;
|
|
133
|
+
private operationsToSheets;
|
|
134
|
+
private getDocument;
|
|
135
|
+
private defaultFileName;
|
|
136
|
+
private summarizeSection;
|
|
137
|
+
private startCleanupTimer;
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=artifact-builder-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifact-builder-service.d.ts","sourceRoot":"","sources":["../../../src/custom/utilities/artifact-builder-service.ts"],"names":[],"mappings":"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"}
|