@devrev/airsync-sdk 2.0.0-beta.0 → 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.
Files changed (227) hide show
  1. package/README.md +7 -21
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +7 -1
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  6. package/dist/attachments-streaming/attachments-streaming-pool.js +70 -33
  7. package/dist/common/constants.d.ts +15 -12
  8. package/dist/common/constants.d.ts.map +1 -1
  9. package/dist/common/constants.js +20 -34
  10. package/dist/common/helpers.d.ts +3 -27
  11. package/dist/common/helpers.d.ts.map +1 -1
  12. package/dist/common/helpers.js +6 -36
  13. package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
  14. package/dist/http/client.d.ts.map +1 -0
  15. package/dist/http/{axios-client-internal.js → client.js} +7 -4
  16. package/dist/http/errors.d.ts +8 -0
  17. package/dist/http/errors.d.ts.map +1 -0
  18. package/dist/http/errors.js +31 -0
  19. package/dist/index.d.ts +30 -12
  20. package/dist/index.d.ts.map +1 -1
  21. package/dist/index.js +47 -28
  22. package/dist/logger/logger.d.ts +13 -70
  23. package/dist/logger/logger.d.ts.map +1 -1
  24. package/dist/logger/logger.interfaces.d.ts +4 -7
  25. package/dist/logger/logger.interfaces.d.ts.map +1 -1
  26. package/dist/logger/logger.js +67 -92
  27. package/dist/mappers/mappers.d.ts +10 -43
  28. package/dist/mappers/mappers.d.ts.map +1 -1
  29. package/dist/mappers/mappers.interfaces.d.ts +173 -0
  30. package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
  31. package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +1 -10
  32. package/dist/mappers/mappers.js +32 -46
  33. package/dist/multithreading/adapters/base-adapter.d.ts +39 -0
  34. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  35. package/dist/multithreading/adapters/base-adapter.js +212 -0
  36. package/dist/multithreading/adapters/extraction-adapter.d.ts +49 -0
  37. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  38. package/dist/multithreading/adapters/extraction-adapter.js +375 -0
  39. package/dist/multithreading/adapters/loading-adapter.d.ts +26 -0
  40. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  41. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts +12 -0
  42. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  43. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +2 -12
  44. package/dist/multithreading/adapters/loading-adapter.js +279 -0
  45. package/dist/multithreading/emit.d.ts +11 -0
  46. package/dist/multithreading/emit.d.ts.map +1 -0
  47. package/dist/multithreading/emit.js +25 -0
  48. package/dist/multithreading/process-task.d.ts +6 -1
  49. package/dist/multithreading/process-task.d.ts.map +1 -1
  50. package/dist/multithreading/process-task.js +124 -51
  51. package/dist/multithreading/spawn/spawn.d.ts +11 -11
  52. package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
  53. package/dist/multithreading/spawn/spawn.helpers.d.ts +12 -11
  54. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  55. package/dist/multithreading/spawn/spawn.helpers.js +142 -77
  56. package/dist/multithreading/spawn/spawn.js +74 -75
  57. package/dist/multithreading/worker.js +16 -5
  58. package/dist/repo/repo.d.ts +14 -5
  59. package/dist/repo/repo.d.ts.map +1 -1
  60. package/dist/repo/repo.helpers.d.ts +6 -0
  61. package/dist/repo/repo.helpers.d.ts.map +1 -0
  62. package/dist/repo/repo.helpers.js +16 -0
  63. package/dist/repo/repo.interfaces.d.ts +11 -20
  64. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  65. package/dist/repo/repo.js +36 -22
  66. package/dist/state/base-state.d.ts +58 -0
  67. package/dist/state/base-state.d.ts.map +1 -0
  68. package/dist/state/base-state.js +242 -0
  69. package/dist/state/extraction-state.d.ts +14 -0
  70. package/dist/state/extraction-state.d.ts.map +1 -0
  71. package/dist/state/extraction-state.js +140 -0
  72. package/dist/state/install-initial-domain-mapping.d.ts +4 -0
  73. package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
  74. package/dist/{common → state}/install-initial-domain-mapping.js +5 -7
  75. package/dist/state/loading-state.d.ts +8 -0
  76. package/dist/state/loading-state.d.ts.map +1 -0
  77. package/dist/state/loading-state.js +29 -0
  78. package/dist/state/state.d.ts +3 -29
  79. package/dist/state/state.d.ts.map +1 -1
  80. package/dist/state/state.interfaces.d.ts +36 -10
  81. package/dist/state/state.interfaces.d.ts.map +1 -1
  82. package/dist/state/state.interfaces.js +17 -1
  83. package/dist/state/state.js +9 -164
  84. package/dist/state/time-value-resolver.d.ts +17 -0
  85. package/dist/state/time-value-resolver.d.ts.map +1 -0
  86. package/dist/state/time-value-resolver.js +110 -0
  87. package/dist/testing/mock-event.d.ts +10 -0
  88. package/dist/testing/mock-event.d.ts.map +1 -0
  89. package/dist/testing/mock-event.js +96 -0
  90. package/dist/testing/mock-server.d.ts +31 -0
  91. package/dist/testing/mock-server.d.ts.map +1 -0
  92. package/dist/testing/mock-server.interfaces.d.ts +54 -0
  93. package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
  94. package/dist/testing/mock-server.interfaces.js +4 -0
  95. package/dist/testing/mock-server.js +297 -0
  96. package/dist/testing/test-adapters.d.ts +22 -0
  97. package/dist/testing/test-adapters.d.ts.map +1 -0
  98. package/dist/testing/test-adapters.js +32 -0
  99. package/dist/types/common.d.ts +4 -37
  100. package/dist/types/common.d.ts.map +1 -1
  101. package/dist/types/common.js +2 -17
  102. package/dist/types/errors.d.ts +15 -0
  103. package/dist/types/errors.d.ts.map +1 -0
  104. package/dist/types/errors.js +28 -0
  105. package/dist/types/external-domain-metadata.d.ts +197 -0
  106. package/dist/types/external-domain-metadata.d.ts.map +1 -0
  107. package/dist/types/extraction.d.ts +135 -278
  108. package/dist/types/extraction.d.ts.map +1 -1
  109. package/dist/types/extraction.js +46 -133
  110. package/dist/types/loading.d.ts +15 -55
  111. package/dist/types/loading.d.ts.map +1 -1
  112. package/dist/types/loading.js +1 -23
  113. package/dist/types/workers.d.ts +70 -103
  114. package/dist/types/workers.d.ts.map +1 -1
  115. package/dist/types/workers.js +1 -6
  116. package/dist/uploader/uploader.d.ts +10 -61
  117. package/dist/uploader/uploader.d.ts.map +1 -1
  118. package/dist/uploader/uploader.helpers.d.ts +7 -27
  119. package/dist/uploader/uploader.helpers.d.ts.map +1 -1
  120. package/dist/uploader/uploader.helpers.js +80 -30
  121. package/dist/uploader/uploader.interfaces.d.ts +19 -54
  122. package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
  123. package/dist/uploader/uploader.interfaces.js +8 -0
  124. package/dist/uploader/uploader.js +72 -124
  125. package/docs/MIGRATION.md +696 -0
  126. package/package.json +37 -20
  127. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
  128. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
  129. package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -267
  130. package/dist/common/control-protocol.d.ts +0 -10
  131. package/dist/common/control-protocol.d.ts.map +0 -1
  132. package/dist/common/control-protocol.js +0 -31
  133. package/dist/common/errors.d.ts +0 -6
  134. package/dist/common/errors.d.ts.map +0 -1
  135. package/dist/common/errors.js +0 -4
  136. package/dist/common/event-type-translation.d.ts +0 -24
  137. package/dist/common/event-type-translation.d.ts.map +0 -1
  138. package/dist/common/event-type-translation.js +0 -117
  139. package/dist/common/install-initial-domain-mapping.d.ts +0 -4
  140. package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
  141. package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
  142. package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
  143. package/dist/common/install-initial-domain-mapping.test.js +0 -207
  144. package/dist/deprecated/adapter/index.d.ts +0 -62
  145. package/dist/deprecated/adapter/index.d.ts.map +0 -1
  146. package/dist/deprecated/adapter/index.js +0 -151
  147. package/dist/deprecated/common/helpers.d.ts +0 -7
  148. package/dist/deprecated/common/helpers.d.ts.map +0 -1
  149. package/dist/deprecated/common/helpers.js +0 -47
  150. package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
  151. package/dist/deprecated/demo-extractor/index.d.ts +0 -18
  152. package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
  153. package/dist/deprecated/demo-extractor/index.js +0 -161
  154. package/dist/deprecated/http/client.d.ts +0 -22
  155. package/dist/deprecated/http/client.d.ts.map +0 -1
  156. package/dist/deprecated/http/client.js +0 -161
  157. package/dist/deprecated/uploader/index.d.ts +0 -35
  158. package/dist/deprecated/uploader/index.d.ts.map +0 -1
  159. package/dist/deprecated/uploader/index.js +0 -161
  160. package/dist/http/axios-client-internal.d.ts.map +0 -1
  161. package/dist/http/axios-client-internal.test.d.ts +0 -2
  162. package/dist/http/axios-client-internal.test.d.ts.map +0 -1
  163. package/dist/http/axios-client-internal.test.js +0 -154
  164. package/dist/http/axios-client.d.ts +0 -27
  165. package/dist/http/axios-client.d.ts.map +0 -1
  166. package/dist/http/axios-client.js +0 -57
  167. package/dist/http/constants.d.ts +0 -4
  168. package/dist/http/constants.d.ts.map +0 -1
  169. package/dist/http/constants.js +0 -6
  170. package/dist/http/index.d.ts +0 -3
  171. package/dist/http/index.d.ts.map +0 -1
  172. package/dist/http/index.js +0 -18
  173. package/dist/http/types.d.ts +0 -17
  174. package/dist/http/types.d.ts.map +0 -1
  175. package/dist/logger/logger.constants.d.ts +0 -6
  176. package/dist/logger/logger.constants.d.ts.map +0 -1
  177. package/dist/logger/logger.constants.js +0 -13
  178. package/dist/logger/logger.context.d.ts +0 -58
  179. package/dist/logger/logger.context.d.ts.map +0 -1
  180. package/dist/logger/logger.context.js +0 -86
  181. package/dist/logger/logger.test.d.ts +0 -2
  182. package/dist/logger/logger.test.d.ts.map +0 -1
  183. package/dist/logger/logger.test.js +0 -490
  184. package/dist/mappers/mappers.interface.d.ts +0 -294
  185. package/dist/mappers/mappers.interface.d.ts.map +0 -1
  186. package/dist/mappers/mappers.test.d.ts +0 -2
  187. package/dist/mappers/mappers.test.d.ts.map +0 -1
  188. package/dist/mappers/mappers.test.js +0 -107
  189. package/dist/multithreading/create-worker.test.d.ts +0 -2
  190. package/dist/multithreading/create-worker.test.d.ts.map +0 -1
  191. package/dist/multithreading/create-worker.test.js +0 -89
  192. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
  193. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
  194. package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
  195. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  196. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  197. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -127
  198. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
  199. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  200. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +0 -22
  201. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  202. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  203. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  204. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
  205. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -747
  206. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
  207. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
  208. package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
  209. package/dist/repo/repo.test.d.ts +0 -2
  210. package/dist/repo/repo.test.d.ts.map +0 -1
  211. package/dist/repo/repo.test.js +0 -131
  212. package/dist/state/state.test.d.ts +0 -2
  213. package/dist/state/state.test.d.ts.map +0 -1
  214. package/dist/state/state.test.js +0 -224
  215. package/dist/types/extraction.test.d.ts +0 -2
  216. package/dist/types/extraction.test.d.ts.map +0 -1
  217. package/dist/types/extraction.test.js +0 -70
  218. package/dist/types/index.d.ts +0 -9
  219. package/dist/types/index.d.ts.map +0 -1
  220. package/dist/types/index.js +0 -18
  221. package/dist/uploader/uploader.helpers.test.d.ts +0 -2
  222. package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
  223. package/dist/uploader/uploader.helpers.test.js +0 -267
  224. package/dist/uploader/uploader.test.d.ts +0 -2
  225. package/dist/uploader/uploader.test.d.ts.map +0 -1
  226. package/dist/uploader/uploader.test.js +0 -589
  227. /package/dist/{http/types.js → types/external-domain-metadata.js} +0 -0
@@ -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: new Error('Error while compressing jsonl object. ' + (0, logger_1.serializeError)(fileError)),
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: new Error('Error while getting artifact upload URL.'),
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: new Error('Error while uploading artifact.'),
52
+ error: {
53
+ message: 'Error while uploading artifact: ' +
54
+ (0, logger_1.serializeError)(uploadItemError),
55
+ },
54
56
  };
55
57
  }
56
- // Confirm upload
57
- const { error: confirmArtifactUploadError } = await this.confirmArtifactUpload(preparedArtifact.artifact_id);
58
- if (confirmArtifactUploadError) {
59
- return {
60
- error: new Error('Error while confirming artifact upload. ' +
61
- JSON.stringify(confirmArtifactUploadError)),
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
- // Return the artifact information to the platform
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 axios_client_internal_1.axiosClient.get(url, {
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 axios_client_internal_1.axiosClient.post(artifact.upload_url, formData, {
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 axios_client_internal_1.axiosClient.post(artifact.upload_url, formData, {
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 the memory
139
- maxRedirects: 0,
140
- // Allow 2xx and 3xx (redirects) to be considered successful, 4xx and 5xx will throw errors and be caught in the catch block
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
- this.destroyStream(fileStream);
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 axios_client_internal_1.axiosClient.post(url, {
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: new Error('Error while confirming artifact upload. ' +
172
- JSON.stringify(response)),
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: new Error('Error while getting artifact download URL. ' +
212
- (0, logger_1.serializeError)(artifactUrlError)),
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: new Error('Error while downloading gzipped jsonl object.' +
220
- (0, logger_1.serializeError)(gzippedJsonlObjectError)),
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: new Error('Error while decompressing gzipped jsonl object.' +
228
- (0, logger_1.serializeError)(jsonlObjectError)),
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: new Error('Error while parsing jsonl object.' + (0, logger_1.serializeError)(jsonObjectError)),
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 axios_client_internal_1.axiosClient.get(url, {
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 axios_client_internal_1.axiosClient.get(artifactUrl, {
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) {