@devrev/ts-adaas 1.10.0 → 1.10.1-beta.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/uploader/uploader.d.ts +5 -0
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.js +22 -0
- package/dist/workers/default-workers/attachments-extraction.js +42 -1
- package/dist/workers/worker-adapter.d.ts +5 -0
- package/dist/workers/worker-adapter.d.ts.map +1 -1
- package/dist/workers/worker-adapter.js +21 -0
- package/package.json +1 -1
|
@@ -23,6 +23,11 @@ export declare class Uploader {
|
|
|
23
23
|
uploadArtifact(artifact: ArtifactToUpload, file: Buffer): Promise<AxiosResponse | void>;
|
|
24
24
|
streamArtifact(artifact: ArtifactToUpload, fileStream: any): Promise<AxiosResponse | void>;
|
|
25
25
|
confirmArtifactUpload(artifactId: string): Promise<AxiosResponse | void>;
|
|
26
|
+
/**
|
|
27
|
+
* Destroys a stream to prevent resource leaks.
|
|
28
|
+
* @param {any} fileStream - The axios response stream to destroy
|
|
29
|
+
*/
|
|
30
|
+
private destroyStream;
|
|
26
31
|
getAttachmentsFromArtifactId({ artifact, }: {
|
|
27
32
|
artifact: string;
|
|
28
33
|
}): Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAEL,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAyB;gBAEnC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,wBAAwB;IAWxD;;;;;;;;OAQG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,GAChC,OAAO,CAAC,cAAc,CAAC;IAwDpB,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuB7B,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmB1B,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,GAAG,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"uploader.d.ts","sourceRoot":"","sources":["../../src/uploader/uploader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAG/D,OAAO,EAEL,cAAc,EACd,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,qBAAa,QAAQ;IACnB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,kBAAkB,CAAC,CAAU;IACrC,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAyB;gBAEnC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,wBAAwB;IAWxD;;;;;;;;OAQG;IACG,MAAM,CACV,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,GAChC,OAAO,CAAC,cAAc,CAAC;IAwDpB,oBAAoB,CACxB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAuB7B,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAmB1B,cAAc,CAClB,QAAQ,EAAE,gBAAgB,EAC1B,UAAU,EAAE,GAAG,GACd,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAoC1B,qBAAqB,CACzB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAwBhC;;;OAGG;IACH,OAAO,CAAC,aAAa;IAef,4BAA4B,CAAC,EACjC,QAAQ,GACT,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;KAClB,GAAG,OAAO,CAAC;QACV,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;QACrC,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC;KAC7B,CAAC;YAqCY,sBAAsB;YAyBtB,gBAAgB;IAe9B,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,UAAU;IASZ,yBAAyB,CAAC,EAC9B,UAAU,EACV,SAAiB,GAClB,EAAE;QACD,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAAC;YAyBvB,eAAe;CA8B9B"}
|
|
@@ -148,6 +148,7 @@ class Uploader {
|
|
|
148
148
|
formData.append('file', fileStream.data);
|
|
149
149
|
if (fileStream.headers['content-length'] > constants_1.MAX_DEVREV_ARTIFACT_SIZE) {
|
|
150
150
|
console.warn(`File size exceeds the maximum limit of ${constants_1.MAX_DEVREV_ARTIFACT_SIZE} bytes.`);
|
|
151
|
+
this.destroyStream(fileStream);
|
|
151
152
|
return;
|
|
152
153
|
}
|
|
153
154
|
try {
|
|
@@ -164,6 +165,7 @@ class Uploader {
|
|
|
164
165
|
}
|
|
165
166
|
catch (error) {
|
|
166
167
|
console.error('Error while streaming artifact.', (0, logger_1.serializeError)(error));
|
|
168
|
+
this.destroyStream(fileStream);
|
|
167
169
|
return;
|
|
168
170
|
}
|
|
169
171
|
}
|
|
@@ -182,6 +184,26 @@ class Uploader {
|
|
|
182
184
|
console.error('Error while confirming artifact upload.', (0, logger_1.serializeError)(error));
|
|
183
185
|
}
|
|
184
186
|
}
|
|
187
|
+
/**
|
|
188
|
+
* Destroys a stream to prevent resource leaks.
|
|
189
|
+
* @param {any} fileStream - The axios response stream to destroy
|
|
190
|
+
*/
|
|
191
|
+
destroyStream(fileStream) {
|
|
192
|
+
try {
|
|
193
|
+
if (fileStream && fileStream.data) {
|
|
194
|
+
// For axios response streams, the data property contains the actual stream
|
|
195
|
+
if (typeof fileStream.data.destroy === 'function') {
|
|
196
|
+
fileStream.data.destroy();
|
|
197
|
+
}
|
|
198
|
+
else if (typeof fileStream.data.close === 'function') {
|
|
199
|
+
fileStream.data.close();
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
catch (error) {
|
|
204
|
+
console.warn('Error while destroying stream:', (0, logger_1.serializeError)(error));
|
|
205
|
+
}
|
|
206
|
+
}
|
|
185
207
|
async getAttachmentsFromArtifactId({ artifact, }) {
|
|
186
208
|
// Get the URL of the attachments metadata artifact
|
|
187
209
|
const artifactUrl = await this.getArtifactDownloadUrl(artifact);
|
|
@@ -6,10 +6,28 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const axios_1 = __importDefault(require("axios"));
|
|
7
7
|
const index_1 = require("../../index");
|
|
8
8
|
const axios_client_internal_1 = require("../../http/axios-client-internal");
|
|
9
|
+
const constants_1 = require("../../common/constants");
|
|
9
10
|
const getAttachmentStream = async ({ item, }) => {
|
|
10
11
|
const { id, url } = item;
|
|
12
|
+
let fileStreamResponse = null;
|
|
11
13
|
try {
|
|
12
|
-
|
|
14
|
+
// First, check file size with HEAD request to avoid downloading large files
|
|
15
|
+
const headResponse = await axios_client_internal_1.axiosClient.head(url, {
|
|
16
|
+
headers: {
|
|
17
|
+
'Accept-Encoding': 'identity',
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
const contentLength = headResponse.headers['content-length'];
|
|
21
|
+
if (contentLength && parseInt(contentLength) > constants_1.MAX_DEVREV_ARTIFACT_SIZE) {
|
|
22
|
+
console.warn(`Attachment ${id} size (${contentLength} bytes) exceeds maximum limit of ${constants_1.MAX_DEVREV_ARTIFACT_SIZE} bytes. Skipping download.`);
|
|
23
|
+
return {
|
|
24
|
+
error: {
|
|
25
|
+
message: `File size exceeds maximum limit of ${constants_1.MAX_DEVREV_ARTIFACT_SIZE} bytes.`,
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
// If size is acceptable, proceed with streaming
|
|
30
|
+
fileStreamResponse = await axios_client_internal_1.axiosClient.get(url, {
|
|
13
31
|
responseType: 'stream',
|
|
14
32
|
headers: {
|
|
15
33
|
'Accept-Encoding': 'identity',
|
|
@@ -18,6 +36,10 @@ const getAttachmentStream = async ({ item, }) => {
|
|
|
18
36
|
return { httpStream: fileStreamResponse };
|
|
19
37
|
}
|
|
20
38
|
catch (error) {
|
|
39
|
+
// If we created a stream but failed afterwards, destroy it
|
|
40
|
+
if (fileStreamResponse) {
|
|
41
|
+
destroyHttpStream(fileStreamResponse);
|
|
42
|
+
}
|
|
21
43
|
if (axios_1.default.isAxiosError(error)) {
|
|
22
44
|
console.warn(`Error while fetching attachment ${id} from URL.`, (0, index_1.serializeAxiosError)(error));
|
|
23
45
|
console.warn('Failed attachment metadata', item);
|
|
@@ -33,6 +55,25 @@ const getAttachmentStream = async ({ item, }) => {
|
|
|
33
55
|
};
|
|
34
56
|
}
|
|
35
57
|
};
|
|
58
|
+
/**
|
|
59
|
+
* Destroys a stream to prevent memory leaks.
|
|
60
|
+
* @param {any} httpStream - The axios response stream to destroy
|
|
61
|
+
*/
|
|
62
|
+
const destroyHttpStream = (httpStream) => {
|
|
63
|
+
try {
|
|
64
|
+
if (httpStream && httpStream.data) {
|
|
65
|
+
if (typeof httpStream.data.destroy === 'function') {
|
|
66
|
+
httpStream.data.destroy();
|
|
67
|
+
}
|
|
68
|
+
else if (typeof httpStream.data.close === 'function') {
|
|
69
|
+
httpStream.data.close();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.warn('Error while destroying HTTP stream:', error);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
36
77
|
(0, index_1.processTask)({
|
|
37
78
|
task: async ({ adapter }) => {
|
|
38
79
|
try {
|
|
@@ -67,6 +67,11 @@ export declare class WorkerAdapter<ConnectorState> {
|
|
|
67
67
|
itemTypeToLoad: ItemTypeToLoad;
|
|
68
68
|
}): Promise<LoadItemResponse>;
|
|
69
69
|
processAttachment(attachment: NormalizedAttachment, stream: ExternalSystemAttachmentStreamingFunction): Promise<ProcessAttachmentReturnType>;
|
|
70
|
+
/**
|
|
71
|
+
* Destroys a stream to prevent memory leaks.
|
|
72
|
+
* @param {any} httpStream - The axios response stream to destroy
|
|
73
|
+
*/
|
|
74
|
+
private destroyHttpStream;
|
|
70
75
|
loadAttachment({ item, create, }: {
|
|
71
76
|
item: ExternalSystemAttachment;
|
|
72
77
|
create: ExternalSystemLoadingFunction<ExternalSystemAttachment>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../src/workers/worker-adapter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../src/workers/worker-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,SAAS,EAET,yCAAyC,EACzC,kCAAkC,EAClC,2BAA2B,EAC3B,2BAA2B,EAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,wBAAwB,EACxB,6BAA6B,EAC7B,UAAU,EACV,eAAe,EAEhB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAkB,MAAM,iCAAiC,CAAC;AAO3E,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAIhF,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAM7C,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,EAClD,KAAK,EACL,YAAY,EACZ,OAAO,GACR,EAAE,sBAAsB,CAAC,cAAc,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,CAMxE;AAED;;;;;;;;;;;;;;GAcG;AACH,qBAAa,aAAa,CAAC,cAAc;IACvC,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,oBAAoB,CAAC;IACxC,SAAS,EAAE,OAAO,CAAC;IAEnB,OAAO,CAAC,YAAY,CAAwB;IAC5C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,gBAAgB,CAAU;IAClC,OAAO,CAAC,KAAK,CAAc;IAG3B,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAW;gBAEf,EACV,KAAK,EACL,YAAY,EACZ,OAAO,GACR,EAAE,sBAAsB,CAAC,cAAc,CAAC;IAqBzC,IAAI,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC,CAExC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,EAI5C;IAED,IAAI,OAAO,IAAI,YAAY,EAAE,CAE5B;IAED,IAAI,cAAc,IAAI,MAAM,EAAE,CAE7B;IAED,IAAI,OAAO,IAAI,OAAO,CAErB;IAED,eAAe,CAAC,KAAK,EAAE,aAAa,EAAE;IAyBtC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS;IAWrC,SAAS;IAIf,IAAI,SAAS,IAAI,QAAQ,EAAE,CAE1B;IAED,IAAI,SAAS,CAAC,SAAS,EAAE,QAAQ,EAAE,EAIlC;IAED;;;;;OAKG;IACG,IAAI,CACR,YAAY,EAAE,kBAAkB,GAAG,eAAe,EAClD,IAAI,CAAC,EAAE,SAAS,GACf,OAAO,CAAC,IAAI,CAAC;IAiFV,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IASrC,aAAa;IAIP,aAAa,CAAC,EAClB,eAAe,GAChB,EAAE,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAgHnD,gBAAgB,CAAC,EACrB,kBAAkB,GACnB,EAAE;QACD,kBAAkB,EAAE,MAAM,EAAE,CAAC;KAC9B;IAuBK,eAAe,CAAC,EACpB,MAAM,GACP,EAAE;QACD,MAAM,EAAE,6BAA6B,CAAC,wBAAwB,CAAC,CAAC;KACjE,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuE5B,QAAQ,CAAC,EACb,IAAI,EACJ,cAAc,GACf,EAAE;QACD,IAAI,EAAE,kBAAkB,CAAC;QACzB,cAAc,EAAE,cAAc,CAAC;KAChC,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAwKvB,iBAAiB,CACrB,UAAU,EAAE,oBAAoB,EAChC,MAAM,EAAE,yCAAyC,GAChD,OAAO,CAAC,2BAA2B,CAAC;IAwFvC;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAcnB,cAAc,CAAC,EACnB,IAAI,EACJ,MAAM,GACP,EAAE;QACD,IAAI,EAAE,wBAAwB,CAAC;QAC/B,MAAM,EAAE,6BAA6B,CAAC,wBAAwB,CAAC,CAAC;KACjE,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAgC7B;;;;;;OAMG;IACG,iBAAiB,CAAC,QAAQ,EAAE,EAChC,MAAM,EACN,UAAU,EACV,SAAa,GACd,EAAE;QACD,MAAM,EAAE,yCAAyC,CAAC;QAClD,UAAU,CAAC,EAAE,kCAAkC,CAC7C,cAAc,EACd,oBAAoB,EAAE,EACtB,QAAQ,CACT,CAAC;QACF,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC,2BAA2B,CAAC;CAsHzC"}
|
|
@@ -514,9 +514,11 @@ class WorkerAdapter {
|
|
|
514
514
|
const preparedArtifact = await this.uploader.getArtifactUploadUrl(attachment.file_name, fileType);
|
|
515
515
|
if (!preparedArtifact) {
|
|
516
516
|
console.warn(`Error while preparing artifact for attachment ID ${attachment.id}. Skipping attachment.`);
|
|
517
|
+
this.destroyHttpStream(httpStream);
|
|
517
518
|
return;
|
|
518
519
|
}
|
|
519
520
|
if (this.isTimeout) {
|
|
521
|
+
this.destroyHttpStream(httpStream);
|
|
520
522
|
return;
|
|
521
523
|
}
|
|
522
524
|
// Stream attachment
|
|
@@ -557,6 +559,25 @@ class WorkerAdapter {
|
|
|
557
559
|
}
|
|
558
560
|
return;
|
|
559
561
|
}
|
|
562
|
+
/**
|
|
563
|
+
* Destroys a stream to prevent memory leaks.
|
|
564
|
+
* @param {any} httpStream - The axios response stream to destroy
|
|
565
|
+
*/
|
|
566
|
+
destroyHttpStream(httpStream) {
|
|
567
|
+
try {
|
|
568
|
+
if (httpStream && httpStream.data) {
|
|
569
|
+
if (typeof httpStream.data.destroy === 'function') {
|
|
570
|
+
httpStream.data.destroy();
|
|
571
|
+
}
|
|
572
|
+
else if (typeof httpStream.data.close === 'function') {
|
|
573
|
+
httpStream.data.close();
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
catch (error) {
|
|
578
|
+
console.warn('Error while destroying HTTP stream:', error);
|
|
579
|
+
}
|
|
580
|
+
}
|
|
560
581
|
async loadAttachment({ item, create, }) {
|
|
561
582
|
// Create item
|
|
562
583
|
const { id, delay, error } = await create({
|