@devrev/ts-adaas 1.8.0-beta.1 → 1.8.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.
@@ -14,7 +14,7 @@ class Logger extends node_console_1.Console {
14
14
  constructor({ event, options }) {
15
15
  super(process.stdout, process.stderr);
16
16
  this.options = options;
17
- this.tags = Object.assign(Object.assign({}, event.payload.event_context), { dev_oid: event.payload.event_context.dev_org });
17
+ this.tags = Object.assign(Object.assign({}, event.payload.event_context), { dev_oid: event.payload.event_context.dev_oid });
18
18
  }
19
19
  valueToString(value) {
20
20
  if (typeof value === 'string') {
@@ -50,7 +50,7 @@ describe('Logger', () => {
50
50
  const logger = new logger_1.Logger({ event: mockEvent, options: mockOptions });
51
51
  // Access private property for testing
52
52
  const tags = logger.tags;
53
- expect(tags).toEqual(Object.assign(Object.assign({}, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_org }));
53
+ expect(tags).toEqual(Object.assign(Object.assign({}, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_oid }));
54
54
  });
55
55
  });
56
56
  describe('production logging', () => {
@@ -62,7 +62,7 @@ describe('Logger', () => {
62
62
  it('should log single string message without backslashes', () => {
63
63
  const message = 'Worker is online. Started processing the task.';
64
64
  logger.info(message);
65
- expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_org })));
65
+ expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_oid })));
66
66
  });
67
67
  it('should log single object message with JSON stringify', () => {
68
68
  const data = { id: 123, name: 'test' };
@@ -71,7 +71,7 @@ describe('Logger', () => {
71
71
  compact: false,
72
72
  depth: Infinity,
73
73
  });
74
- expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: expectedMessage }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_org })));
74
+ expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: expectedMessage }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_oid })));
75
75
  });
76
76
  it('should log multiple arguments joined with space', () => {
77
77
  const text = 'Successfully fetched';
@@ -81,7 +81,7 @@ describe('Logger', () => {
81
81
  compact: false,
82
82
  depth: Infinity,
83
83
  });
84
- expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: `${text} ${expectedDataMessage}` }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_org })));
84
+ expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: `${text} ${expectedDataMessage}` }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_oid })));
85
85
  });
86
86
  it('should handle mixed string and object arguments', () => {
87
87
  const text1 = 'Processing';
@@ -92,7 +92,7 @@ describe('Logger', () => {
92
92
  compact: false,
93
93
  depth: Infinity,
94
94
  });
95
- expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: `${text1} ${expectedDataMessage} ${text2}` }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_org })));
95
+ expect(mockConsoleInfo).toHaveBeenCalledWith(JSON.stringify(Object.assign(Object.assign({ message: `${text1} ${expectedDataMessage} ${text2}` }, mockEvent.payload.event_context), { dev_oid: mockEvent.payload.event_context.dev_oid })));
96
96
  });
97
97
  });
98
98
  describe('local development logging', () => {
@@ -143,7 +143,7 @@ describe('Logger', () => {
143
143
  const callArgs = mockConsoleInfo.mock.calls[0][0];
144
144
  const logObject = JSON.parse(callArgs);
145
145
  expect(logObject.message).toBe('');
146
- expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_org);
146
+ expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_oid);
147
147
  expect(logObject.request_id).toBe(mockEvent.payload.event_context.request_id);
148
148
  });
149
149
  it('should handle null and undefined values', () => {
@@ -153,7 +153,7 @@ describe('Logger', () => {
153
153
  const logObject = JSON.parse(callArgs);
154
154
  // inspect shows 'null' and 'undefined' as strings
155
155
  expect(logObject.message).toBe('test null undefined');
156
- expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_org);
156
+ expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_oid);
157
157
  });
158
158
  it('should handle complex nested objects', () => {
159
159
  const complexObject = {
@@ -174,7 +174,7 @@ describe('Logger', () => {
174
174
  depth: Infinity,
175
175
  });
176
176
  expect(logObject.message).toBe(expectedMessage);
177
- expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_org);
177
+ expect(logObject.dev_oid).toBe(mockEvent.payload.event_context.dev_oid);
178
178
  expect(typeof logObject.callback_url).toBe('string');
179
179
  });
180
180
  });
@@ -96,7 +96,7 @@ class State {
96
96
  },
97
97
  params: {
98
98
  sync_unit: this.event.payload.event_context.sync_unit_id,
99
- request_id: this.event.payload.event_context.uuid,
99
+ request_id: this.event.payload.event_context.request_id_adaas,
100
100
  },
101
101
  });
102
102
  this.state = state || this.state;
@@ -124,7 +124,7 @@ class State {
124
124
  },
125
125
  params: {
126
126
  sync_unit: this.event.payload.event_context.sync_unit_id,
127
- request_id: this.event.payload.event_context.uuid,
127
+ request_id: this.event.payload.event_context.request_id_adaas,
128
128
  },
129
129
  });
130
130
  this.state = JSON.parse(response.data.state);
@@ -10,17 +10,25 @@ function createEvent({ eventType, externalSyncUnits = [], progress, error, delay
10
10
  const defaultEventContext = {
11
11
  callback_url: 'test_callback_url',
12
12
  dev_org: 'test_dev_org',
13
+ dev_oid: 'test_dev_oid',
13
14
  dev_org_id: 'test_dev_org_id',
14
15
  dev_user: 'test_dev_user',
15
16
  dev_user_id: 'test_dev_user_id',
17
+ dev_uid: 'test_dev_uid',
18
+ event_type_adaas: 'test_event_type_adaas',
16
19
  external_sync_unit: 'test_external_sync_unit',
17
20
  external_sync_unit_id: 'test_external_sync_unit_id',
18
21
  external_sync_unit_name: 'test_external_sync_unit_name',
19
22
  external_system: 'test_external_system',
23
+ external_system_id: 'test_external_system_id',
24
+ external_system_name: 'test_external_system_name',
20
25
  external_system_type: 'test_external_system_type',
21
26
  import_slug: 'test_import_slug',
22
27
  mode: 'test_mode',
23
28
  request_id: 'test_request_id',
29
+ request_id_adaas: 'test_request_id_adaas',
30
+ run_id: 'test_run_id',
31
+ sequence_version: 'test_sequence_version',
24
32
  snap_in_slug: 'test_snap_in_slug',
25
33
  snap_in_version_id: 'test_snap_in_version_id',
26
34
  sync_run: 'test_sync_run',
@@ -125,32 +125,64 @@ export interface EventContextOut {
125
125
  */
126
126
  export interface EventContext {
127
127
  callback_url: string;
128
+ /**
129
+ * @deprecated dev_org is deprecated and should not be used. Use dev_oid instead.
130
+ */
128
131
  dev_org: string;
132
+ dev_oid: string;
129
133
  dev_org_id: string;
134
+ /**
135
+ * @deprecated dev_user is deprecated and should not be used. Use dev_uid instead.
136
+ */
130
137
  dev_user: string;
138
+ /**
139
+ * @deprecated dev_user_id is deprecated and should not be used. Use dev_uid instead.
140
+ */
131
141
  dev_user_id: string;
142
+ dev_uid: string;
143
+ event_type_adaas: string;
144
+ /**
145
+ * @deprecated external_sync_unit is deprecated and should not be used. Use external_sync_unit_id instead.
146
+ */
132
147
  external_sync_unit: string;
133
148
  external_sync_unit_id: string;
134
149
  external_sync_unit_name: string;
150
+ /**
151
+ * @deprecated external_system is deprecated and should not be used. Use external_system_id instead.
152
+ */
135
153
  external_system: string;
154
+ external_system_id: string;
155
+ external_system_name: string;
136
156
  external_system_type: string;
137
157
  extract_from?: string;
138
158
  import_slug: string;
139
159
  initial_sync_scope?: InitialSyncScope;
140
160
  mode: string;
141
161
  request_id: string;
162
+ request_id_adaas: string;
142
163
  /**
143
164
  * @deprecated reset_extraction is deprecated and should not be used. Use reset_extract_from instead.
144
165
  */
145
166
  reset_extraction?: boolean;
146
167
  reset_extract_from?: boolean;
168
+ run_id: string;
169
+ sequence_version: string;
147
170
  snap_in_slug: string;
148
171
  snap_in_version_id: string;
172
+ /**
173
+ * @deprecated sync_run is deprecated and should not be used. Use run_id instead.
174
+ */
149
175
  sync_run: string;
176
+ /**
177
+ * @deprecated sync_run_id is deprecated and should not be used. Use run_id instead.
178
+ */
150
179
  sync_run_id: string;
151
180
  sync_tier: string;
152
181
  sync_unit: DonV2;
153
182
  sync_unit_id: string;
183
+ /**
184
+ * @deprecated uuid is deprecated and should not be used. Use request_id_adaas instead.
185
+ */
154
186
  uuid: string;
155
187
  worker_data_url: string;
156
188
  }
@@ -124,6 +124,7 @@ class WorkerAdapter {
124
124
  catch (error) {
125
125
  console.error('Error while uploading repos', error);
126
126
  node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage(workers_1.WorkerMessageSubject.WorkerMessageExit);
127
+ this.hasWorkerEmitted = true;
127
128
  return;
128
129
  }
129
130
  }
@@ -142,6 +143,8 @@ class WorkerAdapter {
142
143
  catch (error) {
143
144
  console.error('Error while posting state', error);
144
145
  node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage(workers_1.WorkerMessageSubject.WorkerMessageExit);
146
+ this.hasWorkerEmitted = true;
147
+ return;
145
148
  }
146
149
  }
147
150
  try {
@@ -157,12 +160,13 @@ class WorkerAdapter {
157
160
  payload: { eventType: newEventType },
158
161
  };
159
162
  this.artifacts = [];
160
- this.hasWorkerEmitted = true;
161
163
  node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage(message);
164
+ this.hasWorkerEmitted = true;
162
165
  }
163
166
  catch (error) {
164
167
  console.error(`Error while emitting event with event type: ${newEventType}.`, (0, logger_1.serializeError)(error));
165
168
  node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage(workers_1.WorkerMessageSubject.WorkerMessageExit);
169
+ this.hasWorkerEmitted = true;
166
170
  }
167
171
  }
168
172
  async uploadAllRepos() {
@@ -382,4 +382,66 @@ describe('WorkerAdapter', () => {
382
382
  expect(adapter.state.toDevRev.attachmentsMetadata.lastProcessed).toBe(0);
383
383
  });
384
384
  });
385
+ describe('emit', () => {
386
+ let counter;
387
+ let mockPostMessage;
388
+ beforeEach(() => {
389
+ counter = { counter: 0 };
390
+ // Import the worker_threads module and spy on parentPort.postMessage
391
+ const workerThreads = require('node:worker_threads');
392
+ mockPostMessage = jest.fn().mockImplementation((a) => {
393
+ console.log('postMessage called with:', a);
394
+ counter.counter += 1;
395
+ });
396
+ // Spy on the parentPort.postMessage method
397
+ if (workerThreads.parentPort) {
398
+ jest.spyOn(workerThreads.parentPort, 'postMessage').mockImplementation(mockPostMessage);
399
+ }
400
+ else {
401
+ // If parentPort is null (not in worker context), create a mock
402
+ workerThreads.parentPort = {
403
+ postMessage: mockPostMessage,
404
+ };
405
+ }
406
+ });
407
+ afterEach(() => {
408
+ // Restore all mocks
409
+ jest.restoreAllMocks();
410
+ });
411
+ test('should correctly emit event', async () => {
412
+ adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
413
+ adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
414
+ await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
415
+ reports: [],
416
+ processed_files: [],
417
+ });
418
+ await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
419
+ reports: [],
420
+ processed_files: [],
421
+ });
422
+ await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataDone, {
423
+ reports: [],
424
+ processed_files: [],
425
+ });
426
+ expect(counter.counter).toBe(1);
427
+ });
428
+ test('should correctly emit one event even if postState errors', async () => {
429
+ adapter['adapterState'].postState = jest.fn().mockRejectedValue(new Error('postState error'));
430
+ adapter.uploadAllRepos = jest.fn().mockResolvedValue(undefined);
431
+ await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
432
+ reports: [],
433
+ processed_files: [],
434
+ });
435
+ expect(counter.counter).toBe(1);
436
+ });
437
+ test('should correctly emit one event even if uploadAllRepos errors', async () => {
438
+ adapter['adapterState'].postState = jest.fn().mockResolvedValue(undefined);
439
+ adapter.uploadAllRepos = jest.fn().mockRejectedValue(new Error('uploadAllRepos error'));
440
+ await adapter.emit(types_1.ExtractorEventType.ExtractionMetadataError, {
441
+ reports: [],
442
+ processed_files: [],
443
+ });
444
+ expect(counter.counter).toBe(1);
445
+ });
446
+ });
385
447
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/ts-adaas",
3
- "version": "1.8.0-beta.1",
3
+ "version": "1.8.0",
4
4
  "description": "Typescript library containing the ADaaS(AirDrop as a Service) control protocol.",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",