@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.
Files changed (43) hide show
  1. package/dist/common/control-protocol.d.ts +3 -2
  2. package/dist/common/control-protocol.d.ts.map +1 -1
  3. package/dist/common/control-protocol.js +2 -4
  4. package/dist/common/control-protocol.test.d.ts +2 -0
  5. package/dist/common/control-protocol.test.d.ts.map +1 -0
  6. package/dist/common/control-protocol.test.js +126 -0
  7. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +1 -0
  8. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -1
  9. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +94 -0
  10. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +1 -0
  11. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +1 -1
  12. package/dist/multithreading/worker-adapter/worker-adapter.helpers.js +7 -0
  13. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +28 -0
  14. package/dist/multithreading/worker-adapter/worker-adapter.interfaces.d.ts +14 -0
  15. package/dist/multithreading/worker-adapter/worker-adapter.interfaces.d.ts.map +1 -0
  16. package/dist/multithreading/worker-adapter/worker-adapter.interfaces.js +2 -0
  17. package/dist/multithreading/worker-adapter/worker-adapter.js +21 -2
  18. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.js +4 -3
  19. package/dist/repo/repo.d.ts +10 -0
  20. package/dist/repo/repo.d.ts.map +1 -1
  21. package/dist/repo/repo.helpers.d.ts +6 -0
  22. package/dist/repo/repo.helpers.d.ts.map +1 -0
  23. package/dist/repo/repo.helpers.js +16 -0
  24. package/dist/repo/repo.helpers.test.d.ts +2 -0
  25. package/dist/repo/repo.helpers.test.d.ts.map +1 -0
  26. package/dist/repo/repo.helpers.test.js +71 -0
  27. package/dist/repo/repo.interfaces.d.ts +2 -0
  28. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  29. package/dist/repo/repo.js +21 -0
  30. package/dist/repo/repo.test.js +162 -0
  31. package/dist/types/extraction.d.ts +8 -1
  32. package/dist/types/extraction.d.ts.map +1 -1
  33. package/dist/uploader/uploader.d.ts.map +1 -1
  34. package/dist/uploader/uploader.helpers.d.ts +6 -1
  35. package/dist/uploader/uploader.helpers.d.ts.map +1 -1
  36. package/dist/uploader/uploader.helpers.js +65 -0
  37. package/dist/uploader/uploader.helpers.test.js +148 -7
  38. package/dist/uploader/uploader.interfaces.d.ts +11 -0
  39. package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
  40. package/dist/uploader/uploader.interfaces.js +11 -0
  41. package/dist/uploader/uploader.js +7 -11
  42. package/dist/uploader/uploader.test.js +78 -3
  43. 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 test_utils_1 = require("../common/test-utils");
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.10",
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.76",
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.2"
55
+ "yargs": "^17.7.3"
56
56
  },
57
57
  "files": [
58
58
  "dist/**/*",