@devrev/ts-adaas 1.19.9-beta.0 → 1.19.9

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 (50) hide show
  1. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  2. package/dist/attachments-streaming/attachments-streaming-pool.js +6 -4
  3. package/dist/attachments-streaming/attachments-streaming-pool.test.js +65 -0
  4. package/dist/common/control-protocol.d.ts +2 -3
  5. package/dist/common/control-protocol.d.ts.map +1 -1
  6. package/dist/common/control-protocol.js +4 -2
  7. package/dist/http/axios-client-internal.d.ts.map +1 -1
  8. package/dist/http/axios-client-internal.js +1 -19
  9. package/dist/mock-server/mock-server.d.ts +0 -4
  10. package/dist/mock-server/mock-server.d.ts.map +1 -1
  11. package/dist/mock-server/mock-server.interfaces.d.ts +4 -9
  12. package/dist/mock-server/mock-server.interfaces.d.ts.map +1 -1
  13. package/dist/mock-server/mock-server.js +18 -30
  14. package/dist/multithreading/spawn/spawn.d.ts +1 -1
  15. package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
  16. package/dist/multithreading/spawn/spawn.js +6 -11
  17. package/dist/multithreading/spawn/spawn.test.js +0 -1
  18. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +1 -1
  19. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +5 -11
  20. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -1
  21. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.js +9 -90
  22. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.js +1 -1
  23. package/dist/multithreading/worker-adapter/worker-adapter.js +64 -93
  24. package/dist/repo/repo.d.ts +2 -11
  25. package/dist/repo/repo.d.ts.map +1 -1
  26. package/dist/repo/repo.interfaces.d.ts +0 -2
  27. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  28. package/dist/repo/repo.js +11 -37
  29. package/dist/repo/repo.test.js +0 -184
  30. package/dist/types/extraction.d.ts +1 -8
  31. package/dist/types/extraction.d.ts.map +1 -1
  32. package/dist/types/workers.d.ts +0 -4
  33. package/dist/types/workers.d.ts.map +1 -1
  34. package/dist/uploader/uploader.d.ts.map +1 -1
  35. package/dist/uploader/uploader.helpers.d.ts +1 -6
  36. package/dist/uploader/uploader.helpers.d.ts.map +1 -1
  37. package/dist/uploader/uploader.helpers.js +0 -65
  38. package/dist/uploader/uploader.helpers.test.js +7 -148
  39. package/dist/uploader/uploader.interfaces.d.ts +0 -11
  40. package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
  41. package/dist/uploader/uploader.interfaces.js +0 -11
  42. package/dist/uploader/uploader.js +5 -2
  43. package/dist/uploader/uploader.test.js +3 -54
  44. package/package.json +2 -2
  45. package/dist/common/control-protocol.test.d.ts +0 -2
  46. package/dist/common/control-protocol.test.d.ts.map +0 -1
  47. package/dist/common/control-protocol.test.js +0 -126
  48. package/dist/multithreading/worker-adapter/worker-adapter.upload-failure.test.d.ts +0 -2
  49. package/dist/multithreading/worker-adapter/worker-adapter.upload-failure.test.d.ts.map +0 -1
  50. package/dist/multithreading/worker-adapter/worker-adapter.upload-failure.test.js +0 -135
@@ -1 +1 @@
1
- {"version":3,"file":"attachments-streaming-pool.d.ts","sourceRoot":"","sources":["../../src/attachments-streaming/attachments-streaming-pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,qBAAa,wBAAwB,CAAC,cAAc;IAClD,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAA4C;IAE1D,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAM;gBAEnC,EACV,OAAO,EACP,WAAW,EACX,SAAc,EACd,MAAM,GACP,EAAE,8BAA8B,CAAC,cAAc,CAAC;YAQnC,cAAc;IAS5B;;;;;OAKG;IAEH,OAAO,CAAC,2BAA2B;IAsB7B,SAAS,IAAI,OAAO,CAAC,2BAA2B,CAAC;IA8CjD,kBAAkB;CA0FzB"}
1
+ {"version":3,"file":"attachments-streaming-pool.d.ts","sourceRoot":"","sources":["../../src/attachments-streaming/attachments-streaming-pool.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,2BAA2B,EAC5B,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AAEzF,qBAAa,wBAAwB,CAAC,cAAc;IAClD,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,KAAK,CAAqB;IAClC,OAAO,CAAC,MAAM,CAA4C;IAE1D,OAAO,CAAC,mBAAmB,CAAa;IACxC,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAM;gBAEnC,EACV,OAAO,EACP,WAAW,EACX,SAAc,EACd,MAAM,GACP,EAAE,8BAA8B,CAAC,cAAc,CAAC;YAQnC,cAAc;IAS5B;;;;;OAKG;IAEH,OAAO,CAAC,2BAA2B;IAsB7B,SAAS,IAAI,OAAO,CAAC,2BAA2B,CAAC;IAgDjD,kBAAkB;CA0FzB"}
@@ -69,8 +69,10 @@ class AttachmentsStreamingPool {
69
69
  for (let i = 0; i < initialBatchSize; i++) {
70
70
  initialPromises.push(this.startPoolStreaming());
71
71
  }
72
- // Wait for all promises to complete
73
- await Promise.all(initialPromises);
72
+ await Promise.race([
73
+ Promise.all(initialPromises),
74
+ this.adapter.timeoutSignal,
75
+ ]);
74
76
  if (this.delay) {
75
77
  return { delay: this.delay };
76
78
  }
@@ -117,8 +119,8 @@ class AttachmentsStreamingPool {
117
119
  await this.updateProgress();
118
120
  continue;
119
121
  }
120
- // No rate limiting, process normally
121
- if ((_c = (_b = this.adapter.state.toDevRev) === null || _b === void 0 ? void 0 : _b.attachmentsMetadata) === null || _c === void 0 ? void 0 : _c.lastProcessedAttachmentsIdsList) {
122
+ if (!this.adapter.isTimeout &&
123
+ ((_c = (_b = this.adapter.state.toDevRev) === null || _b === void 0 ? void 0 : _b.attachmentsMetadata) === null || _c === void 0 ? void 0 : _c.lastProcessedAttachmentsIdsList)) {
122
124
  (_d = this.adapter.state.toDevRev) === null || _d === void 0 ? void 0 : _d.attachmentsMetadata.lastProcessedAttachmentsIdsList.push({ id: attachment.id, parent_id: attachment.parent_id });
123
125
  }
124
126
  await this.updateProgress();
@@ -17,6 +17,10 @@ describe(attachments_streaming_pool_1.AttachmentsStreamingPool.name, () => {
17
17
  },
18
18
  },
19
19
  },
20
+ isTimeout: false,
21
+ // Never resolves: streamAll's race is decided by the workers completing,
22
+ // unless a test overrides this / flips isTimeout.
23
+ timeoutSignal: new Promise(() => { }),
20
24
  processAttachment: jest
21
25
  .fn()
22
26
  .mockResolvedValue({}),
@@ -513,4 +517,65 @@ describe(attachments_streaming_pool_1.AttachmentsStreamingPool.name, () => {
513
517
  expect(mockStreamFn).toHaveBeenCalled();
514
518
  });
515
519
  });
520
+ describe('soft timeout handling', () => {
521
+ it('should resolve streamAll when the timeout signal fires even if a worker is stuck in flight', async () => {
522
+ // A worker stuck in a never-resolving request: only the timeout race can
523
+ // unblock streamAll.
524
+ mockAdapter.processAttachment.mockImplementation(async () => new Promise(() => { }));
525
+ let fireTimeout;
526
+ mockAdapter.timeoutSignal = new Promise((resolve) => {
527
+ fireTimeout = resolve;
528
+ });
529
+ const pool = new attachments_streaming_pool_1.AttachmentsStreamingPool({
530
+ adapter: mockAdapter,
531
+ attachments: mockAttachments,
532
+ batchSize: 10,
533
+ stream: mockStream,
534
+ });
535
+ const streamAllPromise = pool.streamAll();
536
+ mockAdapter.isTimeout = true;
537
+ fireTimeout();
538
+ const result = await streamAllPromise;
539
+ expect(result).toEqual({});
540
+ });
541
+ it('should not record an attachment as processed when a timeout fires while it is in flight', async () => {
542
+ mockAdapter.processAttachment.mockImplementation(async () => {
543
+ await Promise.resolve();
544
+ mockAdapter.isTimeout = true;
545
+ return {};
546
+ });
547
+ const pool = new attachments_streaming_pool_1.AttachmentsStreamingPool({
548
+ adapter: mockAdapter,
549
+ attachments: mockAttachments,
550
+ batchSize: 1,
551
+ stream: mockStream,
552
+ });
553
+ await pool.streamAll();
554
+ expect(mockAdapter.state.toDevRev.attachmentsMetadata
555
+ .lastProcessedAttachmentsIdsList).toEqual([]);
556
+ expect(mockAdapter.processAttachment).toHaveBeenCalledTimes(1);
557
+ });
558
+ it('should record attachments completed before the timeout and stop after', async () => {
559
+ let calls = 0;
560
+ mockAdapter.processAttachment.mockImplementation(async () => {
561
+ await Promise.resolve();
562
+ calls++;
563
+ if (calls === 2) {
564
+ mockAdapter.isTimeout = true;
565
+ }
566
+ return {};
567
+ });
568
+ const pool = new attachments_streaming_pool_1.AttachmentsStreamingPool({
569
+ adapter: mockAdapter,
570
+ attachments: mockAttachments,
571
+ batchSize: 1,
572
+ stream: mockStream,
573
+ });
574
+ await pool.streamAll();
575
+ expect(mockAdapter.state.toDevRev.attachmentsMetadata
576
+ .lastProcessedAttachmentsIdsList).toEqual([{ id: 'attachment-1', parent_id: 'parent-1' }]);
577
+ // 2nd was started then abandoned; 3rd never started.
578
+ expect(mockAdapter.processAttachment).toHaveBeenCalledTimes(2);
579
+ });
580
+ });
516
581
  });
@@ -1,11 +1,10 @@
1
1
  import { AxiosResponse } from 'axios';
2
- import { AirdropEvent, EventData, ExtractorEventType, WorkerMetadata } from '../types/extraction';
2
+ import { AirdropEvent, EventData, ExtractorEventType } from '../types/extraction';
3
3
  import { LoaderEventType } from '../types/loading';
4
4
  export interface EmitInterface {
5
5
  event: AirdropEvent;
6
6
  eventType: ExtractorEventType | LoaderEventType;
7
7
  data?: EventData;
8
- worker_metadata?: WorkerMetadata;
9
8
  }
10
- export declare const emit: ({ event, eventType, data, worker_metadata, }: EmitInterface) => Promise<AxiosResponse>;
9
+ export declare const emit: ({ event, eventType, data, }: EmitInterface) => Promise<AxiosResponse>;
11
10
  //# sourceMappingURL=control-protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"control-protocol.d.ts","sourceRoot":"","sources":["../../src/common/control-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,SAAS,EAET,kBAAkB,EAElB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAChD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC;AAED,eAAO,MAAM,IAAI,GAAU,8CAKxB,aAAa,KAAG,OAAO,CAAC,aAAa,CAmCvC,CAAC"}
1
+ {"version":3,"file":"control-protocol.d.ts","sourceRoot":"","sources":["../../src/common/control-protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EACL,YAAY,EACZ,SAAS,EAET,kBAAkB,EAEnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAInD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAChD,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB;AAED,eAAO,MAAM,IAAI,GAAU,6BAIxB,aAAa,KAAG,OAAO,CAAC,aAAa,CAgCvC,CAAC"}
@@ -4,7 +4,7 @@ exports.emit = void 0;
4
4
  const axios_client_internal_1 = require("../http/axios-client-internal");
5
5
  const constants_1 = require("./constants");
6
6
  const event_type_translation_1 = require("./event-type-translation");
7
- const emit = async ({ event, eventType, data, worker_metadata, }) => {
7
+ const emit = async ({ event, eventType, data, }) => {
8
8
  // Translate outgoing event type to ensure we always send new event types
9
9
  // TODO: Remove when the old types are completely phased out
10
10
  const translatedEventType = (0, event_type_translation_1.translateOutgoingEventType)(eventType);
@@ -12,7 +12,9 @@ const emit = async ({ event, eventType, data, worker_metadata, }) => {
12
12
  event_type: translatedEventType,
13
13
  event_context: event.payload.event_context,
14
14
  event_data: Object.assign({}, data),
15
- worker_metadata: Object.assign(Object.assign({}, worker_metadata), { newest_state_date: event.payload.event_context.extract_to, oldest_state_date: event.payload.event_context.extract_from, adaas_library_version: constants_1.LIBRARY_VERSION }),
15
+ worker_metadata: {
16
+ adaas_library_version: constants_1.LIBRARY_VERSION,
17
+ },
16
18
  };
17
19
  console.info('Emitting event', newEvent);
18
20
  return axios_client_internal_1.axiosClient.post(event.payload.event_context.callback_url, Object.assign({}, newEvent), {
@@ -1 +1 @@
1
- {"version":3,"file":"axios-client-internal.d.ts","sourceRoot":"","sources":["../../src/http/axios-client-internal.ts"],"names":[],"mappings":"AAwBA,QAAA,MAAM,WAAW,+BAEf,CAAC;AAyFH,OAAO,EAAE,WAAW,EAAE,CAAC"}
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;AAyFH,OAAO,EAAE,WAAW,EAAE,CAAC"}
@@ -6,30 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.axiosClient = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
8
  const axios_retry_1 = __importDefault(require("axios-retry"));
9
- const node_worker_threads_1 = require("node:worker_threads");
10
- /** Production default; tests may lower via workerData.options.httpRetries or ADAAS_TEST_HTTP_RETRIES. */
11
- function getHttpRetryCount() {
12
- var _a;
13
- if (!node_worker_threads_1.isMainThread &&
14
- ((_a = node_worker_threads_1.workerData === null || node_worker_threads_1.workerData === void 0 ? void 0 : node_worker_threads_1.workerData.options) === null || _a === void 0 ? void 0 : _a.httpRetries) !== undefined &&
15
- node_worker_threads_1.workerData.options.httpRetries >= 0) {
16
- return node_worker_threads_1.workerData.options.httpRetries;
17
- }
18
- const fromEnv = process.env.ADAAS_TEST_HTTP_RETRIES;
19
- if (fromEnv !== undefined) {
20
- const parsed = parseInt(fromEnv, 10);
21
- if (!isNaN(parsed) && parsed >= 0) {
22
- return parsed;
23
- }
24
- }
25
- return 5;
26
- }
27
9
  const axiosClient = axios_1.default.create({
28
10
  timeout: 30 * 1000,
29
11
  });
30
12
  exports.axiosClient = axiosClient;
31
13
  (0, axios_retry_1.default)(axiosClient, {
32
- retries: getHttpRetryCount(),
14
+ retries: 5,
33
15
  shouldResetTimeout: true,
34
16
  retryDelay: (retryCount, error) => {
35
17
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
@@ -31,10 +31,6 @@ export declare class MockServer {
31
31
  * Also clears request tracking data.
32
32
  */
33
33
  resetRoutes(): void;
34
- /**
35
- * Returns all POST requests to the platform callback URL.
36
- */
37
- getCallbackRequests(): RequestInfo[];
38
34
  /**
39
35
  * Returns the most recent request or undefined if no requests exist.
40
36
  */
@@ -1 +1 @@
1
- {"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/mock-server/mock-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,WAAW,EACX,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAuElC;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAA4B;gBAErC,IAAI,GAAE,MAAiC;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBpB,aAAa;IA+B3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,WAAW;IAInB;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IAwF1C;;;OAGG;IACI,WAAW,IAAI,IAAI;IAM1B;;OAEG;IACI,mBAAmB,IAAI,WAAW,EAAE;IAO3C;;OAEG;IACI,cAAc,IAAI,WAAW,GAAG,SAAS;IAOhD;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5D;;OAEG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;CAQhE"}
1
+ {"version":3,"file":"mock-server.d.ts","sourceRoot":"","sources":["../../src/mock-server/mock-server.ts"],"names":[],"mappings":"AAEA,OAAO,EAKL,WAAW,EACX,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AA4ElC;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,YAAY,CAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,aAAa,CAA4B;gBAErC,IAAI,GAAE,MAAiC;IAMtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAsBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAkBpB,aAAa;IA+B3B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,WAAW;IAInB;;OAEG;IACI,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IA8E1C;;;OAGG;IACI,WAAW,IAAI,IAAI;IAM1B;;OAEG;IACI,cAAc,IAAI,WAAW,GAAG,SAAS;IAOhD;;OAEG;IACI,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM;IAI5D;;OAEG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE;CAQhE"}
@@ -13,6 +13,8 @@ export interface MockResponse extends ServerResponse {
13
13
  status(code: number): MockResponse;
14
14
  /** Send a JSON response */
15
15
  json(data: unknown): void;
16
+ /** Send a raw binary (Buffer) response */
17
+ buffer(data: Buffer): void;
16
18
  /** Send an empty response */
17
19
  send(): void;
18
20
  }
@@ -43,19 +45,12 @@ export interface RouteConfig {
43
45
  status: number;
44
46
  /** Optional response body to send as JSON */
45
47
  body?: unknown;
48
+ /** Optional raw binary response body, e.g. gzipped JSONL (takes precedence over `body`) */
49
+ bodyBuffer?: Buffer;
46
50
  /** Optional headers to send with the response */
47
51
  headers?: Record<string, string>;
48
52
  /** Optional retry configuration for simulating failures before success */
49
53
  retry?: RetryConfig;
50
- /**
51
- * Respond successfully for the first N requests, then return an error.
52
- * Useful for partial-upload scenarios (first batch succeeds, second fails).
53
- */
54
- succeedThenFail?: {
55
- successCount: number;
56
- errorStatus?: number;
57
- errorBody?: unknown;
58
- };
59
54
  /** Optional delay in milliseconds before sending the response */
60
55
  delay?: number;
61
56
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mock-server.interfaces.d.ts","sourceRoot":"","sources":["../../src/mock-server/mock-server.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEvD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,yCAAyC;IACzC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC;IACnD,+BAA+B;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IACnC,2BAA2B;IAC3B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,6BAA6B;IAC7B,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"mock-server.interfaces.d.ts","sourceRoot":"","sources":["../../src/mock-server/mock-server.interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAEvD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAa,SAAQ,cAAc;IAClD,yCAAyC;IACzC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC;IACnD,+BAA+B;IAC/B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC;IACnC,2BAA2B;IAC3B,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IAC1B,0CAA0C;IAC1C,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,6BAA6B;IAC7B,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,qEAAqE;IACrE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC;IACb,6DAA6D;IAC7D,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,6CAA6C;IAC7C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,0EAA0E;IAC1E,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,YAAY,KAAK,OAAO,CAAC;AAE9E;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,GAAG,EAAE,MAAM,CAAC;IACZ,oDAAoD;IACpD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC"}
@@ -56,6 +56,10 @@ function wrapResponse(res) {
56
56
  res.writeHead(statusCode, { 'Content-Type': 'application/json' });
57
57
  res.end(JSON.stringify(data));
58
58
  };
59
+ mock.buffer = (data) => {
60
+ res.writeHead(statusCode, { 'Content-Type': 'application/octet-stream' });
61
+ res.end(data);
62
+ };
59
63
  mock.send = () => {
60
64
  res.writeHead(statusCode);
61
65
  res.end();
@@ -174,35 +178,19 @@ class MockServer {
174
178
  * Configures a route to return a specific status code and optional response body.
175
179
  */
176
180
  setRoute(config) {
177
- const { path, method, status, body, retry, succeedThenFail, headers, delay } = config;
181
+ const { path, method, status, body, bodyBuffer, retry, headers, delay } = config;
178
182
  const key = this.getRouteKey(method, path);
179
- if (retry || succeedThenFail) {
183
+ if (retry) {
180
184
  this.requestCounts.set(key, 0);
181
185
  }
182
186
  this.routeHandlers.set(key, (req, res) => {
183
187
  const sendResponse = (responseDelay) => {
184
188
  const send = () => {
185
- var _a, _b, _c;
186
- if (succeedThenFail) {
187
- const currentCount = this.requestCounts.get(key) || 0;
188
- this.requestCounts.set(key, currentCount + 1);
189
- if (currentCount < succeedThenFail.successCount) {
190
- this.defaultRouteHandler(req, res);
191
- }
192
- else {
193
- const errorStatus = (_a = succeedThenFail.errorStatus) !== null && _a !== void 0 ? _a : 400;
194
- if (succeedThenFail.errorBody !== undefined) {
195
- res.status(errorStatus).json(succeedThenFail.errorBody);
196
- }
197
- else {
198
- res.status(errorStatus).send();
199
- }
200
- }
201
- }
202
- else if (retry) {
189
+ var _a, _b;
190
+ if (retry) {
203
191
  const currentCount = this.requestCounts.get(key) || 0;
204
- const failureCount = (_b = retry.failureCount) !== null && _b !== void 0 ? _b : 4;
205
- const errorStatus = (_c = retry.errorStatus) !== null && _c !== void 0 ? _c : 500;
192
+ const failureCount = (_a = retry.failureCount) !== null && _a !== void 0 ? _a : 4;
193
+ const errorStatus = (_b = retry.errorStatus) !== null && _b !== void 0 ? _b : 500;
206
194
  if (currentCount < failureCount) {
207
195
  this.requestCounts.set(key, currentCount + 1);
208
196
  const sendFailure = () => {
@@ -228,7 +216,10 @@ class MockServer {
228
216
  if (headers) {
229
217
  res.set(headers);
230
218
  }
231
- if (body !== undefined) {
219
+ if (bodyBuffer !== undefined) {
220
+ res.status(status).buffer(bodyBuffer);
221
+ }
222
+ else if (body !== undefined) {
232
223
  res.status(status).json(body);
233
224
  }
234
225
  else {
@@ -240,7 +231,10 @@ class MockServer {
240
231
  if (headers) {
241
232
  res.set(headers);
242
233
  }
243
- if (body !== undefined) {
234
+ if (bodyBuffer !== undefined) {
235
+ res.status(status).buffer(bodyBuffer);
236
+ }
237
+ else if (body !== undefined) {
244
238
  res.status(status).json(body);
245
239
  }
246
240
  else {
@@ -267,12 +261,6 @@ class MockServer {
267
261
  this.requestCounts.clear();
268
262
  this.requests = [];
269
263
  }
270
- /**
271
- * Returns all POST requests to the platform callback URL.
272
- */
273
- getCallbackRequests() {
274
- return this.requests.filter((req) => req.method.toUpperCase() === 'POST' && req.url.includes('callback_url'));
275
- }
276
264
  /**
277
265
  * Returns the most recent request or undefined if no requests exist.
278
266
  */
@@ -25,7 +25,7 @@ export declare class Spawn {
25
25
  private originalConsole;
26
26
  private logger;
27
27
  private workerFailedMessage;
28
- constructor({ event, worker, options, resolve, originalConsole, logger, }: SpawnInterface);
28
+ constructor({ event, worker, options, resolve, originalConsole, }: SpawnInterface);
29
29
  private clearTimeouts;
30
30
  private exitFromMainThread;
31
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.ts"],"names":[],"mappings":"AASA,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAGf,MAAM,qBAAqB,CAAC;AA+C7B;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,cAAc,EAAE,EAC1C,KAAK,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,cAAc,GACf,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FvD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,wBAAwB,CAA6C;IAC7E,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,mBAAmB,CAAqB;gBACpC,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,eAAe,EACf,MAAM,GACP,EAAE,cAAc;IAoHjB,OAAO,CAAC,aAAa;YAYP,kBAAkB;CAoCjC"}
1
+ {"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,qBAAqB,EACrB,cAAc,EAGf,MAAM,qBAAqB,CAAC;AA+C7B;;;;;;;;;;;GAWG;AACH,wBAAsB,KAAK,CAAC,cAAc,EAAE,EAC1C,KAAK,EACL,YAAY,EACZ,UAAU,EACV,oBAAoB,EACpB,OAAO,EACP,cAAc,GACf,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFvD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,wBAAwB,CAA6C;IAC7E,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,mBAAmB,CAAqB;gBACpC,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,eAAe,GAChB,EAAE,cAAc;IAiHjB,OAAO,CAAC,aAAa;YAYP,kBAAkB;CAoCjC"}
@@ -68,9 +68,8 @@ async function spawn({ event, initialState, workerPath, initialDomainMapping, op
68
68
  options = Object.assign(Object.assign({}, (options || {})), { isLocalDevelopment: true });
69
69
  }
70
70
  const originalConsole = console;
71
- const logger = new logger_1.Logger({ event, options });
72
71
  // eslint-disable-next-line no-global-assign
73
- console = logger;
72
+ console = new logger_1.Logger({ event, options });
74
73
  if (translatedEventType !== originalEventType) {
75
74
  console.log(`Event type translated from ${originalEventType} to ${translatedEventType}.`);
76
75
  }
@@ -111,7 +110,6 @@ async function spawn({ event, initialState, workerPath, initialDomainMapping, op
111
110
  options,
112
111
  resolve,
113
112
  originalConsole,
114
- logger,
115
113
  });
116
114
  });
117
115
  }
@@ -134,11 +132,10 @@ async function spawn({ event, initialState, workerPath, initialDomainMapping, op
134
132
  }
135
133
  }
136
134
  class Spawn {
137
- constructor({ event, worker, options, resolve, originalConsole, logger, }) {
135
+ constructor({ event, worker, options, resolve, originalConsole, }) {
138
136
  this.defaultLambdaTimeout = constants_1.DEFAULT_LAMBDA_TIMEOUT;
139
137
  this.originalConsole = originalConsole || console;
140
- this.logger =
141
- logger !== null && logger !== void 0 ? logger : console;
138
+ this.logger = console;
142
139
  this.alreadyEmitted = false;
143
140
  this.softTimeoutSent = false;
144
141
  this.event = event;
@@ -192,7 +189,7 @@ class Spawn {
192
189
  }
193
190
  });
194
191
  worker.on(workers_1.WorkerEvent.WorkerMessage, (message) => {
195
- var _a, _b, _c, _d, _e, _f;
192
+ var _a, _b, _c, _d, _e;
196
193
  // Since logs from the worker thread are handled differently in snap-in
197
194
  // platform, we need to catch the log messages from worker thread and log
198
195
  // them in main thread.
@@ -200,9 +197,7 @@ class Spawn {
200
197
  const stringifiedArgs = (_a = message.payload) === null || _a === void 0 ? void 0 : _a.stringifiedArgs;
201
198
  const level = (_b = message.payload) === null || _b === void 0 ? void 0 : _b.level;
202
199
  const isSdkLog = (_d = (_c = message.payload) === null || _c === void 0 ? void 0 : _c.isSdkLog) !== null && _d !== void 0 ? _d : true;
203
- if (typeof ((_e = this.logger) === null || _e === void 0 ? void 0 : _e.logFn) === 'function') {
204
- this.logger.logFn(stringifiedArgs, level, isSdkLog);
205
- }
200
+ this.logger.logFn(stringifiedArgs, level, isSdkLog);
206
201
  }
207
202
  // If worker sends a message that it has emitted an event, then set alreadyEmitted to true.
208
203
  if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageEmitted) {
@@ -211,7 +206,7 @@ class Spawn {
211
206
  }
212
207
  // If worker sends a failure message before exiting, capture it for use in the error event.
213
208
  if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageFailed) {
214
- this.workerFailedMessage = (_f = message.payload) === null || _f === void 0 ? void 0 : _f.message;
209
+ this.workerFailedMessage = (_e = message.payload) === null || _e === void 0 ? void 0 : _e.message;
215
210
  }
216
211
  });
217
212
  // Log memory usage every 30 seconds
@@ -78,7 +78,6 @@ function buildSpawn(overrides) {
78
78
  options: overrides.options,
79
79
  resolve: (_a = overrides.resolve) !== null && _a !== void 0 ? _a : jest.fn(),
80
80
  originalConsole: originalConsole,
81
- logger: mockLogger,
82
81
  });
83
82
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
84
83
  global.console = originalConsole;
@@ -1,10 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const constants_1 = require("../../common/constants");
4
- const test_utils_1 = require("../../common/test-utils");
5
4
  const state_1 = require("../../state/state");
6
5
  const jest_setup_1 = require("../../tests/jest.setup");
7
6
  const test_helpers_1 = require("../../tests/test-helpers");
7
+ const test_utils_1 = require("../../common/test-utils");
8
8
  const types_1 = require("../../types");
9
9
  const worker_adapter_1 = require("./worker-adapter");
10
10
  // 1. Create a mock function for the method you want to override.
@@ -25,18 +25,21 @@ export declare function createWorkerAdapter<ConnectorState>({ event, adapterStat
25
25
  export declare class WorkerAdapter<ConnectorState> {
26
26
  readonly event: AirdropEvent;
27
27
  readonly options?: WorkerAdapterOptions;
28
- isTimeout: boolean;
29
28
  hasWorkerEmitted: boolean;
29
+ private _isTimeout;
30
+ private resolveTimeoutSignal;
31
+ readonly timeoutSignal: Promise<void>;
30
32
  private adapterState;
31
33
  private _artifacts;
32
34
  private repos;
33
- private lastExtractedItemType?;
34
35
  private currentEventDataLength;
35
36
  private loaderReports;
36
37
  private _processedFiles;
37
38
  private _mappers;
38
39
  private uploader;
39
40
  constructor({ event, adapterState, options, }: WorkerAdapterInterface<ConnectorState>);
41
+ get isTimeout(): boolean;
42
+ set isTimeout(value: boolean);
40
43
  get state(): AdapterState<ConnectorState>;
41
44
  set state(value: AdapterState<ConnectorState>);
42
45
  get reports(): LoaderReport[];
@@ -61,15 +64,6 @@ export declare class WorkerAdapter<ConnectorState> {
61
64
  */
62
65
  emit(newEventType: ExtractorEventType | LoaderEventType, data?: EventData): Promise<void>;
63
66
  uploadAllRepos(): Promise<void>;
64
- /**
65
- * Persists adapter state before emitting, except for stateless worker phases.
66
- */
67
- private postStateBeforeEmit;
68
- /**
69
- * Posts state (when required), emits to the platform, and notifies the parent
70
- * worker that an event was emitted.
71
- */
72
- private emitToPlatform;
73
67
  loadItemTypes({ itemTypesToLoad, }: ItemTypesToLoadParams): Promise<LoadItemTypesResponse>;
74
68
  getLoaderBatches({ supportedItemTypes, }: {
75
69
  supportedItemTypes: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../../src/multithreading/worker-adapter/worker-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"worker-adapter.d.ts","sourceRoot":"","sources":["../../../src/multithreading/worker-adapter/worker-adapter.ts"],"names":[],"mappings":"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"}
@@ -43,7 +43,6 @@ function makeAdapter(eventType = types_1.EventType.StartExtractingData) {
43
43
  const adapter = new worker_adapter_1.WorkerAdapter({ event, adapterState });
44
44
  return { adapter, event, adapterState };
45
45
  }
46
- const iso = (ms) => new Date(ms).toISOString();
47
46
  describe(`${worker_adapter_1.WorkerAdapter.name}.emit`, () => {
48
47
  let adapter;
49
48
  let mockPostMessage;
@@ -114,25 +113,19 @@ describe(`${worker_adapter_1.WorkerAdapter.name}.emit`, () => {
114
113
  // Assert
115
114
  expect(mockPostMessage).toHaveBeenCalledTimes(1);
116
115
  });
117
- it('should emit phase extraction error when uploadAllRepos fails', async () => {
118
- const { emit: mockEmit } = require('../../common/control-protocol');
116
+ it('should correctly emit one event even if uploadAllRepos errors', async () => {
117
+ // Arrange
119
118
  adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
120
119
  adapter.uploadAllRepos = jest
121
120
  .fn()
122
121
  .mockRejectedValue(new Error('uploadAllRepos error'));
123
- await adapter.emit(types_1.ExtractorEventType.DataExtractionDone);
124
- expect(mockEmit).toHaveBeenCalledWith(expect.objectContaining({
125
- eventType: types_1.ExtractorEventType.DataExtractionError,
126
- data: expect.objectContaining({
127
- error: expect.objectContaining({
128
- message: expect.stringContaining('uploadAllRepos error'),
129
- }),
130
- }),
131
- }));
132
- expect(mockPostMessage).toHaveBeenCalledWith(expect.objectContaining({
133
- subject: 'emit',
134
- payload: { eventType: types_1.ExtractorEventType.DataExtractionError },
135
- }));
122
+ // Act
123
+ await adapter.emit(types_1.ExtractorEventType.MetadataExtractionError, {
124
+ reports: [],
125
+ processed_files: [],
126
+ });
127
+ // Assert
128
+ expect(mockPostMessage).toHaveBeenCalledTimes(1);
136
129
  });
137
130
  it('should include artifacts in data for extraction events', async () => {
138
131
  // Arrange
@@ -269,80 +262,6 @@ describe(`${worker_adapter_1.WorkerAdapter.name}.emit`, () => {
269
262
  expect(emittedMessage.startsWith('E'.repeat(100))).toBe(true);
270
263
  });
271
264
  });
272
- describe(`${worker_adapter_1.WorkerAdapter.name}.emit — worker_metadata`, () => {
273
- let adapter;
274
- beforeEach(() => {
275
- jest.clearAllMocks();
276
- ({ adapter } = makeAdapter());
277
- adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
278
- adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
279
- });
280
- function setupRepos(adapterInstance, lastExtractedItemType) {
281
- adapterInstance['repos'] = [
282
- {
283
- itemType: 'issues',
284
- dateRanges: {
285
- creationDate: { oldest: 100, newest: 200 },
286
- modifiedDate: { oldest: 150, newest: 250 },
287
- },
288
- },
289
- {
290
- itemType: 'tasks',
291
- dateRanges: {
292
- creationDate: { oldest: 300, newest: 400 },
293
- modifiedDate: { oldest: 350, newest: 450 },
294
- },
295
- },
296
- ];
297
- adapterInstance['lastExtractedItemType'] = lastExtractedItemType;
298
- }
299
- it('should emit flat worker_metadata for the latest extracted item type only', async () => {
300
- setupRepos(adapter, 'tasks');
301
- await adapter.emit(types_1.ExtractorEventType.DataExtractionProgress);
302
- const { emit: mockEmit } = require('../../common/control-protocol');
303
- expect(mockEmit.mock.calls[0][0].worker_metadata).toEqual({
304
- item_type: 'tasks',
305
- oldest_created_date: iso(300),
306
- newest_created_date: iso(400),
307
- oldest_modified_date: iso(350),
308
- newest_modified_date: iso(450),
309
- });
310
- });
311
- it('should omit unset RFC3339 bounds from worker_metadata', async () => {
312
- adapter['repos'] = [
313
- {
314
- itemType: 'tasks',
315
- dateRanges: {
316
- creationDate: { oldest: 0, newest: 0 },
317
- modifiedDate: { oldest: 0, newest: 0 },
318
- },
319
- },
320
- ];
321
- adapter['lastExtractedItemType'] = 'tasks';
322
- await adapter.emit(types_1.ExtractorEventType.DataExtractionProgress);
323
- const { emit: mockEmit } = require('../../common/control-protocol');
324
- expect(mockEmit.mock.calls[0][0].worker_metadata).toEqual({
325
- item_type: 'tasks',
326
- });
327
- });
328
- it('should send empty worker_metadata when no item type has been extracted', async () => {
329
- await adapter.emit(types_1.ExtractorEventType.DataExtractionProgress);
330
- const { emit: mockEmit } = require('../../common/control-protocol');
331
- expect(mockEmit.mock.calls[0][0].worker_metadata).toEqual({});
332
- });
333
- it('should send empty worker_metadata for loader events', async () => {
334
- setupRepos(adapter, 'tasks');
335
- await adapter.emit(types_1.LoaderEventType.DataLoadingProgress);
336
- const { emit: mockEmit } = require('../../common/control-protocol');
337
- expect(mockEmit.mock.calls[0][0].worker_metadata).toEqual({});
338
- });
339
- it('should send empty worker_metadata for non-progress extraction events', async () => {
340
- setupRepos(adapter, 'tasks');
341
- await adapter.emit(types_1.ExtractorEventType.DataExtractionError);
342
- const { emit: mockEmit } = require('../../common/control-protocol');
343
- expect(mockEmit.mock.calls[0][0].worker_metadata).toEqual({});
344
- });
345
- });
346
265
  describe(`${worker_adapter_1.WorkerAdapter.name}.emit — ExternalSyncUnitExtractionDone legacy path`, () => {
347
266
  it('should upload ESUs via a repo and strip external_sync_units from the emitted payload', async () => {
348
267
  // Arrange
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const attachments_streaming_pool_1 = require("../../attachments-streaming/attachments-streaming-pool");
4
- const test_utils_1 = require("../../common/test-utils");
5
4
  const state_1 = require("../../state/state");
6
5
  const jest_setup_1 = require("../../tests/jest.setup");
6
+ const test_utils_1 = require("../../common/test-utils");
7
7
  const types_1 = require("../../types");
8
8
  const worker_adapter_1 = require("./worker-adapter");
9
9
  /* eslint-disable @typescript-eslint/no-require-imports */