@devrev/airsync-sdk 2.0.0-beta.1 → 2.0.0-beta.10
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/README.md +7 -21
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts +6 -7
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.js +69 -61
- package/dist/common/constants.d.ts +15 -12
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +20 -34
- package/dist/common/helpers.d.ts +3 -27
- package/dist/common/helpers.d.ts.map +1 -1
- package/dist/common/helpers.js +6 -36
- package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/{axios-client-internal.js → client.js} +7 -4
- package/dist/http/errors.d.ts +8 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +31 -0
- package/dist/index.d.ts +30 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -28
- package/dist/logger/logger.d.ts +13 -70
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.interfaces.d.ts +4 -7
- package/dist/logger/logger.interfaces.d.ts.map +1 -1
- package/dist/logger/logger.js +67 -92
- package/dist/mappers/mappers.d.ts +10 -43
- package/dist/mappers/mappers.d.ts.map +1 -1
- package/dist/mappers/mappers.interfaces.d.ts +173 -0
- package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
- package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +1 -10
- package/dist/mappers/mappers.js +32 -46
- package/dist/multithreading/adapters/base-adapter.d.ts +39 -0
- package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/base-adapter.js +212 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts +49 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/extraction-adapter.js +375 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts +26 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/loading-adapter.helpers.d.ts +12 -0
- package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
- package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +2 -12
- package/dist/multithreading/adapters/loading-adapter.js +279 -0
- package/dist/multithreading/emit.d.ts +11 -0
- package/dist/multithreading/emit.d.ts.map +1 -0
- package/dist/multithreading/emit.js +25 -0
- package/dist/multithreading/process-task.d.ts +6 -1
- package/dist/multithreading/process-task.d.ts.map +1 -1
- package/dist/multithreading/process-task.js +120 -82
- package/dist/multithreading/spawn/spawn.d.ts +10 -11
- package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
- package/dist/multithreading/spawn/spawn.helpers.d.ts +12 -11
- package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
- package/dist/multithreading/spawn/spawn.helpers.js +142 -77
- package/dist/multithreading/spawn/spawn.js +59 -75
- package/dist/multithreading/worker.js +16 -5
- package/dist/repo/repo.d.ts +14 -5
- package/dist/repo/repo.d.ts.map +1 -1
- package/dist/repo/repo.helpers.d.ts +6 -0
- package/dist/repo/repo.helpers.d.ts.map +1 -0
- package/dist/repo/repo.helpers.js +16 -0
- package/dist/repo/repo.interfaces.d.ts +11 -20
- package/dist/repo/repo.interfaces.d.ts.map +1 -1
- package/dist/repo/repo.js +36 -22
- package/dist/state/base-state.d.ts +58 -0
- package/dist/state/base-state.d.ts.map +1 -0
- package/dist/state/base-state.js +242 -0
- package/dist/state/extraction-state.d.ts +14 -0
- package/dist/state/extraction-state.d.ts.map +1 -0
- package/dist/state/extraction-state.js +140 -0
- package/dist/state/install-initial-domain-mapping.d.ts +4 -0
- package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
- package/dist/{common → state}/install-initial-domain-mapping.js +5 -7
- package/dist/state/loading-state.d.ts +8 -0
- package/dist/state/loading-state.d.ts.map +1 -0
- package/dist/state/loading-state.js +29 -0
- package/dist/state/state.d.ts +3 -29
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.interfaces.d.ts +31 -12
- package/dist/state/state.interfaces.d.ts.map +1 -1
- package/dist/state/state.interfaces.js +17 -1
- package/dist/state/state.js +9 -164
- package/dist/state/time-value-resolver.d.ts +17 -0
- package/dist/state/time-value-resolver.d.ts.map +1 -0
- package/dist/state/time-value-resolver.js +110 -0
- package/dist/testing/mock-event.d.ts +10 -0
- package/dist/testing/mock-event.d.ts.map +1 -0
- package/dist/testing/mock-event.js +96 -0
- package/dist/testing/mock-server.d.ts +31 -0
- package/dist/testing/mock-server.d.ts.map +1 -0
- package/dist/testing/mock-server.interfaces.d.ts +54 -0
- package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
- package/dist/testing/mock-server.interfaces.js +4 -0
- package/dist/testing/mock-server.js +297 -0
- package/dist/testing/test-adapters.d.ts +22 -0
- package/dist/testing/test-adapters.d.ts.map +1 -0
- package/dist/testing/test-adapters.js +32 -0
- package/dist/types/common.d.ts +4 -37
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +2 -17
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +28 -0
- package/dist/types/external-domain-metadata.d.ts +40 -162
- package/dist/types/external-domain-metadata.d.ts.map +1 -1
- package/dist/types/extraction.d.ts +135 -278
- package/dist/types/extraction.d.ts.map +1 -1
- package/dist/types/extraction.js +46 -133
- package/dist/types/loading.d.ts +15 -55
- package/dist/types/loading.d.ts.map +1 -1
- package/dist/types/loading.js +1 -23
- package/dist/types/workers.d.ts +70 -103
- package/dist/types/workers.d.ts.map +1 -1
- package/dist/types/workers.js +1 -6
- package/dist/uploader/uploader.d.ts +10 -61
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.d.ts +7 -27
- package/dist/uploader/uploader.helpers.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.js +80 -30
- package/dist/uploader/uploader.interfaces.d.ts +19 -54
- package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
- package/dist/uploader/uploader.interfaces.js +8 -0
- package/dist/uploader/uploader.js +72 -124
- package/docs/MIGRATION.md +696 -0
- package/package.json +35 -22
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
- package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -321
- package/dist/common/control-protocol.d.ts +0 -10
- package/dist/common/control-protocol.d.ts.map +0 -1
- package/dist/common/control-protocol.js +0 -31
- package/dist/common/errors.d.ts +0 -6
- package/dist/common/errors.d.ts.map +0 -1
- package/dist/common/errors.js +0 -4
- package/dist/common/event-type-translation.d.ts +0 -24
- package/dist/common/event-type-translation.d.ts.map +0 -1
- package/dist/common/event-type-translation.js +0 -117
- package/dist/common/install-initial-domain-mapping.d.ts +0 -4
- package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
- package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.js +0 -208
- package/dist/deprecated/adapter/index.d.ts +0 -62
- package/dist/deprecated/adapter/index.d.ts.map +0 -1
- package/dist/deprecated/adapter/index.js +0 -151
- package/dist/deprecated/common/helpers.d.ts +0 -7
- package/dist/deprecated/common/helpers.d.ts.map +0 -1
- package/dist/deprecated/common/helpers.js +0 -47
- package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
- package/dist/deprecated/demo-extractor/index.d.ts +0 -18
- package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
- package/dist/deprecated/demo-extractor/index.js +0 -161
- package/dist/deprecated/http/client.d.ts +0 -22
- package/dist/deprecated/http/client.d.ts.map +0 -1
- package/dist/deprecated/http/client.js +0 -161
- package/dist/deprecated/uploader/index.d.ts +0 -35
- package/dist/deprecated/uploader/index.d.ts.map +0 -1
- package/dist/deprecated/uploader/index.js +0 -161
- package/dist/http/axios-client-internal.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.d.ts +0 -2
- package/dist/http/axios-client-internal.test.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.js +0 -154
- package/dist/http/axios-client.d.ts +0 -27
- package/dist/http/axios-client.d.ts.map +0 -1
- package/dist/http/axios-client.js +0 -57
- package/dist/http/constants.d.ts +0 -4
- package/dist/http/constants.d.ts.map +0 -1
- package/dist/http/constants.js +0 -6
- package/dist/http/index.d.ts +0 -3
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -18
- package/dist/http/types.d.ts +0 -17
- package/dist/http/types.d.ts.map +0 -1
- package/dist/http/types.js +0 -2
- package/dist/logger/logger.constants.d.ts +0 -6
- package/dist/logger/logger.constants.d.ts.map +0 -1
- package/dist/logger/logger.constants.js +0 -13
- package/dist/logger/logger.context.d.ts +0 -58
- package/dist/logger/logger.context.d.ts.map +0 -1
- package/dist/logger/logger.context.js +0 -86
- package/dist/logger/logger.test.d.ts +0 -2
- package/dist/logger/logger.test.d.ts.map +0 -1
- package/dist/logger/logger.test.js +0 -490
- package/dist/mappers/mappers.interface.d.ts +0 -294
- package/dist/mappers/mappers.interface.d.ts.map +0 -1
- package/dist/mappers/mappers.test.d.ts +0 -2
- package/dist/mappers/mappers.test.d.ts.map +0 -1
- package/dist/mappers/mappers.test.js +0 -107
- package/dist/multithreading/create-worker.test.d.ts +0 -2
- package/dist/multithreading/create-worker.test.d.ts.map +0 -1
- package/dist/multithreading/create-worker.test.js +0 -89
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -127
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +0 -22
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
- package/dist/multithreading/worker-adapter/worker-adapter.js +0 -745
- package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
- package/dist/repo/repo.test.d.ts +0 -2
- package/dist/repo/repo.test.d.ts.map +0 -1
- package/dist/repo/repo.test.js +0 -131
- package/dist/state/state.test.d.ts +0 -2
- package/dist/state/state.test.d.ts.map +0 -1
- package/dist/state/state.test.js +0 -224
- package/dist/types/extraction.test.d.ts +0 -2
- package/dist/types/extraction.test.d.ts.map +0 -1
- package/dist/types/extraction.test.js +0 -70
- package/dist/types/index.d.ts +0 -10
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -18
- package/dist/uploader/uploader.helpers.test.d.ts +0 -2
- package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
- package/dist/uploader/uploader.helpers.test.js +0 -267
- package/dist/uploader/uploader.test.d.ts +0 -2
- package/dist/uploader/uploader.test.d.ts.map +0 -1
- package/dist/uploader/uploader.test.js +0 -589
|
@@ -6,80 +6,79 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.Uploader = void 0;
|
|
7
7
|
const form_data_1 = __importDefault(require("form-data"));
|
|
8
8
|
const js_jsonl_1 = require("js-jsonl");
|
|
9
|
-
const axios_client_internal_1 = require("../http/axios-client-internal");
|
|
10
9
|
const constants_1 = require("../common/constants");
|
|
10
|
+
const client_1 = require("../http/client");
|
|
11
11
|
const logger_1 = require("../logger/logger");
|
|
12
12
|
const uploader_helpers_1 = require("./uploader.helpers");
|
|
13
13
|
class Uploader {
|
|
14
|
-
constructor({ event, options }) {
|
|
14
|
+
constructor({ event, options, skipConfirmation }) {
|
|
15
15
|
this.devrevApiEndpoint = event.execution_metadata.devrev_endpoint;
|
|
16
16
|
this.devrevApiToken = event.context.secrets.service_account_token;
|
|
17
17
|
this.requestId = event.payload.event_context.request_id;
|
|
18
18
|
this.isLocalDevelopment = options === null || options === void 0 ? void 0 : options.isLocalDevelopment;
|
|
19
|
+
this.skipConfirmation = skipConfirmation !== null && skipConfirmation !== void 0 ? skipConfirmation : false;
|
|
19
20
|
this.defaultHeaders = {
|
|
20
21
|
Authorization: `Bearer ${this.devrevApiToken}`,
|
|
21
22
|
};
|
|
22
23
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Uploads the fetched objects to the DevRev platform. Fetched objects are compressed to a gzipped jsonl object and uploaded to the platform.
|
|
25
|
-
* @param {string} itemType - The type of the item to be uploaded
|
|
26
|
-
* @param {object[] | object} fetchedObjects - The objects to be uploaded
|
|
27
|
-
* @returns {Promise<UploadResponse>} - The response object containing the artifact information or error information if there was an error
|
|
28
|
-
*/
|
|
24
|
+
/** Compresses fetched objects to gzipped JSONL and uploads them as an artifact. */
|
|
29
25
|
async upload(itemType, fetchedObjects) {
|
|
30
26
|
if (this.isLocalDevelopment) {
|
|
31
27
|
await (0, uploader_helpers_1.downloadToLocal)(itemType, fetchedObjects);
|
|
32
28
|
}
|
|
33
|
-
// Compress the fetched objects to a gzipped jsonl object
|
|
34
29
|
const { response: file, error: fileError } = (0, uploader_helpers_1.compressGzip)(js_jsonl_1.jsonl.stringify(fetchedObjects));
|
|
35
30
|
if (fileError) {
|
|
36
31
|
return {
|
|
37
|
-
error:
|
|
32
|
+
error: {
|
|
33
|
+
message: 'Error while compressing jsonl object. ' +
|
|
34
|
+
(0, logger_1.serializeError)(fileError),
|
|
35
|
+
},
|
|
38
36
|
};
|
|
39
37
|
}
|
|
40
38
|
const filename = itemType + '.jsonl.gz';
|
|
41
39
|
const fileType = 'application/x-gzip';
|
|
42
|
-
// Get upload url
|
|
43
40
|
const { error: preparedArtifactError, response: preparedArtifact } = await this.getArtifactUploadUrl(filename, fileType);
|
|
44
41
|
if (preparedArtifactError) {
|
|
45
42
|
return {
|
|
46
|
-
error:
|
|
43
|
+
error: {
|
|
44
|
+
message: 'Error while getting artifact upload URL: ' +
|
|
45
|
+
(0, logger_1.serializeError)(preparedArtifactError),
|
|
46
|
+
},
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
// Upload prepared artifact to the given url
|
|
50
49
|
const { error: uploadItemError } = await this.uploadArtifact(preparedArtifact, file);
|
|
51
50
|
if (uploadItemError) {
|
|
52
51
|
return {
|
|
53
|
-
error:
|
|
52
|
+
error: {
|
|
53
|
+
message: 'Error while uploading artifact: ' +
|
|
54
|
+
(0, logger_1.serializeError)(uploadItemError),
|
|
55
|
+
},
|
|
54
56
|
};
|
|
55
57
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
if (!this.skipConfirmation) {
|
|
59
|
+
const { error: confirmArtifactUploadError } = await this.confirmArtifactUpload(preparedArtifact.artifact_id);
|
|
60
|
+
if (confirmArtifactUploadError) {
|
|
61
|
+
return {
|
|
62
|
+
error: {
|
|
63
|
+
message: 'Error while confirming artifact upload. ' +
|
|
64
|
+
JSON.stringify(confirmArtifactUploadError),
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
63
68
|
}
|
|
64
|
-
|
|
65
|
-
const artifact = {
|
|
66
|
-
id: preparedArtifact.artifact_id,
|
|
67
|
-
item_type: itemType,
|
|
68
|
-
item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1,
|
|
69
|
-
};
|
|
69
|
+
const artifactDateRanges = (0, uploader_helpers_1.computeArtifactDateRanges)(fetchedObjects);
|
|
70
|
+
const artifact = Object.assign({ id: preparedArtifact.artifact_id, item_type: itemType, item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1 }, artifactDateRanges);
|
|
70
71
|
return { artifact };
|
|
71
72
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Gets the upload URL for an artifact from the DevRev API.
|
|
74
|
-
* @param {string} filename - The name of the file to upload
|
|
75
|
-
* @param {string} fileType - The MIME type of the file
|
|
76
|
-
* @param {number} [fileSize] - Optional file size in bytes
|
|
77
|
-
* @returns {Promise<ArtifactToUpload | void>} The artifact upload information or undefined on error
|
|
78
|
-
*/
|
|
79
73
|
async getArtifactUploadUrl(filename, fileType, fileSize) {
|
|
80
74
|
const url = `${this.devrevApiEndpoint}/internal/airdrop.artifacts.upload-url`;
|
|
75
|
+
if (fileSize !== undefined && fileSize <= 0) {
|
|
76
|
+
return {
|
|
77
|
+
error: { message: 'File size is 0 or less.' },
|
|
78
|
+
};
|
|
79
|
+
}
|
|
81
80
|
try {
|
|
82
|
-
const response = await
|
|
81
|
+
const response = await client_1.axiosClient.get(url, {
|
|
83
82
|
headers: Object.assign({}, this.defaultHeaders),
|
|
84
83
|
params: {
|
|
85
84
|
request_id: this.requestId,
|
|
@@ -94,12 +93,7 @@ class Uploader {
|
|
|
94
93
|
return { error };
|
|
95
94
|
}
|
|
96
95
|
}
|
|
97
|
-
/**
|
|
98
|
-
* Uploads an artifact file to the provided upload URL using multipart form data.
|
|
99
|
-
* @param {ArtifactToUpload} artifact - The artifact upload information containing upload URL and form data
|
|
100
|
-
* @param {Buffer} file - The file buffer to upload
|
|
101
|
-
* @returns {Promise<AxiosResponse | void>} The axios response or undefined on error
|
|
102
|
-
*/
|
|
96
|
+
/** Uploads the file buffer to the artifact's upload URL as multipart form data. */
|
|
103
97
|
async uploadArtifact(artifact, file) {
|
|
104
98
|
const formData = new form_data_1.default();
|
|
105
99
|
for (const field in artifact.form_data) {
|
|
@@ -107,7 +101,7 @@ class Uploader {
|
|
|
107
101
|
}
|
|
108
102
|
formData.append('file', file);
|
|
109
103
|
try {
|
|
110
|
-
const response = await
|
|
104
|
+
const response = await client_1.axiosClient.post(artifact.upload_url, formData, {
|
|
111
105
|
headers: Object.assign({}, formData.getHeaders()),
|
|
112
106
|
});
|
|
113
107
|
return { response };
|
|
@@ -116,136 +110,101 @@ class Uploader {
|
|
|
116
110
|
return { error };
|
|
117
111
|
}
|
|
118
112
|
}
|
|
119
|
-
/**
|
|
120
|
-
* Streams an artifact file from an axios response to the upload URL.
|
|
121
|
-
* @param {ArtifactToUpload} artifact - The artifact upload information containing upload URL and form data
|
|
122
|
-
* @param {AxiosResponse} fileStream - The axios response stream containing the file data
|
|
123
|
-
* @returns {Promise<AxiosResponse | void>} The axios response or undefined on error
|
|
124
|
-
*/
|
|
113
|
+
/** Streams a file from an HTTP response directly to the artifact's upload URL. */
|
|
125
114
|
async streamArtifact(artifact, fileStream) {
|
|
126
115
|
const formData = new form_data_1.default();
|
|
127
116
|
for (const field in artifact.form_data) {
|
|
128
117
|
formData.append(field, artifact.form_data[field]);
|
|
129
118
|
}
|
|
130
119
|
formData.append('file', fileStream.data);
|
|
120
|
+
const hasContentLength = !!fileStream.headers['content-length'];
|
|
131
121
|
try {
|
|
132
|
-
const response = await
|
|
133
|
-
headers: Object.assign(Object.assign({}, formData.getHeaders()), (!fileStream.headers['content-length']
|
|
122
|
+
const response = await client_1.axiosClient.post(artifact.upload_url, formData, Object.assign({ headers: Object.assign(Object.assign({}, formData.getHeaders()), (!hasContentLength
|
|
134
123
|
? {
|
|
135
124
|
'Content-Length': constants_1.MAX_DEVREV_ARTIFACT_SIZE,
|
|
136
125
|
}
|
|
137
|
-
: {})),
|
|
138
|
-
// Prevents buffering of the response in
|
|
139
|
-
maxRedirects: 0,
|
|
140
|
-
//
|
|
141
|
-
validateStatus: (status) => status >= 200 && status < 400,
|
|
142
|
-
|
|
143
|
-
this.destroyStream(fileStream);
|
|
126
|
+
: {})),
|
|
127
|
+
// Prevents buffering of the response in memory
|
|
128
|
+
maxRedirects: 0,
|
|
129
|
+
// 2xx and 3xx are success; 4xx/5xx throw into the catch block
|
|
130
|
+
validateStatus: (status) => status >= 200 && status < 400 }, (!hasContentLength ? { 'axios-retry': { retries: 0 } } : {})));
|
|
131
|
+
(0, uploader_helpers_1.destroyHttpStream)(fileStream);
|
|
144
132
|
return { response };
|
|
145
133
|
}
|
|
146
134
|
catch (error) {
|
|
147
|
-
|
|
135
|
+
(0, uploader_helpers_1.destroyHttpStream)(fileStream);
|
|
148
136
|
return { error };
|
|
149
137
|
}
|
|
150
138
|
}
|
|
151
|
-
/**
|
|
152
|
-
* Confirms that an artifact upload has been completed successfully.
|
|
153
|
-
* @param {string} artifactId - The ID of the artifact to confirm
|
|
154
|
-
* @returns {Promise<AxiosResponse | void>} The axios response or undefined on error
|
|
155
|
-
*/
|
|
156
139
|
async confirmArtifactUpload(artifactId) {
|
|
157
140
|
const url = `${this.devrevApiEndpoint}/internal/airdrop.artifacts.confirm-upload`;
|
|
158
141
|
try {
|
|
159
|
-
const response = await
|
|
142
|
+
const response = await client_1.axiosClient.post(url, {
|
|
160
143
|
request_id: this.requestId,
|
|
161
144
|
artifact_id: artifactId,
|
|
162
145
|
}, {
|
|
163
146
|
headers: Object.assign({}, this.defaultHeaders),
|
|
164
147
|
});
|
|
165
|
-
// If response exists and the status is 2xx, return the response
|
|
166
148
|
if ((response === null || response === void 0 ? void 0 : response.status) >= 200 && (response === null || response === void 0 ? void 0 : response.status) < 300) {
|
|
167
149
|
return { response };
|
|
168
150
|
}
|
|
169
151
|
else {
|
|
170
152
|
return {
|
|
171
|
-
error:
|
|
172
|
-
|
|
153
|
+
error: {
|
|
154
|
+
message: 'Error while confirming artifact upload. ' +
|
|
155
|
+
(0, logger_1.serializeError)(response),
|
|
156
|
+
},
|
|
173
157
|
};
|
|
174
158
|
}
|
|
175
159
|
}
|
|
176
160
|
catch (error) {
|
|
177
|
-
return { error: (0, logger_1.serializeError)(error) };
|
|
161
|
+
return { error: { message: (0, logger_1.serializeError)(error) } };
|
|
178
162
|
}
|
|
179
163
|
}
|
|
180
|
-
/**
|
|
181
|
-
* Destroys a stream to prevent resource leaks.
|
|
182
|
-
* @param {any} fileStream - The axios response stream to destroy
|
|
183
|
-
*/
|
|
184
|
-
destroyStream(fileStream) {
|
|
185
|
-
try {
|
|
186
|
-
if (fileStream && fileStream.data) {
|
|
187
|
-
// For axios response streams, the data property contains the actual stream
|
|
188
|
-
if (typeof fileStream.data.destroy === 'function') {
|
|
189
|
-
fileStream.data.destroy();
|
|
190
|
-
}
|
|
191
|
-
else if (typeof fileStream.data.close === 'function') {
|
|
192
|
-
fileStream.data.close();
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
catch (error) {
|
|
197
|
-
console.warn('Error while destroying stream:', (0, logger_1.serializeError)(error));
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Retrieves attachment metadata from an artifact by downloading and parsing it.
|
|
202
|
-
* @param {object} param0 - Configuration object
|
|
203
|
-
* @param {string} param0.artifact - The artifact ID to download attachments from
|
|
204
|
-
* @returns {Promise<{attachments?: NormalizedAttachment[], error?: {message: string}}>} The attachments array or error object
|
|
205
|
-
*/
|
|
164
|
+
/** Downloads an artifact and parses it into attachment metadata. */
|
|
206
165
|
async getAttachmentsFromArtifactId({ artifact, }) {
|
|
207
|
-
// Get the URL of the attachments metadata artifact
|
|
208
166
|
const { response: artifactUrl, error: artifactUrlError } = await this.getArtifactDownloadUrl(artifact);
|
|
209
167
|
if (artifactUrlError) {
|
|
210
168
|
return {
|
|
211
|
-
error:
|
|
212
|
-
|
|
169
|
+
error: {
|
|
170
|
+
message: 'Error while getting artifact download URL. ' +
|
|
171
|
+
(0, logger_1.serializeError)(artifactUrlError),
|
|
172
|
+
},
|
|
213
173
|
};
|
|
214
174
|
}
|
|
215
|
-
// Download artifact from the URL
|
|
216
175
|
const { response: gzippedJsonlObject, error: gzippedJsonlObjectError } = await this.downloadArtifact(artifactUrl);
|
|
217
176
|
if (gzippedJsonlObjectError) {
|
|
218
177
|
return {
|
|
219
|
-
error:
|
|
220
|
-
|
|
178
|
+
error: {
|
|
179
|
+
message: 'Error while downloading gzipped jsonl object. ' +
|
|
180
|
+
(0, logger_1.serializeError)(gzippedJsonlObjectError),
|
|
181
|
+
},
|
|
221
182
|
};
|
|
222
183
|
}
|
|
223
|
-
// Decompress the gzipped jsonl object
|
|
224
184
|
const { response: jsonlObject, error: jsonlObjectError } = (0, uploader_helpers_1.decompressGzip)(gzippedJsonlObject);
|
|
225
185
|
if (jsonlObjectError) {
|
|
226
186
|
return {
|
|
227
|
-
error:
|
|
228
|
-
|
|
187
|
+
error: {
|
|
188
|
+
message: 'Error while decompressing gzipped jsonl object. ' +
|
|
189
|
+
(0, logger_1.serializeError)(jsonlObjectError),
|
|
190
|
+
},
|
|
229
191
|
};
|
|
230
192
|
}
|
|
231
|
-
// Parse the jsonl object to get the attachment metadata
|
|
232
193
|
const { response: jsonObject, error: jsonObjectError } = (0, uploader_helpers_1.parseJsonl)(jsonlObject);
|
|
233
194
|
if (jsonObjectError) {
|
|
234
195
|
return {
|
|
235
|
-
error:
|
|
196
|
+
error: {
|
|
197
|
+
message: 'Error while parsing jsonl object. ' +
|
|
198
|
+
(0, logger_1.serializeError)(jsonObjectError),
|
|
199
|
+
},
|
|
236
200
|
};
|
|
237
201
|
}
|
|
238
202
|
return { attachments: jsonObject };
|
|
239
203
|
}
|
|
240
|
-
/**
|
|
241
|
-
* Gets the download URL for an artifact from the DevRev API.
|
|
242
|
-
* @param {string} artifactId - The ID of the artifact to download
|
|
243
|
-
* @returns {Promise<string | void>} The download URL or undefined on error
|
|
244
|
-
*/
|
|
245
204
|
async getArtifactDownloadUrl(artifactId) {
|
|
246
205
|
const url = `${this.devrevApiEndpoint}/internal/airdrop.artifacts.download-url`;
|
|
247
206
|
try {
|
|
248
|
-
const response = await
|
|
207
|
+
const response = await client_1.axiosClient.get(url, {
|
|
249
208
|
headers: Object.assign({}, this.defaultHeaders),
|
|
250
209
|
params: {
|
|
251
210
|
request_id: this.requestId,
|
|
@@ -258,14 +217,9 @@ class Uploader {
|
|
|
258
217
|
return { error };
|
|
259
218
|
}
|
|
260
219
|
}
|
|
261
|
-
/**
|
|
262
|
-
* Downloads an artifact file from the given URL.
|
|
263
|
-
* @param {string} artifactUrl - The URL to download the artifact from
|
|
264
|
-
* @returns {Promise<Buffer | void>} The artifact file buffer or undefined on error
|
|
265
|
-
*/
|
|
266
220
|
async downloadArtifact(artifactUrl) {
|
|
267
221
|
try {
|
|
268
|
-
const response = await
|
|
222
|
+
const response = await client_1.axiosClient.get(artifactUrl, {
|
|
269
223
|
responseType: 'arraybuffer',
|
|
270
224
|
});
|
|
271
225
|
return { response: response.data };
|
|
@@ -274,13 +228,7 @@ class Uploader {
|
|
|
274
228
|
return { error };
|
|
275
229
|
}
|
|
276
230
|
}
|
|
277
|
-
/**
|
|
278
|
-
* Retrieves and parses JSON objects from an artifact by artifact ID.
|
|
279
|
-
* @param {object} param0 - Configuration object
|
|
280
|
-
* @param {string} param0.artifactId - The artifact ID to download and parse
|
|
281
|
-
* @param {boolean} [param0.isGzipped=false] - Whether the artifact is gzipped
|
|
282
|
-
* @returns {Promise<object[] | object | void>} The parsed JSON objects or undefined on error
|
|
283
|
-
*/
|
|
231
|
+
/** Downloads an artifact (optionally gzipped) and parses it as JSONL. */
|
|
284
232
|
async getJsonObjectByArtifactId({ artifactId, isGzipped = false, }) {
|
|
285
233
|
const { response: artifactUrl, error: artifactUrlError } = await this.getArtifactDownloadUrl(artifactId);
|
|
286
234
|
if (artifactUrlError) {
|