@devrev/airsync-sdk 2.0.0-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.
Files changed (180) hide show
  1. package/README.md +31 -0
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +16 -0
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -0
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +9 -0
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -0
  6. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.js +2 -0
  7. package/dist/attachments-streaming/attachments-streaming-pool.js +97 -0
  8. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +2 -0
  9. package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +1 -0
  10. package/dist/attachments-streaming/attachments-streaming-pool.test.js +267 -0
  11. package/dist/common/constants.d.ts +25 -0
  12. package/dist/common/constants.d.ts.map +1 -0
  13. package/dist/common/constants.js +58 -0
  14. package/dist/common/control-protocol.d.ts +10 -0
  15. package/dist/common/control-protocol.d.ts.map +1 -0
  16. package/dist/common/control-protocol.js +31 -0
  17. package/dist/common/errors.d.ts +6 -0
  18. package/dist/common/errors.d.ts.map +1 -0
  19. package/dist/common/errors.js +4 -0
  20. package/dist/common/event-type-translation.d.ts +24 -0
  21. package/dist/common/event-type-translation.d.ts.map +1 -0
  22. package/dist/common/event-type-translation.js +117 -0
  23. package/dist/common/helpers.d.ts +41 -0
  24. package/dist/common/helpers.d.ts.map +1 -0
  25. package/dist/common/helpers.js +124 -0
  26. package/dist/common/install-initial-domain-mapping.d.ts +4 -0
  27. package/dist/common/install-initial-domain-mapping.d.ts.map +1 -0
  28. package/dist/common/install-initial-domain-mapping.js +58 -0
  29. package/dist/common/install-initial-domain-mapping.test.d.ts +2 -0
  30. package/dist/common/install-initial-domain-mapping.test.d.ts.map +1 -0
  31. package/dist/common/install-initial-domain-mapping.test.js +207 -0
  32. package/dist/deprecated/adapter/index.d.ts +62 -0
  33. package/dist/deprecated/adapter/index.d.ts.map +1 -0
  34. package/dist/deprecated/adapter/index.js +151 -0
  35. package/dist/deprecated/common/helpers.d.ts +7 -0
  36. package/dist/deprecated/common/helpers.d.ts.map +1 -0
  37. package/dist/deprecated/common/helpers.js +47 -0
  38. package/dist/deprecated/demo-extractor/external_domain_metadata.json +38 -0
  39. package/dist/deprecated/demo-extractor/index.d.ts +18 -0
  40. package/dist/deprecated/demo-extractor/index.d.ts.map +1 -0
  41. package/dist/deprecated/demo-extractor/index.js +161 -0
  42. package/dist/deprecated/http/client.d.ts +22 -0
  43. package/dist/deprecated/http/client.d.ts.map +1 -0
  44. package/dist/deprecated/http/client.js +161 -0
  45. package/dist/deprecated/uploader/index.d.ts +35 -0
  46. package/dist/deprecated/uploader/index.d.ts.map +1 -0
  47. package/dist/deprecated/uploader/index.js +161 -0
  48. package/dist/http/axios-client-internal.d.ts +3 -0
  49. package/dist/http/axios-client-internal.d.ts.map +1 -0
  50. package/dist/http/axios-client-internal.js +66 -0
  51. package/dist/http/axios-client-internal.test.d.ts +2 -0
  52. package/dist/http/axios-client-internal.test.d.ts.map +1 -0
  53. package/dist/http/axios-client-internal.test.js +154 -0
  54. package/dist/http/axios-client.d.ts +27 -0
  55. package/dist/http/axios-client.d.ts.map +1 -0
  56. package/dist/http/axios-client.js +57 -0
  57. package/dist/http/constants.d.ts +4 -0
  58. package/dist/http/constants.d.ts.map +1 -0
  59. package/dist/http/constants.js +6 -0
  60. package/dist/http/index.d.ts +3 -0
  61. package/dist/http/index.d.ts.map +1 -0
  62. package/dist/http/index.js +18 -0
  63. package/dist/http/types.d.ts +17 -0
  64. package/dist/http/types.d.ts.map +1 -0
  65. package/dist/http/types.js +2 -0
  66. package/dist/index.d.ts +14 -0
  67. package/dist/index.d.ts.map +1 -0
  68. package/dist/index.js +34 -0
  69. package/dist/logger/logger.constants.d.ts +6 -0
  70. package/dist/logger/logger.constants.d.ts.map +1 -0
  71. package/dist/logger/logger.constants.js +13 -0
  72. package/dist/logger/logger.context.d.ts +58 -0
  73. package/dist/logger/logger.context.d.ts.map +1 -0
  74. package/dist/logger/logger.context.js +86 -0
  75. package/dist/logger/logger.d.ts +89 -0
  76. package/dist/logger/logger.d.ts.map +1 -0
  77. package/dist/logger/logger.interfaces.d.ts +43 -0
  78. package/dist/logger/logger.interfaces.d.ts.map +1 -0
  79. package/dist/logger/logger.interfaces.js +9 -0
  80. package/dist/logger/logger.js +196 -0
  81. package/dist/logger/logger.test.d.ts +2 -0
  82. package/dist/logger/logger.test.d.ts.map +1 -0
  83. package/dist/logger/logger.test.js +490 -0
  84. package/dist/mappers/mappers.d.ts +52 -0
  85. package/dist/mappers/mappers.d.ts.map +1 -0
  86. package/dist/mappers/mappers.interface.d.ts +294 -0
  87. package/dist/mappers/mappers.interface.d.ts.map +1 -0
  88. package/dist/mappers/mappers.interface.js +48 -0
  89. package/dist/mappers/mappers.js +83 -0
  90. package/dist/mappers/mappers.test.d.ts +2 -0
  91. package/dist/mappers/mappers.test.d.ts.map +1 -0
  92. package/dist/mappers/mappers.test.js +107 -0
  93. package/dist/multithreading/create-worker.d.ts +5 -0
  94. package/dist/multithreading/create-worker.d.ts.map +1 -0
  95. package/dist/multithreading/create-worker.js +28 -0
  96. package/dist/multithreading/create-worker.test.d.ts +2 -0
  97. package/dist/multithreading/create-worker.test.d.ts.map +1 -0
  98. package/dist/multithreading/create-worker.test.js +89 -0
  99. package/dist/multithreading/process-task.d.ts +3 -0
  100. package/dist/multithreading/process-task.d.ts.map +1 -0
  101. package/dist/multithreading/process-task.js +58 -0
  102. package/dist/multithreading/spawn/spawn.d.ts +30 -0
  103. package/dist/multithreading/spawn/spawn.d.ts.map +1 -0
  104. package/dist/multithreading/spawn/spawn.helpers.d.ts +21 -0
  105. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -0
  106. package/dist/multithreading/spawn/spawn.helpers.js +114 -0
  107. package/dist/multithreading/spawn/spawn.helpers.test.d.ts +2 -0
  108. package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +1 -0
  109. package/dist/multithreading/spawn/spawn.helpers.test.js +293 -0
  110. package/dist/multithreading/spawn/spawn.js +249 -0
  111. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +2 -0
  112. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +1 -0
  113. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +127 -0
  114. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +91 -0
  115. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -0
  116. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +22 -0
  117. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +1 -0
  118. package/dist/multithreading/worker-adapter/worker-adapter.helpers.js +64 -0
  119. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +2 -0
  120. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +1 -0
  121. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +514 -0
  122. package/dist/multithreading/worker-adapter/worker-adapter.js +747 -0
  123. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +2 -0
  124. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +1 -0
  125. package/dist/multithreading/worker-adapter/worker-adapter.test.js +483 -0
  126. package/dist/multithreading/worker.d.ts +2 -0
  127. package/dist/multithreading/worker.d.ts.map +1 -0
  128. package/dist/multithreading/worker.js +9 -0
  129. package/dist/repo/repo.d.ts +18 -0
  130. package/dist/repo/repo.d.ts.map +1 -0
  131. package/dist/repo/repo.interfaces.d.ts +46 -0
  132. package/dist/repo/repo.interfaces.d.ts.map +1 -0
  133. package/dist/repo/repo.interfaces.js +2 -0
  134. package/dist/repo/repo.js +75 -0
  135. package/dist/repo/repo.test.d.ts +2 -0
  136. package/dist/repo/repo.test.d.ts.map +1 -0
  137. package/dist/repo/repo.test.js +131 -0
  138. package/dist/state/state.d.ts +30 -0
  139. package/dist/state/state.d.ts.map +1 -0
  140. package/dist/state/state.interfaces.d.ts +51 -0
  141. package/dist/state/state.interfaces.d.ts.map +1 -0
  142. package/dist/state/state.interfaces.js +21 -0
  143. package/dist/state/state.js +166 -0
  144. package/dist/state/state.test.d.ts +2 -0
  145. package/dist/state/state.test.d.ts.map +1 -0
  146. package/dist/state/state.test.js +224 -0
  147. package/dist/types/common.d.ts +50 -0
  148. package/dist/types/common.d.ts.map +1 -0
  149. package/dist/types/common.js +25 -0
  150. package/dist/types/extraction.d.ts +417 -0
  151. package/dist/types/extraction.d.ts.map +1 -0
  152. package/dist/types/extraction.js +170 -0
  153. package/dist/types/extraction.test.d.ts +2 -0
  154. package/dist/types/extraction.test.d.ts.map +1 -0
  155. package/dist/types/extraction.test.js +70 -0
  156. package/dist/types/index.d.ts +9 -0
  157. package/dist/types/index.d.ts.map +1 -0
  158. package/dist/types/index.js +18 -0
  159. package/dist/types/loading.d.ts +147 -0
  160. package/dist/types/loading.d.ts.map +1 -0
  161. package/dist/types/loading.js +48 -0
  162. package/dist/types/workers.d.ts +161 -0
  163. package/dist/types/workers.d.ts.map +1 -0
  164. package/dist/types/workers.js +22 -0
  165. package/dist/uploader/uploader.d.ts +92 -0
  166. package/dist/uploader/uploader.d.ts.map +1 -0
  167. package/dist/uploader/uploader.helpers.d.ts +33 -0
  168. package/dist/uploader/uploader.helpers.d.ts.map +1 -0
  169. package/dist/uploader/uploader.helpers.js +139 -0
  170. package/dist/uploader/uploader.helpers.test.d.ts +2 -0
  171. package/dist/uploader/uploader.helpers.test.d.ts.map +1 -0
  172. package/dist/uploader/uploader.helpers.test.js +267 -0
  173. package/dist/uploader/uploader.interfaces.d.ts +95 -0
  174. package/dist/uploader/uploader.interfaces.d.ts.map +1 -0
  175. package/dist/uploader/uploader.interfaces.js +2 -0
  176. package/dist/uploader/uploader.js +305 -0
  177. package/dist/uploader/uploader.test.d.ts +2 -0
  178. package/dist/uploader/uploader.test.d.ts.map +1 -0
  179. package/dist/uploader/uploader.test.js +589 -0
  180. package/package.json +60 -0
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.Uploader = void 0;
37
+ const typescript_sdk_1 = require("@devrev/typescript-sdk");
38
+ const fs_1 = __importStar(require("fs"));
39
+ const axios_client_internal_1 = require("../../http/axios-client-internal");
40
+ const helpers_1 = require("../common/helpers");
41
+ /**
42
+ * Uploader class is used to upload files to the DevRev platform.
43
+ * The class provides utilities to
44
+ * - prepare artifact
45
+ * - upload artifact
46
+ * - return the artifact information to the platform
47
+ *
48
+ * @class Uploader
49
+ * @constructor
50
+ * @param {string} endpoint - The endpoint of the DevRev platform
51
+ * @param {string} token - The token to authenticate with the DevRev platform
52
+ * @param {boolean} local - Flag to indicate if the uploader should upload to the file-system.
53
+ */
54
+ class Uploader {
55
+ constructor(endpoint, token, local = false) {
56
+ this.betaDevrevSdk = typescript_sdk_1.client.setupBeta({
57
+ endpoint,
58
+ token,
59
+ });
60
+ this.local = local;
61
+ }
62
+ /**
63
+ *
64
+ * Uploads the file to the DevRev platform. The file is uploaded to the platform
65
+ * and the artifact information is returned.
66
+ *
67
+ * @param {string} filename - The name of the file to be uploaded
68
+ * @param {string} entity - The entity type of the file to be uploaded
69
+ * @param {object[] | object} fetchedObjects - The objects to be uploaded
70
+ * @param filetype - The type of the file to be uploaded
71
+ * @returns {Promise<UploadResponse>} - The response object containing the artifact information
72
+ */
73
+ async upload(filename, entity, fetchedObjects, filetype = 'application/jsonl+json') {
74
+ if (this.local) {
75
+ await this.downloadToLocal(filename, fetchedObjects);
76
+ }
77
+ const preparedArtifact = await this.prepareArtifact(filename, filetype);
78
+ if (!preparedArtifact) {
79
+ return {
80
+ artifact: undefined,
81
+ error: { message: 'Error while preparing artifact' },
82
+ };
83
+ }
84
+ const uploadedArtifact = await this.uploadToArtifact(preparedArtifact, fetchedObjects);
85
+ if (!uploadedArtifact) {
86
+ return {
87
+ artifact: undefined,
88
+ error: { message: 'Error while uploading artifact' },
89
+ };
90
+ }
91
+ // If file was successfully uploaded we want to post data about that file when emitting
92
+ const itemCount = Array.isArray(fetchedObjects) ? fetchedObjects.length : 1;
93
+ const artifact = {
94
+ id: preparedArtifact.id,
95
+ item_type: entity,
96
+ item_count: itemCount,
97
+ };
98
+ console.log(`Artifact uploaded successfully: ${artifact.id}`);
99
+ return { artifact, error: undefined };
100
+ }
101
+ async prepareArtifact(filename, filetype) {
102
+ try {
103
+ const response = await this.betaDevrevSdk.artifactsPrepare({
104
+ file_name: filename,
105
+ file_type: filetype,
106
+ });
107
+ return response.data;
108
+ }
109
+ catch (error) {
110
+ console.error('Error while preparing artifact: ' + error);
111
+ return null;
112
+ }
113
+ }
114
+ async uploadToArtifact(
115
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
116
+ preparedArtifact, fetchedObjects
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ ) {
119
+ const formData = (0, helpers_1.createFormData)(preparedArtifact, fetchedObjects);
120
+ try {
121
+ const response = await axios_client_internal_1.axiosClient.post(preparedArtifact.url, formData, {
122
+ headers: {
123
+ 'Content-Type': 'multipart/form-data',
124
+ },
125
+ });
126
+ return response;
127
+ }
128
+ catch (error) {
129
+ console.error('Error while uploading artifact: ' + error);
130
+ return null;
131
+ }
132
+ }
133
+ async downloadToLocal(filePath, fetchedObjects) {
134
+ console.log(`Uploading ${filePath} to local file system`);
135
+ try {
136
+ if (!fs_1.default.existsSync('extracted_files')) {
137
+ fs_1.default.mkdirSync('extracted_files');
138
+ }
139
+ const timestamp = new Date().getTime();
140
+ const fileHandle = await fs_1.promises.open(`extracted_files/${timestamp}_${filePath}`, 'w');
141
+ let objArray = [];
142
+ if (!Array.isArray(fetchedObjects)) {
143
+ objArray.push(fetchedObjects);
144
+ }
145
+ else {
146
+ objArray = fetchedObjects;
147
+ }
148
+ for (const jsonObject of objArray) {
149
+ const jsonLine = JSON.stringify(jsonObject) + '\n';
150
+ await fileHandle.write(jsonLine);
151
+ }
152
+ await fileHandle.close();
153
+ console.log('Data successfully written to', filePath);
154
+ }
155
+ catch (error) {
156
+ console.error('Error writing data to file:', error);
157
+ return Promise.reject(error);
158
+ }
159
+ }
160
+ }
161
+ exports.Uploader = Uploader;
@@ -0,0 +1,3 @@
1
+ declare const axiosClient: import("axios").AxiosInstance;
2
+ export { axiosClient };
3
+ //# sourceMappingURL=axios-client-internal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios-client-internal.d.ts","sourceRoot":"","sources":["../../src/http/axios-client-internal.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,WAAW,+BAEf,CAAC;AAiFH,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.axiosClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const axios_retry_1 = __importDefault(require("axios-retry"));
9
+ const axiosClient = axios_1.default.create({
10
+ timeout: 30 * 1000,
11
+ });
12
+ exports.axiosClient = axiosClient;
13
+ (0, axios_retry_1.default)(axiosClient, {
14
+ retries: 5,
15
+ shouldResetTimeout: true,
16
+ retryDelay: (retryCount, error) => {
17
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
18
+ let delay;
19
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 429) {
20
+ const retryAfter = ((_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.headers) === null || _c === void 0 ? void 0 : _c['retry-after']) ||
21
+ ((_e = (_d = error.response) === null || _d === void 0 ? void 0 : _d.headers) === null || _e === void 0 ? void 0 : _e['Retry-After']);
22
+ delay = parseInt(retryAfter, 10) * 1000;
23
+ }
24
+ else {
25
+ delay = axios_retry_1.default.exponentialDelay(retryCount, error, 1000);
26
+ }
27
+ const requestId = ((_g = (_f = error.config) === null || _f === void 0 ? void 0 : _f.headers) === null || _g === void 0 ? void 0 : _g['x-request-id']) ||
28
+ ((_j = (_h = error.config) === null || _h === void 0 ? void 0 : _h.headers) === null || _j === void 0 ? void 0 : _j['X-Request-ID']);
29
+ const delayInSeconds = Math.round(delay / 1000);
30
+ console.warn(`Retrying request to ${(_k = error.config) === null || _k === void 0 ? void 0 : _k.url} in ${delayInSeconds}s due to ${(_m = (_l = error.response) === null || _l === void 0 ? void 0 : _l.status) !== null && _m !== void 0 ? _m : 'unknown'} error.`, Object.assign(Object.assign({ method: (_o = error.config) === null || _o === void 0 ? void 0 : _o.method }, (retryCount && { retryCount })), (requestId && { requestId })));
31
+ return delay;
32
+ },
33
+ retryCondition: (error) => {
34
+ var _a, _b, _c, _d, _e, _f, _g;
35
+ const retryAfter = ((_b = (_a = error.response) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? void 0 : _b['retry-after']) ||
36
+ ((_d = (_c = error.response) === null || _c === void 0 ? void 0 : _c.headers) === null || _d === void 0 ? void 0 : _d['Retry-After']);
37
+ // 5xx errors
38
+ if (((_e = error.response) === null || _e === void 0 ? void 0 : _e.status) && error.response.status >= 500) {
39
+ return true;
40
+ }
41
+ // 429 errors when retry-after header is present
42
+ else if (((_f = error.response) === null || _f === void 0 ? void 0 : _f.status) &&
43
+ error.response.status === 429 &&
44
+ retryAfter &&
45
+ !isNaN(Number(retryAfter)) &&
46
+ Number(retryAfter) >= 0) {
47
+ return true;
48
+ }
49
+ // Network errors for idempotent requests if not 429, because 429 is handled above
50
+ else if (axios_retry_1.default.isNetworkOrIdempotentRequestError(error) &&
51
+ ((_g = error.response) === null || _g === void 0 ? void 0 : _g.status) !== 429) {
52
+ return true;
53
+ }
54
+ // all other errors
55
+ else {
56
+ return false;
57
+ }
58
+ },
59
+ onMaxRetryTimesExceeded(error) {
60
+ var _a, _b, _c, _d, _e, _f;
61
+ (_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? true : delete _b.authorization;
62
+ (_d = (_c = error.config) === null || _c === void 0 ? void 0 : _c.headers) === null || _d === void 0 ? true : delete _d.Authorization;
63
+ (_e = error.request) === null || _e === void 0 ? true : delete _e._header;
64
+ console.error(`Request to ${(_f = error.config) === null || _f === void 0 ? void 0 : _f.url} failed after max retries. Error`, error);
65
+ },
66
+ });
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=axios-client-internal.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios-client-internal.test.d.ts","sourceRoot":"","sources":["../../src/http/axios-client-internal.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const jest_setup_1 = require("../tests/jest.setup");
4
+ const axios_client_internal_1 = require("./axios-client-internal");
5
+ jest.setTimeout(60000);
6
+ describe('Internal Axios Client', () => {
7
+ it('should not retry on 200 response', async () => {
8
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
9
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(1);
10
+ });
11
+ it('should not retry on 400 response', async () => {
12
+ jest_setup_1.mockServer.setRoute({
13
+ path: '/test-endpoint',
14
+ method: 'GET',
15
+ status: 400,
16
+ });
17
+ await expect(axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint')).rejects.toThrow();
18
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(1);
19
+ });
20
+ // TODO: This test is working as expected, but it takes too long to run. Not
21
+ // sure if it is good idea to have it.
22
+ // it('should retry on 500 response', async () => {
23
+ // mockServer.setRoute({
24
+ // path: '/test-endpoint',
25
+ // method: 'GET',
26
+ // status: 200,
27
+ // retry: {
28
+ // failureCount: 4,
29
+ // errorStatus: 500,
30
+ // errorBody: { error: 'Internal Server Error' },
31
+ // },
32
+ // });
33
+ // await axiosClient.get(mockServer.baseUrl + '/test-endpoint');
34
+ // expect(mockServer.getRequestCount('GET', '/test-endpoint')).toBe(5);
35
+ // });
36
+ it('should retry 2 times on 500 response and then succeed third time when response is 200', async () => {
37
+ jest_setup_1.mockServer.setRoute({
38
+ path: '/test-endpoint',
39
+ method: 'GET',
40
+ status: 200,
41
+ retry: {
42
+ failureCount: 2,
43
+ errorStatus: 500,
44
+ errorBody: { error: 'Internal Server Error' },
45
+ },
46
+ });
47
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
48
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(3);
49
+ });
50
+ it('should retry once after 3 seconds when response is 429 and Retry-After header is valid value', async () => {
51
+ jest_setup_1.mockServer.setRoute({
52
+ path: '/test-endpoint',
53
+ method: 'GET',
54
+ status: 200,
55
+ retry: {
56
+ failureCount: 1,
57
+ errorStatus: 429,
58
+ headers: {
59
+ 'Retry-After': '3',
60
+ },
61
+ },
62
+ });
63
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
64
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(2);
65
+ });
66
+ it('should retry once after 3 seconds and measure time between retries when response is 429 and Retry-After header is valid value', async () => {
67
+ jest_setup_1.mockServer.setRoute({
68
+ path: '/test-endpoint',
69
+ method: 'GET',
70
+ status: 200,
71
+ retry: {
72
+ failureCount: 1,
73
+ errorStatus: 429,
74
+ headers: { 'Retry-After': '3' },
75
+ },
76
+ });
77
+ const startTime = Date.now();
78
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
79
+ const endTime = Date.now();
80
+ const duration = endTime - startTime;
81
+ const expectedDuration = 3 * 1000;
82
+ expect(duration).toBeGreaterThanOrEqual(expectedDuration);
83
+ expect(duration).toBeLessThan(expectedDuration + 1000);
84
+ });
85
+ it('should retry when response is 429 and Retry-After header is lowercase', async () => {
86
+ jest_setup_1.mockServer.setRoute({
87
+ path: '/test-endpoint',
88
+ method: 'GET',
89
+ status: 200,
90
+ retry: {
91
+ failureCount: 1,
92
+ errorStatus: 429,
93
+ headers: { 'retry-after': '3' },
94
+ },
95
+ });
96
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
97
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(2);
98
+ });
99
+ it('[edge] should not retry when response is 429 and there is no Retry-After header', async () => {
100
+ jest_setup_1.mockServer.setRoute({
101
+ path: '/test-endpoint',
102
+ method: 'GET',
103
+ status: 200,
104
+ retry: {
105
+ failureCount: 1,
106
+ errorStatus: 429,
107
+ },
108
+ });
109
+ await expect(axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint')).rejects.toThrow();
110
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(1);
111
+ });
112
+ it('[edge] should retry when response is 429 and Retry-After header is 0', async () => {
113
+ jest_setup_1.mockServer.setRoute({
114
+ path: '/test-endpoint',
115
+ method: 'GET',
116
+ status: 200,
117
+ retry: {
118
+ failureCount: 1,
119
+ errorStatus: 429,
120
+ headers: { 'Retry-After': '0' },
121
+ },
122
+ });
123
+ await axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint');
124
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(2);
125
+ });
126
+ it('[edge] should not retry when response is 429 and Retry-After header is negative value', async () => {
127
+ jest_setup_1.mockServer.setRoute({
128
+ path: '/test-endpoint',
129
+ method: 'GET',
130
+ status: 200,
131
+ retry: {
132
+ failureCount: 1,
133
+ errorStatus: 429,
134
+ headers: { 'Retry-After': '-1' },
135
+ },
136
+ });
137
+ await expect(axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint')).rejects.toThrow();
138
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(1);
139
+ });
140
+ it('[edge] should not retry when response is 429 and Retry-After header is invalid value', async () => {
141
+ jest_setup_1.mockServer.setRoute({
142
+ path: '/test-endpoint',
143
+ method: 'GET',
144
+ status: 200,
145
+ retry: {
146
+ failureCount: 1,
147
+ errorStatus: 429,
148
+ headers: { 'Retry-After': 'invalid' },
149
+ },
150
+ });
151
+ await expect(axios_client_internal_1.axiosClient.get(jest_setup_1.mockServer.baseUrl + '/test-endpoint')).rejects.toThrow();
152
+ expect(jest_setup_1.mockServer.getRequestCount('GET', '/test-endpoint')).toBe(1);
153
+ });
154
+ });
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Axios client setup with retry capabilities using axios-retry.
3
+ *
4
+ * This module exports an Axios client instance (`axiosClient`) that is configured to automatically retry
5
+ * failed requests under certain conditions.
6
+ *
7
+ * Retry Conditions:
8
+ * 1. Network errors (where no response is received).
9
+ * 2. Idempotent requests (defaults include GET, HEAD, OPTIONS, PUT).
10
+ * 3. All 5xx server errors.
11
+ *
12
+ * Retry Strategy:
13
+ * - A maximum of 5 retries are attempted.
14
+ * - Exponential backoff delay is applied between retries, increasing with each retry attempt.
15
+ *
16
+ * Additional Features:
17
+ * - When the maximum number of retry attempts is reached, sensitive headers (like authorization)
18
+ * are removed from error logs for security reasons.
19
+ *
20
+ * Exported:
21
+ * - `axios`: Original axios instance for additional customizations or direct use.
22
+ * - `axiosClient`: Configured axios instance with retry logic.
23
+ */
24
+ import axios from 'axios';
25
+ declare const axiosClient: import("axios").AxiosInstance;
26
+ export { axios, axiosClient };
27
+ //# sourceMappingURL=axios-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axios-client.d.ts","sourceRoot":"","sources":["../../src/http/axios-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAqB,MAAM,OAAO,CAAC;AAG1C,QAAA,MAAM,WAAW,+BAAiB,CAAC;AAiCnC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC"}
@@ -0,0 +1,57 @@
1
+ "use strict";
2
+ /**
3
+ * Axios client setup with retry capabilities using axios-retry.
4
+ *
5
+ * This module exports an Axios client instance (`axiosClient`) that is configured to automatically retry
6
+ * failed requests under certain conditions.
7
+ *
8
+ * Retry Conditions:
9
+ * 1. Network errors (where no response is received).
10
+ * 2. Idempotent requests (defaults include GET, HEAD, OPTIONS, PUT).
11
+ * 3. All 5xx server errors.
12
+ *
13
+ * Retry Strategy:
14
+ * - A maximum of 5 retries are attempted.
15
+ * - Exponential backoff delay is applied between retries, increasing with each retry attempt.
16
+ *
17
+ * Additional Features:
18
+ * - When the maximum number of retry attempts is reached, sensitive headers (like authorization)
19
+ * are removed from error logs for security reasons.
20
+ *
21
+ * Exported:
22
+ * - `axios`: Original axios instance for additional customizations or direct use.
23
+ * - `axiosClient`: Configured axios instance with retry logic.
24
+ */
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.axiosClient = exports.axios = void 0;
30
+ const axios_1 = __importDefault(require("axios"));
31
+ exports.axios = axios_1.default;
32
+ const axios_retry_1 = __importDefault(require("axios-retry"));
33
+ const axiosClient = axios_1.default.create();
34
+ exports.axiosClient = axiosClient;
35
+ (0, axios_retry_1.default)(axiosClient, {
36
+ retries: 5,
37
+ retryDelay: (retryCount, error) => {
38
+ var _a, _b, _c;
39
+ // exponential backoff algorithm: 1 * 2 ^ retryCount * 1000ms
40
+ const delay = axios_retry_1.default.exponentialDelay(retryCount, error, 1000);
41
+ console.warn(`Request to ${(_a = error.config) === null || _a === void 0 ? void 0 : _a.url} failed with response status code ${(_b = error.response) === null || _b === void 0 ? void 0 : _b.status}. Method ${(_c = error.config) === null || _c === void 0 ? void 0 : _c.method}. Retry count: ${retryCount}. Retrying in ${Math.round(delay / 1000)}s.`);
42
+ return delay;
43
+ },
44
+ retryCondition: (error) => {
45
+ var _a, _b, _c;
46
+ return ((axios_retry_1.default.isNetworkOrIdempotentRequestError(error) &&
47
+ ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) !== 429) ||
48
+ ((_c = (_b = error.response) === null || _b === void 0 ? void 0 : _b.status) !== null && _c !== void 0 ? _c : 0) >= 500);
49
+ },
50
+ onMaxRetryTimesExceeded(error) {
51
+ var _a, _b, _c, _d;
52
+ (_b = (_a = error.config) === null || _a === void 0 ? void 0 : _a.headers) === null || _b === void 0 ? true : delete _b.authorization;
53
+ (_d = (_c = error.config) === null || _c === void 0 ? void 0 : _c.headers) === null || _d === void 0 ? true : delete _d.Authorization;
54
+ delete error.request._header;
55
+ console.warn('Max retry times exceeded. Error', error);
56
+ },
57
+ });
@@ -0,0 +1,4 @@
1
+ export declare const RATE_LIMIT_EXCEEDED = "LIMIT_EXCEEDED";
2
+ export declare const LAMBDA_LIMIT_EXCEEDED = "LAMBDA_LIMIT_EXCEEDED";
3
+ export declare const RATE_LIMIT_EXCEEDED_STATUS_CODE = 429;
4
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/http/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,mBAAmB,mBAAmB,CAAC;AACpD,eAAO,MAAM,qBAAqB,0BAA0B,CAAC;AAC7D,eAAO,MAAM,+BAA+B,MAAM,CAAC"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RATE_LIMIT_EXCEEDED_STATUS_CODE = exports.LAMBDA_LIMIT_EXCEEDED = exports.RATE_LIMIT_EXCEEDED = void 0;
4
+ exports.RATE_LIMIT_EXCEEDED = 'LIMIT_EXCEEDED';
5
+ exports.LAMBDA_LIMIT_EXCEEDED = 'LAMBDA_LIMIT_EXCEEDED';
6
+ exports.RATE_LIMIT_EXCEEDED_STATUS_CODE = 429;
@@ -0,0 +1,3 @@
1
+ export * from './axios-client';
2
+ export * from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/http/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./axios-client"), exports);
18
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,17 @@
1
+ /**
2
+ * HTTP Response type
3
+ * @deprecated
4
+ */
5
+ export type HTTPResponse = {
6
+ success: boolean;
7
+ message: string;
8
+ data: Data;
9
+ };
10
+ interface Data {
11
+ records: object[];
12
+ delay: number;
13
+ nextPage?: number;
14
+ metadata?: object;
15
+ }
16
+ export {};
17
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/http/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACZ,CAAC;AAEF,UAAU,IAAI;IACZ,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,14 @@
1
+ export * from './deprecated/adapter';
2
+ export * from './deprecated/demo-extractor';
3
+ export * from './deprecated/http/client';
4
+ export * from './deprecated/uploader';
5
+ export * from './http';
6
+ export * from './types';
7
+ export * from './common/install-initial-domain-mapping';
8
+ export { ExtractionCommonError } from './common/errors';
9
+ export { processTask } from './multithreading/process-task';
10
+ export { spawn } from './multithreading/spawn/spawn';
11
+ export { WorkerAdapter } from './multithreading/worker-adapter/worker-adapter';
12
+ export * from './types/workers';
13
+ export { formatAxiosError, serializeAxiosError } from './logger/logger';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AAEtC,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AAExB,cAAc,yCAAyC,CAAC;AAExD,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAE/E,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.serializeAxiosError = exports.formatAxiosError = exports.WorkerAdapter = exports.spawn = exports.processTask = void 0;
18
+ __exportStar(require("./deprecated/adapter"), exports);
19
+ __exportStar(require("./deprecated/demo-extractor"), exports);
20
+ __exportStar(require("./deprecated/http/client"), exports);
21
+ __exportStar(require("./deprecated/uploader"), exports);
22
+ __exportStar(require("./http"), exports);
23
+ __exportStar(require("./types"), exports);
24
+ __exportStar(require("./common/install-initial-domain-mapping"), exports);
25
+ var process_task_1 = require("./multithreading/process-task");
26
+ Object.defineProperty(exports, "processTask", { enumerable: true, get: function () { return process_task_1.processTask; } });
27
+ var spawn_1 = require("./multithreading/spawn/spawn");
28
+ Object.defineProperty(exports, "spawn", { enumerable: true, get: function () { return spawn_1.spawn; } });
29
+ var worker_adapter_1 = require("./multithreading/worker-adapter/worker-adapter");
30
+ Object.defineProperty(exports, "WorkerAdapter", { enumerable: true, get: function () { return worker_adapter_1.WorkerAdapter; } });
31
+ __exportStar(require("./types/workers"), exports);
32
+ var logger_1 = require("./logger/logger");
33
+ Object.defineProperty(exports, "formatAxiosError", { enumerable: true, get: function () { return logger_1.formatAxiosError; } });
34
+ Object.defineProperty(exports, "serializeAxiosError", { enumerable: true, get: function () { return logger_1.serializeAxiosError; } });
@@ -0,0 +1,6 @@
1
+ import { InspectOptions } from 'node:util';
2
+ export declare const MAX_LOG_STRING_LENGTH = 10000;
3
+ export declare const MAX_LOG_DEPTH = 10;
4
+ export declare const MAX_LOG_ARRAY_LENGTH = 100;
5
+ export declare const INSPECT_OPTIONS: InspectOptions;
6
+ //# sourceMappingURL=logger.constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.constants.d.ts","sourceRoot":"","sources":["../../src/logger/logger.constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,eAAO,MAAM,eAAe,EAAE,cAM7B,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INSPECT_OPTIONS = exports.MAX_LOG_ARRAY_LENGTH = exports.MAX_LOG_DEPTH = exports.MAX_LOG_STRING_LENGTH = void 0;
4
+ exports.MAX_LOG_STRING_LENGTH = 10000;
5
+ exports.MAX_LOG_DEPTH = 10;
6
+ exports.MAX_LOG_ARRAY_LENGTH = 100;
7
+ exports.INSPECT_OPTIONS = {
8
+ compact: false,
9
+ breakLength: Infinity,
10
+ depth: exports.MAX_LOG_DEPTH,
11
+ maxArrayLength: exports.MAX_LOG_ARRAY_LENGTH,
12
+ maxStringLength: exports.MAX_LOG_STRING_LENGTH,
13
+ };