@devrev/airsync-sdk 2.0.0-beta.1 → 2.0.0-beta.3

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 (191) hide show
  1. package/README.md +0 -4
  2. package/dist/airsync-sdk.d.ts +2059 -0
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +2 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +8 -2
  6. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  7. package/dist/attachments-streaming/attachments-streaming-pool.js +27 -16
  8. package/dist/attachments-streaming/attachments-streaming-pool.test.js +246 -27
  9. package/dist/common/constants.d.ts +16 -5
  10. package/dist/common/constants.d.ts.map +1 -1
  11. package/dist/common/constants.js +20 -6
  12. package/dist/common/control-protocol.d.ts +2 -2
  13. package/dist/common/control-protocol.d.ts.map +1 -1
  14. package/dist/common/control-protocol.js +1 -5
  15. package/dist/common/helpers.d.ts +8 -0
  16. package/dist/common/helpers.d.ts.map +1 -1
  17. package/dist/common/helpers.js +15 -0
  18. package/dist/common/install-initial-domain-mapping.d.ts +2 -2
  19. package/dist/common/install-initial-domain-mapping.test.js +5 -2
  20. package/dist/common/test-utils.d.ts +19 -0
  21. package/dist/common/test-utils.d.ts.map +1 -0
  22. package/dist/common/test-utils.js +101 -0
  23. package/dist/common/time-value-resolver.d.ts +47 -0
  24. package/dist/common/time-value-resolver.d.ts.map +1 -0
  25. package/dist/common/time-value-resolver.js +141 -0
  26. package/dist/common/time-value-resolver.test.d.ts +2 -0
  27. package/dist/common/time-value-resolver.test.d.ts.map +1 -0
  28. package/dist/common/time-value-resolver.test.js +268 -0
  29. package/dist/http/axios-client-internal.d.ts.map +1 -1
  30. package/dist/http/axios-client-internal.js +7 -0
  31. package/dist/http/axios-client-internal.test.js +21 -0
  32. package/dist/http/axios-client.d.ts.map +1 -1
  33. package/dist/http/axios-client.js +6 -3
  34. package/dist/http/index.d.ts +0 -1
  35. package/dist/http/index.d.ts.map +1 -1
  36. package/dist/http/index.js +0 -1
  37. package/dist/index.d.ts +12 -10
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +18 -13
  40. package/dist/logger/logger.d.ts +1 -17
  41. package/dist/logger/logger.d.ts.map +1 -1
  42. package/dist/logger/logger.interfaces.d.ts +2 -2
  43. package/dist/logger/logger.js +35 -27
  44. package/dist/logger/logger.test.js +66 -19
  45. package/dist/mappers/mappers.interface.d.ts +5 -5
  46. package/dist/mappers/mappers.interface.js +3 -3
  47. package/dist/mappers/mappers.test.js +8 -10
  48. package/dist/mock-server/mock-server.d.ts +47 -0
  49. package/dist/mock-server/mock-server.d.ts.map +1 -0
  50. package/dist/mock-server/mock-server.interfaces.d.ts +73 -0
  51. package/dist/mock-server/mock-server.interfaces.d.ts.map +1 -0
  52. package/dist/mock-server/mock-server.interfaces.js +4 -0
  53. package/dist/mock-server/mock-server.js +278 -0
  54. package/dist/multithreading/adapters/base-adapter.d.ts +56 -0
  55. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  56. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts +2 -0
  57. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts.map +1 -0
  58. package/dist/multithreading/adapters/base-adapter.emit.test.js +403 -0
  59. package/dist/multithreading/adapters/base-adapter.js +105 -0
  60. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts +2 -0
  61. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts.map +1 -0
  62. package/dist/multithreading/{worker-adapter/worker-adapter.artifacts.test.js → adapters/extraction-adapter.artifacts.test.js} +53 -5
  63. package/dist/multithreading/adapters/extraction-adapter.d.ts +58 -0
  64. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  65. package/dist/multithreading/adapters/extraction-adapter.js +325 -0
  66. package/dist/multithreading/adapters/extraction-adapter.test.d.ts +2 -0
  67. package/dist/multithreading/adapters/extraction-adapter.test.d.ts.map +1 -0
  68. package/dist/multithreading/adapters/extraction-adapter.test.js +789 -0
  69. package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
  70. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  71. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
  72. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  73. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts +2 -0
  74. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts.map +1 -0
  75. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.test.js → adapters/loading-adapter.helpers.test.js} +26 -26
  76. package/dist/multithreading/adapters/loading-adapter.js +461 -0
  77. package/dist/multithreading/adapters/loading-adapter.test.d.ts +2 -0
  78. package/dist/multithreading/adapters/loading-adapter.test.d.ts.map +1 -0
  79. package/dist/multithreading/adapters/loading-adapter.test.js +589 -0
  80. package/dist/multithreading/adapters/serialization.test.d.ts +2 -0
  81. package/dist/multithreading/adapters/serialization.test.d.ts.map +1 -0
  82. package/dist/multithreading/adapters/serialization.test.js +71 -0
  83. package/dist/multithreading/create-worker.test.js +36 -17
  84. package/dist/multithreading/process-task.d.ts +16 -1
  85. package/dist/multithreading/process-task.d.ts.map +1 -1
  86. package/dist/multithreading/process-task.js +97 -82
  87. package/dist/multithreading/process-task.test.d.ts +2 -0
  88. package/dist/multithreading/process-task.test.d.ts.map +1 -0
  89. package/dist/multithreading/process-task.test.js +146 -0
  90. package/dist/multithreading/spawn/spawn.d.ts +3 -3
  91. package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
  92. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  93. package/dist/multithreading/spawn/spawn.helpers.js +6 -14
  94. package/dist/multithreading/spawn/spawn.helpers.test.js +8 -8
  95. package/dist/multithreading/spawn/spawn.js +20 -25
  96. package/dist/multithreading/spawn/spawn.test.d.ts +2 -0
  97. package/dist/multithreading/spawn/spawn.test.d.ts.map +1 -0
  98. package/dist/multithreading/spawn/spawn.test.js +232 -0
  99. package/dist/repo/repo.d.ts.map +1 -1
  100. package/dist/repo/repo.interfaces.d.ts +4 -2
  101. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  102. package/dist/repo/repo.js +4 -3
  103. package/dist/repo/repo.test.js +60 -7
  104. package/dist/state/base-state.d.ts +75 -0
  105. package/dist/state/base-state.d.ts.map +1 -0
  106. package/dist/state/base-state.js +261 -0
  107. package/dist/state/extraction-state.d.ts +29 -0
  108. package/dist/state/extraction-state.d.ts.map +1 -0
  109. package/dist/state/extraction-state.js +122 -0
  110. package/dist/state/loading-state.d.ts +19 -0
  111. package/dist/state/loading-state.d.ts.map +1 -0
  112. package/dist/state/loading-state.js +40 -0
  113. package/dist/state/state.extract-window.test.d.ts +2 -0
  114. package/dist/state/state.extract-window.test.d.ts.map +1 -0
  115. package/dist/state/state.extract-window.test.js +163 -0
  116. package/dist/state/state.interfaces.d.ts +44 -27
  117. package/dist/state/state.interfaces.d.ts.map +1 -1
  118. package/dist/state/state.interfaces.js +18 -5
  119. package/dist/state/state.pending-boundaries.test.d.ts +2 -0
  120. package/dist/state/state.pending-boundaries.test.d.ts.map +1 -0
  121. package/dist/state/state.pending-boundaries.test.js +189 -0
  122. package/dist/state/state.post-state.test.d.ts +2 -0
  123. package/dist/state/state.post-state.test.d.ts.map +1 -0
  124. package/dist/state/state.post-state.test.js +78 -0
  125. package/dist/state/state.test.js +135 -88
  126. package/dist/state/state.time-value-resolution.test.d.ts +2 -0
  127. package/dist/state/state.time-value-resolution.test.d.ts.map +1 -0
  128. package/dist/state/state.time-value-resolution.test.js +175 -0
  129. package/dist/tsdoc-metadata.json +11 -0
  130. package/dist/types/common.d.ts +0 -25
  131. package/dist/types/common.d.ts.map +1 -1
  132. package/dist/types/common.js +1 -11
  133. package/dist/types/external-domain-metadata.d.ts +20 -1
  134. package/dist/types/external-domain-metadata.d.ts.map +1 -1
  135. package/dist/types/extraction.d.ts +92 -221
  136. package/dist/types/extraction.d.ts.map +1 -1
  137. package/dist/types/extraction.js +56 -124
  138. package/dist/types/extraction.test.js +69 -43
  139. package/dist/types/index.d.ts +3 -3
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/dist/types/index.js +6 -3
  142. package/dist/types/loading.d.ts +4 -24
  143. package/dist/types/loading.d.ts.map +1 -1
  144. package/dist/types/loading.js +1 -22
  145. package/dist/types/workers.d.ts +47 -29
  146. package/dist/types/workers.d.ts.map +1 -1
  147. package/dist/types/workers.js +1 -0
  148. package/dist/uploader/uploader.d.ts +1 -0
  149. package/dist/uploader/uploader.d.ts.map +1 -1
  150. package/dist/uploader/uploader.helpers.test.js +0 -11
  151. package/dist/uploader/uploader.interfaces.d.ts +3 -3
  152. package/dist/uploader/uploader.js +53 -20
  153. package/dist/uploader/uploader.test.js +22 -10
  154. package/package.json +10 -13
  155. package/dist/common/event-type-translation.d.ts +0 -24
  156. package/dist/common/event-type-translation.d.ts.map +0 -1
  157. package/dist/common/event-type-translation.js +0 -117
  158. package/dist/deprecated/adapter/index.d.ts +0 -62
  159. package/dist/deprecated/adapter/index.d.ts.map +0 -1
  160. package/dist/deprecated/adapter/index.js +0 -151
  161. package/dist/deprecated/common/helpers.d.ts +0 -7
  162. package/dist/deprecated/common/helpers.d.ts.map +0 -1
  163. package/dist/deprecated/common/helpers.js +0 -47
  164. package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
  165. package/dist/deprecated/demo-extractor/index.d.ts +0 -18
  166. package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
  167. package/dist/deprecated/demo-extractor/index.js +0 -161
  168. package/dist/deprecated/http/client.d.ts +0 -22
  169. package/dist/deprecated/http/client.d.ts.map +0 -1
  170. package/dist/deprecated/http/client.js +0 -161
  171. package/dist/deprecated/uploader/index.d.ts +0 -35
  172. package/dist/deprecated/uploader/index.d.ts.map +0 -1
  173. package/dist/deprecated/uploader/index.js +0 -161
  174. package/dist/http/types.d.ts +0 -17
  175. package/dist/http/types.d.ts.map +0 -1
  176. package/dist/http/types.js +0 -2
  177. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  178. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  179. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
  180. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  181. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  182. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  183. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  184. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -745
  185. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
  186. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
  187. package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
  188. package/dist/state/state.d.ts +0 -30
  189. package/dist/state/state.d.ts.map +0 -1
  190. package/dist/state/state.js +0 -166
  191. /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
@@ -0,0 +1,461 @@
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.LoadingAdapter = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const logger_1 = require("../../logger/logger");
9
+ const logger_context_1 = require("../../logger/logger.context");
10
+ const mappers_1 = require("../../mappers/mappers");
11
+ const mappers_interface_1 = require("../../mappers/mappers.interface");
12
+ const extraction_1 = require("../../types/extraction");
13
+ const loading_1 = require("../../types/loading");
14
+ const base_adapter_1 = require("./base-adapter");
15
+ const loading_adapter_helpers_1 = require("./loading-adapter.helpers");
16
+ /**
17
+ * LoadingAdapter is the adapter passed to loading tasks. It exposes the loading
18
+ * surface (item/attachment loading, mappers, loader reports).
19
+ *
20
+ * @public
21
+ */
22
+ class LoadingAdapter extends base_adapter_1.BaseAdapter {
23
+ constructor(params) {
24
+ super(params);
25
+ this.loaderReports = [];
26
+ this._processedFiles = [];
27
+ this._mappers = new mappers_1.Mappers({
28
+ event: params.event,
29
+ options: params.options,
30
+ });
31
+ }
32
+ get reports() {
33
+ return this.loaderReports;
34
+ }
35
+ get processedFiles() {
36
+ return this._processedFiles;
37
+ }
38
+ get mappers() {
39
+ return this._mappers;
40
+ }
41
+ async beforeEmit() {
42
+ // Loading has no pre-emit work (no repos, no extraction boundaries).
43
+ }
44
+ buildEmitPayload(newEventType) {
45
+ const isLoaderEvent = Object.values(loading_1.LoaderEventType).includes(newEventType);
46
+ return isLoaderEvent
47
+ ? {
48
+ reports: this.reports,
49
+ processed_files: this.processedFiles,
50
+ }
51
+ : {};
52
+ }
53
+ afterEmit() {
54
+ // Loading keeps its accumulated reports/processed files across emits.
55
+ }
56
+ async loadItemTypes({ itemTypesToLoad, }) {
57
+ return (0, logger_context_1.runWithSdkLogContext)(async () => {
58
+ var _a;
59
+ if (this.event.payload.event_type === extraction_1.EventType.StartLoadingData) {
60
+ const itemTypes = itemTypesToLoad.map((itemTypeToLoad) => itemTypeToLoad.itemType);
61
+ if (!itemTypes.length) {
62
+ console.warn('No item types to load, returning.');
63
+ return {
64
+ reports: this.reports,
65
+ processed_files: this.processedFiles,
66
+ };
67
+ }
68
+ const filesToLoad = await this.getLoaderBatches({
69
+ supportedItemTypes: itemTypes,
70
+ });
71
+ this.adapterState.sdkState.fromDevRev = {
72
+ filesToLoad,
73
+ };
74
+ }
75
+ if (!this.adapterState.sdkState.fromDevRev ||
76
+ !this.adapterState.sdkState.fromDevRev.filesToLoad.length) {
77
+ console.warn('No files to load, returning.');
78
+ return {
79
+ reports: this.reports,
80
+ processed_files: this.processedFiles,
81
+ };
82
+ }
83
+ console.log('Files to load in state', (_a = this.adapterState.sdkState.fromDevRev) === null || _a === void 0 ? void 0 : _a.filesToLoad);
84
+ try {
85
+ outerloop: for (const fileToLoad of this.adapterState.sdkState
86
+ .fromDevRev.filesToLoad) {
87
+ const itemTypeToLoad = itemTypesToLoad.find((itemTypeToLoad) => itemTypeToLoad.itemType === fileToLoad.itemType);
88
+ if (!itemTypeToLoad) {
89
+ console.error(`Item type to load not found for item type: ${fileToLoad.itemType}.`);
90
+ await this.emit(loading_1.LoaderEventType.DataLoadingError, {
91
+ error: {
92
+ message: `Item type to load not found for item type: ${fileToLoad.itemType}.`,
93
+ },
94
+ });
95
+ break;
96
+ }
97
+ if (!fileToLoad.completed) {
98
+ const { response, error: transformerFileError } = await this.uploader.getJsonObjectByArtifactId({
99
+ artifactId: fileToLoad.id,
100
+ isGzipped: true,
101
+ });
102
+ if (transformerFileError) {
103
+ console.error(`Transformer file not found for artifact ID: ${fileToLoad.id}.`);
104
+ await this.emit(loading_1.LoaderEventType.DataLoadingError, {
105
+ error: {
106
+ message: `Transformer file not found for artifact ID: ${fileToLoad.id}.`,
107
+ },
108
+ });
109
+ break outerloop;
110
+ }
111
+ const transformerFile = response;
112
+ for (let i = fileToLoad.lineToProcess; i < fileToLoad.count; i++) {
113
+ if (this.isTimeout) {
114
+ console.log('Timeout detected during data loading. Emitting progress to allow continuation.');
115
+ await this.emit(loading_1.LoaderEventType.DataLoadingProgress);
116
+ process.exit(0);
117
+ }
118
+ const { report, rateLimit } = await this.loadItem({
119
+ item: transformerFile[i],
120
+ itemTypeToLoad,
121
+ });
122
+ if (rateLimit === null || rateLimit === void 0 ? void 0 : rateLimit.delay) {
123
+ await this.emit(loading_1.LoaderEventType.DataLoadingDelayed, {
124
+ delay: rateLimit.delay,
125
+ reports: this.reports,
126
+ processed_files: this.processedFiles,
127
+ });
128
+ break outerloop;
129
+ }
130
+ if (report) {
131
+ (0, loading_adapter_helpers_1.addReportToLoaderReport)({
132
+ loaderReports: this.loaderReports,
133
+ report,
134
+ });
135
+ fileToLoad.lineToProcess = fileToLoad.lineToProcess + 1;
136
+ }
137
+ }
138
+ fileToLoad.completed = true;
139
+ this._processedFiles.push(fileToLoad.id);
140
+ }
141
+ }
142
+ }
143
+ catch (error) {
144
+ console.error('Error during data loading.', (0, logger_1.serializeError)(error));
145
+ await this.emit(loading_1.LoaderEventType.DataLoadingError, {
146
+ error: {
147
+ message: `Error during data loading. ${(0, logger_1.serializeError)(error)}`,
148
+ },
149
+ });
150
+ process.exit(1);
151
+ }
152
+ return {
153
+ reports: this.reports,
154
+ processed_files: this.processedFiles,
155
+ };
156
+ });
157
+ }
158
+ async getLoaderBatches({ supportedItemTypes, }) {
159
+ return (0, logger_context_1.runWithSdkLogContext)(async () => {
160
+ var _a;
161
+ const statsFileArtifactId = (_a = this.event.payload.event_data) === null || _a === void 0 ? void 0 : _a.stats_file;
162
+ if (statsFileArtifactId) {
163
+ const { response, error: statsFileError } = await this.uploader.getJsonObjectByArtifactId({
164
+ artifactId: statsFileArtifactId,
165
+ });
166
+ const statsFile = response;
167
+ if (statsFileError || statsFile.length === 0) {
168
+ return [];
169
+ }
170
+ const filesToLoad = (0, loading_adapter_helpers_1.getFilesToLoad)({
171
+ supportedItemTypes,
172
+ statsFile,
173
+ });
174
+ return filesToLoad;
175
+ }
176
+ return [];
177
+ });
178
+ }
179
+ async loadAttachments({ create, }) {
180
+ return (0, logger_context_1.runWithSdkLogContext)(async () => {
181
+ var _a, _b;
182
+ if (this.event.payload.event_type === extraction_1.EventType.StartLoadingAttachments) {
183
+ this.adapterState.sdkState.fromDevRev = {
184
+ filesToLoad: await this.getLoaderBatches({
185
+ supportedItemTypes: ['attachment'],
186
+ }),
187
+ };
188
+ }
189
+ if (!this.adapterState.sdkState.fromDevRev ||
190
+ ((_a = this.adapterState.sdkState.fromDevRev) === null || _a === void 0 ? void 0 : _a.filesToLoad.length) === 0) {
191
+ console.log('No files to load, returning.');
192
+ return {
193
+ reports: this.reports,
194
+ processed_files: this.processedFiles,
195
+ };
196
+ }
197
+ const filesToLoad = (_b = this.adapterState.sdkState.fromDevRev) === null || _b === void 0 ? void 0 : _b.filesToLoad;
198
+ try {
199
+ outerloop: for (const fileToLoad of filesToLoad) {
200
+ if (!fileToLoad.completed) {
201
+ const { response, error: transformerFileError } = await this.uploader.getJsonObjectByArtifactId({
202
+ artifactId: fileToLoad.id,
203
+ isGzipped: true,
204
+ });
205
+ const transformerFile = response;
206
+ if (transformerFileError) {
207
+ console.error(`Transformer file not found for artifact ID: ${fileToLoad.id}.`);
208
+ await this.emit(loading_1.LoaderEventType.AttachmentLoadingError, {
209
+ error: {
210
+ message: `Transformer file not found for artifact ID: ${fileToLoad.id}.`,
211
+ },
212
+ });
213
+ break outerloop;
214
+ }
215
+ for (let i = fileToLoad.lineToProcess; i < fileToLoad.count; i++) {
216
+ if (this.isTimeout) {
217
+ console.log('Timeout detected during attachment loading. Emitting progress to allow continuation.');
218
+ await this.emit(loading_1.LoaderEventType.AttachmentLoadingProgress);
219
+ process.exit(0);
220
+ }
221
+ const { report, rateLimit } = await this.loadAttachment({
222
+ item: transformerFile[i],
223
+ create,
224
+ });
225
+ if (rateLimit === null || rateLimit === void 0 ? void 0 : rateLimit.delay) {
226
+ await this.emit(loading_1.LoaderEventType.AttachmentLoadingDelayed, {
227
+ delay: rateLimit.delay,
228
+ reports: this.reports,
229
+ processed_files: this.processedFiles,
230
+ });
231
+ break outerloop;
232
+ }
233
+ if (report) {
234
+ (0, loading_adapter_helpers_1.addReportToLoaderReport)({
235
+ loaderReports: this.loaderReports,
236
+ report,
237
+ });
238
+ fileToLoad.lineToProcess = fileToLoad.lineToProcess + 1;
239
+ }
240
+ }
241
+ fileToLoad.completed = true;
242
+ this._processedFiles.push(fileToLoad.id);
243
+ }
244
+ }
245
+ }
246
+ catch (error) {
247
+ console.error('Error during attachment loading.', (0, logger_1.serializeError)(error));
248
+ await this.emit(loading_1.LoaderEventType.AttachmentLoadingError, {
249
+ error: {
250
+ message: `Error during attachment loading. ${(0, logger_1.serializeError)(error)}`,
251
+ },
252
+ });
253
+ process.exit(1);
254
+ }
255
+ return {
256
+ reports: this.reports,
257
+ processed_files: this.processedFiles,
258
+ };
259
+ });
260
+ }
261
+ async loadItem({ item, itemTypeToLoad, }) {
262
+ return (0, logger_context_1.runWithSdkLogContext)(async () => {
263
+ var _a;
264
+ const devrevId = item.id.devrev;
265
+ try {
266
+ const syncMapperRecordResponse = await this._mappers.getByTargetId({
267
+ sync_unit: this.event.payload.event_context.sync_unit,
268
+ target: devrevId,
269
+ });
270
+ const syncMapperRecord = syncMapperRecordResponse.data;
271
+ if (!syncMapperRecord) {
272
+ console.warn('Failed to get sync mapper record from response.');
273
+ return {
274
+ error: {
275
+ message: 'Failed to get sync mapper record from response.',
276
+ },
277
+ };
278
+ }
279
+ // Update item in external system
280
+ const { id, modifiedDate, delay, error } = await (0, logger_context_1.runWithUserLogContext)(async () => {
281
+ return await itemTypeToLoad.update({
282
+ item,
283
+ mappers: this._mappers,
284
+ event: this.event,
285
+ });
286
+ });
287
+ if (id) {
288
+ try {
289
+ const syncMapperRecordUpdateResponse = await this._mappers.update(Object.assign(Object.assign({ id: syncMapperRecord.sync_mapper_record.id, sync_unit: this.event.payload.event_context.sync_unit, status: mappers_interface_1.SyncMapperRecordStatus.OPERATIONAL }, (modifiedDate && {
290
+ external_versions: {
291
+ add: [
292
+ {
293
+ modified_date: modifiedDate,
294
+ recipe_version: 0,
295
+ },
296
+ ],
297
+ },
298
+ })), { external_ids: {
299
+ add: [id],
300
+ }, targets: {
301
+ add: [devrevId],
302
+ } }));
303
+ console.log('Successfully updated sync mapper record.', syncMapperRecordUpdateResponse.data);
304
+ }
305
+ catch (error) {
306
+ console.warn('Failed to update sync mapper record.', (0, logger_1.serializeError)(error));
307
+ return {
308
+ error: {
309
+ message: 'Failed to update sync mapper record' + (0, logger_1.serializeError)(error),
310
+ },
311
+ };
312
+ }
313
+ return {
314
+ report: {
315
+ item_type: itemTypeToLoad.itemType,
316
+ [loading_1.ActionType.UPDATED]: 1,
317
+ },
318
+ };
319
+ }
320
+ else if (delay) {
321
+ console.log(`Rate limited while updating item in external system, delaying for ${delay} seconds.`);
322
+ return {
323
+ rateLimit: {
324
+ delay,
325
+ },
326
+ };
327
+ }
328
+ else {
329
+ console.warn('Failed to update item in external system', error);
330
+ return {
331
+ report: {
332
+ item_type: itemTypeToLoad.itemType,
333
+ [loading_1.ActionType.FAILED]: 1,
334
+ },
335
+ };
336
+ }
337
+ // TODO: Update mapper (optional)
338
+ }
339
+ catch (error) {
340
+ if (axios_1.default.isAxiosError(error)) {
341
+ if (((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
342
+ // Create item in external system if mapper record not found
343
+ const { id, modifiedDate, delay, error } = await (0, logger_context_1.runWithUserLogContext)(async () => {
344
+ return await itemTypeToLoad.create({
345
+ item,
346
+ mappers: this._mappers,
347
+ event: this.event,
348
+ });
349
+ });
350
+ if (id) {
351
+ // Create mapper
352
+ try {
353
+ const syncMapperRecordCreateResponse = await this._mappers.create(Object.assign({ sync_unit: this.event.payload.event_context.sync_unit, status: mappers_interface_1.SyncMapperRecordStatus.OPERATIONAL, external_ids: [id], targets: [devrevId] }, (modifiedDate && {
354
+ external_versions: [
355
+ {
356
+ modified_date: modifiedDate,
357
+ recipe_version: 0,
358
+ },
359
+ ],
360
+ })));
361
+ console.log('Successfully created sync mapper record.', syncMapperRecordCreateResponse.data);
362
+ return {
363
+ report: {
364
+ item_type: itemTypeToLoad.itemType,
365
+ [loading_1.ActionType.CREATED]: 1,
366
+ },
367
+ };
368
+ }
369
+ catch (error) {
370
+ console.warn('Failed to create sync mapper record.', (0, logger_1.serializeError)(error));
371
+ return {
372
+ error: {
373
+ message: 'Failed to create sync mapper record. ' +
374
+ (0, logger_1.serializeError)(error),
375
+ },
376
+ };
377
+ }
378
+ }
379
+ else if (delay) {
380
+ return {
381
+ rateLimit: {
382
+ delay,
383
+ },
384
+ };
385
+ }
386
+ else {
387
+ console.warn('Failed to create item in external system.', (0, logger_1.serializeError)(error));
388
+ return {
389
+ report: {
390
+ item_type: itemTypeToLoad.itemType,
391
+ [loading_1.ActionType.FAILED]: 1,
392
+ },
393
+ };
394
+ }
395
+ }
396
+ else {
397
+ console.warn('Failed to get sync mapper record.', (0, logger_1.serializeError)(error));
398
+ return {
399
+ error: {
400
+ message: error.message,
401
+ },
402
+ };
403
+ }
404
+ }
405
+ console.warn('Failed to get sync mapper record.', (0, logger_1.serializeError)(error));
406
+ return {
407
+ error: {
408
+ message: 'Failed to get sync mapper record. ' + (0, logger_1.serializeError)(error),
409
+ },
410
+ };
411
+ }
412
+ });
413
+ }
414
+ async loadAttachment({ item, create, }) {
415
+ return (0, logger_context_1.runWithSdkLogContext)(async () => {
416
+ // Create item
417
+ const { id, delay, error } = await (0, logger_context_1.runWithUserLogContext)(async () => create({
418
+ item,
419
+ mappers: this._mappers,
420
+ event: this.event,
421
+ }));
422
+ if (delay) {
423
+ return {
424
+ rateLimit: {
425
+ delay,
426
+ },
427
+ };
428
+ }
429
+ else if (id) {
430
+ try {
431
+ const syncMapperRecordCreateResponse = await this._mappers.create({
432
+ sync_unit: this.event.payload.event_context.sync_unit,
433
+ external_ids: [id],
434
+ targets: [item.reference_id],
435
+ status: mappers_interface_1.SyncMapperRecordStatus.OPERATIONAL,
436
+ });
437
+ console.log('Successfully created sync mapper record.', syncMapperRecordCreateResponse.data);
438
+ }
439
+ catch (error) {
440
+ console.warn('Failed to create sync mapper record.', (0, logger_1.serializeError)(error));
441
+ }
442
+ return {
443
+ report: {
444
+ item_type: 'attachment',
445
+ [loading_1.ActionType.CREATED]: 1,
446
+ },
447
+ };
448
+ }
449
+ else {
450
+ console.warn('Failed to create attachment in external system', error);
451
+ return {
452
+ report: {
453
+ item_type: 'attachment',
454
+ [loading_1.ActionType.FAILED]: 1,
455
+ },
456
+ };
457
+ }
458
+ });
459
+ }
460
+ }
461
+ exports.LoadingAdapter = LoadingAdapter;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=loading-adapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loading-adapter.test.d.ts","sourceRoot":"","sources":["../../../src/multithreading/adapters/loading-adapter.test.ts"],"names":[],"mappings":""}