@devrev/ts-adaas 1.19.10 → 1.19.11-beta.1
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/common/control-protocol.d.ts +3 -2
- package/dist/common/control-protocol.d.ts.map +1 -1
- package/dist/common/control-protocol.js +2 -4
- package/dist/common/control-protocol.test.d.ts +2 -0
- package/dist/common/control-protocol.test.d.ts.map +1 -0
- package/dist/common/control-protocol.test.js +126 -0
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts +1 -0
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -1
- package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +94 -0
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +1 -0
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +1 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.js +7 -0
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +28 -0
- package/dist/multithreading/worker-adapter/worker-adapter.interfaces.d.ts +14 -0
- package/dist/multithreading/worker-adapter/worker-adapter.interfaces.d.ts.map +1 -0
- package/dist/multithreading/worker-adapter/worker-adapter.interfaces.js +2 -0
- package/dist/multithreading/worker-adapter/worker-adapter.js +21 -2
- package/dist/multithreading/worker-adapter/worker-adapter.loading.test.js +4 -3
- package/dist/repo/repo.d.ts +10 -0
- 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.helpers.test.d.ts +2 -0
- package/dist/repo/repo.helpers.test.d.ts.map +1 -0
- package/dist/repo/repo.helpers.test.js +71 -0
- package/dist/repo/repo.interfaces.d.ts +2 -0
- package/dist/repo/repo.interfaces.d.ts.map +1 -1
- package/dist/repo/repo.js +21 -0
- package/dist/repo/repo.test.js +162 -0
- package/dist/types/extraction.d.ts +8 -1
- package/dist/types/extraction.d.ts.map +1 -1
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.d.ts +6 -1
- package/dist/uploader/uploader.helpers.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.js +65 -0
- package/dist/uploader/uploader.helpers.test.js +148 -7
- package/dist/uploader/uploader.interfaces.d.ts +11 -0
- package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
- package/dist/uploader/uploader.interfaces.js +11 -0
- package/dist/uploader/uploader.js +7 -11
- package/dist/uploader/uploader.test.js +78 -3
- package/package.json +3 -3
|
@@ -78,12 +78,9 @@ class Uploader {
|
|
|
78
78
|
};
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
|
+
const artifactDateRanges = (0, uploader_helpers_1.computeArtifactDateRanges)(fetchedObjects);
|
|
81
82
|
// Return the artifact information to the platform
|
|
82
|
-
const artifact = {
|
|
83
|
-
id: preparedArtifact.artifact_id,
|
|
84
|
-
item_type: itemType,
|
|
85
|
-
item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1,
|
|
86
|
-
};
|
|
83
|
+
const artifact = Object.assign({ id: preparedArtifact.artifact_id, item_type: itemType, item_count: Array.isArray(fetchedObjects) ? fetchedObjects.length : 1 }, artifactDateRanges);
|
|
87
84
|
return { artifact };
|
|
88
85
|
}
|
|
89
86
|
/**
|
|
@@ -150,18 +147,17 @@ class Uploader {
|
|
|
150
147
|
formData.append(field, artifact.form_data[field]);
|
|
151
148
|
}
|
|
152
149
|
formData.append('file', fileStream.data);
|
|
150
|
+
const hasContentLength = !!fileStream.headers['content-length'];
|
|
153
151
|
try {
|
|
154
|
-
const response = await axios_client_internal_1.axiosClient.post(artifact.upload_url, formData, {
|
|
155
|
-
headers: Object.assign(Object.assign({}, formData.getHeaders()), (!fileStream.headers['content-length']
|
|
152
|
+
const response = await axios_client_internal_1.axiosClient.post(artifact.upload_url, formData, Object.assign({ headers: Object.assign(Object.assign({}, formData.getHeaders()), (!hasContentLength
|
|
156
153
|
? {
|
|
157
154
|
'Content-Length': constants_1.MAX_DEVREV_ARTIFACT_SIZE,
|
|
158
155
|
}
|
|
159
|
-
: {})),
|
|
156
|
+
: {})),
|
|
160
157
|
// Prevents buffering of the response in the memory
|
|
161
|
-
maxRedirects: 0,
|
|
158
|
+
maxRedirects: 0,
|
|
162
159
|
// Allow 2xx and 3xx (redirects) to be considered successful, 4xx and 5xx will throw errors and be caught in the catch block
|
|
163
|
-
validateStatus: (status) => status >= 200 && status < 400,
|
|
164
|
-
});
|
|
160
|
+
validateStatus: (status) => status >= 200 && status < 400 }, (!hasContentLength ? { 'axios-retry': { retries: 0 } } : {})));
|
|
165
161
|
this.destroyStream(fileStream);
|
|
166
162
|
return { response };
|
|
167
163
|
}
|
|
@@ -6,12 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const form_data_1 = __importDefault(require("form-data"));
|
|
7
7
|
const js_jsonl_1 = require("js-jsonl");
|
|
8
8
|
const zlib_1 = __importDefault(require("zlib"));
|
|
9
|
+
const test_utils_1 = require("../common/test-utils");
|
|
9
10
|
const axios_client_internal_1 = require("../http/axios-client-internal");
|
|
10
|
-
const test_helpers_1 = require("../tests/test-helpers");
|
|
11
11
|
const jest_setup_1 = require("../tests/jest.setup");
|
|
12
|
-
const
|
|
13
|
-
const uploader_helpers_1 = require("./uploader.helpers");
|
|
12
|
+
const test_helpers_1 = require("../tests/test-helpers");
|
|
14
13
|
const uploader_1 = require("./uploader");
|
|
14
|
+
const uploader_helpers_1 = require("./uploader.helpers");
|
|
15
15
|
jest.mock('../http/axios-client-internal');
|
|
16
16
|
jest.mock('./uploader.helpers', () => (Object.assign(Object.assign({}, jest.requireActual('./uploader.helpers')), { downloadToLocal: jest.fn(), compressGzip: jest.fn(jest.requireActual('./uploader.helpers').compressGzip) })));
|
|
17
17
|
const mockedAxiosClient = jest.mocked(axios_client_internal_1.axiosClient);
|
|
@@ -51,6 +51,57 @@ describe(uploader_1.Uploader.name, () => {
|
|
|
51
51
|
});
|
|
52
52
|
expect(result.error).toBeUndefined();
|
|
53
53
|
});
|
|
54
|
+
it('should compute oldest/newest created and modified dates from normalized items', async () => {
|
|
55
|
+
var _a, _b, _c, _d;
|
|
56
|
+
// Arrange
|
|
57
|
+
const itemType = 'tasks';
|
|
58
|
+
const fetchedObjects = [
|
|
59
|
+
{
|
|
60
|
+
id: '1',
|
|
61
|
+
created_date: '2020-06-15T10:00:00.000Z',
|
|
62
|
+
modified_date: '2021-01-20T10:00:00.000Z',
|
|
63
|
+
data: { name: 'Task 1' },
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
id: '2',
|
|
67
|
+
created_date: '2019-03-01T08:00:00.000Z',
|
|
68
|
+
modified_date: '2022-11-30T18:00:00.000Z',
|
|
69
|
+
data: { name: 'Task 2' },
|
|
70
|
+
},
|
|
71
|
+
];
|
|
72
|
+
mockedAxiosClient.get.mockResolvedValueOnce(mockArtifactUploadUrlResponse);
|
|
73
|
+
mockedAxiosClient.post.mockResolvedValue((0, test_helpers_1.createAxiosResponse)());
|
|
74
|
+
// Act
|
|
75
|
+
const result = await uploader.upload(itemType, fetchedObjects);
|
|
76
|
+
// Assert
|
|
77
|
+
expect((_a = result.artifact) === null || _a === void 0 ? void 0 : _a.oldest_created_date).toBe('2019-03-01T08:00:00.000Z');
|
|
78
|
+
expect((_b = result.artifact) === null || _b === void 0 ? void 0 : _b.newest_created_date).toBe('2020-06-15T10:00:00.000Z');
|
|
79
|
+
expect((_c = result.artifact) === null || _c === void 0 ? void 0 : _c.oldest_modified_date).toBe('2021-01-20T10:00:00.000Z');
|
|
80
|
+
expect((_d = result.artifact) === null || _d === void 0 ? void 0 : _d.newest_modified_date).toBe('2022-11-30T18:00:00.000Z');
|
|
81
|
+
expect(result.error).toBeUndefined();
|
|
82
|
+
});
|
|
83
|
+
it('should compute date ranges for single object upload', async () => {
|
|
84
|
+
var _a, _b, _c, _d;
|
|
85
|
+
// Arrange
|
|
86
|
+
const itemType = 'metadata';
|
|
87
|
+
const fetchedObject = {
|
|
88
|
+
id: '1',
|
|
89
|
+
created_date: '2018-12-25T00:00:00.000Z',
|
|
90
|
+
modified_date: '2018-12-26T00:00:00.000Z',
|
|
91
|
+
data: { key: 'value' },
|
|
92
|
+
};
|
|
93
|
+
mockedAxiosClient.get.mockResolvedValueOnce(mockArtifactUploadUrlResponse);
|
|
94
|
+
mockedAxiosClient.post.mockResolvedValue((0, test_helpers_1.createAxiosResponse)());
|
|
95
|
+
// Act
|
|
96
|
+
const result = await uploader.upload(itemType, fetchedObject);
|
|
97
|
+
// Assert
|
|
98
|
+
const createdTs = '2018-12-25T00:00:00.000Z';
|
|
99
|
+
const modifiedTs = '2018-12-26T00:00:00.000Z';
|
|
100
|
+
expect((_a = result.artifact) === null || _a === void 0 ? void 0 : _a.oldest_created_date).toBe(createdTs);
|
|
101
|
+
expect((_b = result.artifact) === null || _b === void 0 ? void 0 : _b.newest_created_date).toBe(createdTs);
|
|
102
|
+
expect((_c = result.artifact) === null || _c === void 0 ? void 0 : _c.oldest_modified_date).toBe(modifiedTs);
|
|
103
|
+
expect((_d = result.artifact) === null || _d === void 0 ? void 0 : _d.newest_modified_date).toBe(modifiedTs);
|
|
104
|
+
});
|
|
54
105
|
it('should report item_count as 1 when uploading single object', async () => {
|
|
55
106
|
var _a;
|
|
56
107
|
// Arrange
|
|
@@ -321,6 +372,30 @@ describe(uploader_1.Uploader.name, () => {
|
|
|
321
372
|
}),
|
|
322
373
|
}));
|
|
323
374
|
});
|
|
375
|
+
it('should disable axios-retry when falling back to a guessed Content-Length', async () => {
|
|
376
|
+
// Arrange
|
|
377
|
+
const artifact = (0, test_helpers_1.createArtifact)();
|
|
378
|
+
const fileStream = (0, test_helpers_1.createFileStream)({ includeContentLength: false });
|
|
379
|
+
mockedAxiosClient.post.mockResolvedValueOnce((0, test_helpers_1.createAxiosResponse)());
|
|
380
|
+
// Act
|
|
381
|
+
await uploader.streamArtifact(artifact, fileStream);
|
|
382
|
+
// Assert
|
|
383
|
+
expect(mockedAxiosClient.post).toHaveBeenCalledWith(artifact.upload_url, expect.any(form_data_1.default), expect.objectContaining({
|
|
384
|
+
'axios-retry': { retries: 0 },
|
|
385
|
+
}));
|
|
386
|
+
});
|
|
387
|
+
it('should not override axios-retry when the real Content-Length is known', async () => {
|
|
388
|
+
// Arrange
|
|
389
|
+
const artifact = (0, test_helpers_1.createArtifact)();
|
|
390
|
+
const fileStream = (0, test_helpers_1.createFileStream)({ contentLength: 1024 });
|
|
391
|
+
mockedAxiosClient.post.mockResolvedValueOnce((0, test_helpers_1.createAxiosResponse)());
|
|
392
|
+
// Act
|
|
393
|
+
await uploader.streamArtifact(artifact, fileStream);
|
|
394
|
+
// Assert
|
|
395
|
+
const callArgs = mockedAxiosClient.post.mock.calls[0];
|
|
396
|
+
const config = callArgs[2];
|
|
397
|
+
expect(config).not.toHaveProperty('axios-retry');
|
|
398
|
+
});
|
|
324
399
|
it('should destroy stream and return undefined when streaming fails', async () => {
|
|
325
400
|
// Arrange
|
|
326
401
|
const artifact = (0, test_helpers_1.createArtifact)();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devrev/ts-adaas",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.11-beta.1",
|
|
4
4
|
"description": "Typescript library containing the ADaaS(AirDrop as a Service) control protocol.",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -46,13 +46,13 @@
|
|
|
46
46
|
"typescript-eslint": "^8.46.1"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@devrev/typescript-sdk": "^1.1.
|
|
49
|
+
"@devrev/typescript-sdk": "^1.1.78",
|
|
50
50
|
"axios": "^1.17.0",
|
|
51
51
|
"axios-retry": "^4.5.0",
|
|
52
52
|
"form-data": "^4.0.4",
|
|
53
53
|
"js-jsonl": "^1.1.1",
|
|
54
54
|
"ts-node": "^10.9.2",
|
|
55
|
-
"yargs": "^17.7.
|
|
55
|
+
"yargs": "^17.7.3"
|
|
56
56
|
},
|
|
57
57
|
"files": [
|
|
58
58
|
"dist/**/*",
|