@devrev/ts-adaas 1.18.1-beta.1 → 1.19.1-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.
- package/dist/common/install-initial-domain-mapping.test.js +5 -2
- package/dist/common/test-utils.d.ts +19 -0
- package/dist/common/test-utils.d.ts.map +1 -0
- package/dist/common/test-utils.js +109 -0
- package/dist/index.d.ts +9 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -10
- package/dist/logger/logger.test.js +4 -19
- package/dist/mappers/mappers.test.js +8 -10
- package/dist/mock-server/mock-server.js +1 -1
- package/dist/multithreading/create-worker.test.js +12 -11
- package/dist/multithreading/spawn/spawn.js +1 -1
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +7 -3
- package/dist/multithreading/worker-adapter/worker-adapter.js +1 -1
- package/dist/multithreading/worker-adapter/worker-adapter.test.js +6 -4
- package/dist/repo/repo.test.js +17 -5
- package/dist/state/state.test.js +187 -156
- package/dist/types/external-domain-metadata.d.ts +20 -1
- package/dist/types/external-domain-metadata.d.ts.map +1 -1
- package/dist/types/extraction.test.js +17 -10
- package/dist/uploader/uploader.test.js +3 -1
- package/package.json +1 -1
package/dist/state/state.test.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const constants_1 = require("../common/constants");
|
|
4
|
-
const
|
|
4
|
+
const jest_setup_1 = require("../tests/jest.setup");
|
|
5
|
+
const test_utils_1 = require("../common/test-utils");
|
|
5
6
|
const extraction_1 = require("../types/extraction");
|
|
6
7
|
const state_1 = require("./state");
|
|
7
8
|
const state_interfaces_1 = require("./state.interfaces");
|
|
@@ -25,8 +26,8 @@ describe(state_1.State.name, () => {
|
|
|
25
26
|
});
|
|
26
27
|
it.each(constants_1.STATELESS_EVENT_TYPES)('should not init, fetch, post or install IDM for stateless event type %s', async (eventType) => {
|
|
27
28
|
// Arrange
|
|
28
|
-
const event = (0,
|
|
29
|
-
|
|
29
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
30
|
+
payload: { event_type: eventType },
|
|
30
31
|
});
|
|
31
32
|
// Act
|
|
32
33
|
await (0, state_1.createAdapterState)({
|
|
@@ -42,8 +43,8 @@ describe(state_1.State.name, () => {
|
|
|
42
43
|
});
|
|
43
44
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if fetching the state fails', async (eventType) => {
|
|
44
45
|
// Arrange
|
|
45
|
-
const event = (0,
|
|
46
|
-
|
|
46
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
47
|
+
payload: { event_type: eventType },
|
|
47
48
|
});
|
|
48
49
|
fetchStateSpy.mockRejectedValue({
|
|
49
50
|
isAxiosError: true,
|
|
@@ -60,8 +61,8 @@ describe(state_1.State.name, () => {
|
|
|
60
61
|
});
|
|
61
62
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if parsing the state fails', async (eventType) => {
|
|
62
63
|
// Arrange
|
|
63
|
-
const event = (0,
|
|
64
|
-
|
|
64
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
65
|
+
payload: { event_type: eventType },
|
|
65
66
|
});
|
|
66
67
|
fetchStateSpy.mockResolvedValue({ state: 'invalid-json' });
|
|
67
68
|
jest.spyOn(console, 'error').mockImplementation(() => { });
|
|
@@ -75,8 +76,8 @@ describe(state_1.State.name, () => {
|
|
|
75
76
|
});
|
|
76
77
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if fetching is successful but there is no state in the response', async (eventType) => {
|
|
77
78
|
// Arrange
|
|
78
|
-
const event = (0,
|
|
79
|
-
|
|
79
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
80
|
+
payload: { event_type: eventType },
|
|
80
81
|
});
|
|
81
82
|
fetchStateSpy.mockResolvedValue({ state: null });
|
|
82
83
|
jest.spyOn(console, 'error').mockImplementation(() => { });
|
|
@@ -93,11 +94,11 @@ describe(state_1.State.name, () => {
|
|
|
93
94
|
const initialState = {
|
|
94
95
|
test: 'test',
|
|
95
96
|
};
|
|
96
|
-
const event = (0,
|
|
97
|
-
|
|
98
|
-
contextOverrides: {
|
|
97
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
98
|
+
context: {
|
|
99
99
|
snap_in_version_id: '',
|
|
100
100
|
},
|
|
101
|
+
payload: { event_type: eventType },
|
|
101
102
|
});
|
|
102
103
|
fetchStateSpy.mockRejectedValue({
|
|
103
104
|
isAxiosError: true,
|
|
@@ -124,11 +125,11 @@ describe(state_1.State.name, () => {
|
|
|
124
125
|
const initialState = {
|
|
125
126
|
test: 'test',
|
|
126
127
|
};
|
|
127
|
-
const event = (0,
|
|
128
|
-
|
|
129
|
-
contextOverrides: {
|
|
128
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
129
|
+
context: {
|
|
130
130
|
snap_in_version_id: '',
|
|
131
131
|
},
|
|
132
|
+
payload: { event_type: extraction_1.EventType.StartExtractingData },
|
|
132
133
|
});
|
|
133
134
|
fetchStateSpy.mockRejectedValue({
|
|
134
135
|
isAxiosError: true,
|
|
@@ -156,8 +157,8 @@ describe(state_1.State.name, () => {
|
|
|
156
157
|
});
|
|
157
158
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should exit the process if initialDomainMapping is not provided for event type %s', async (eventType) => {
|
|
158
159
|
// Arrange
|
|
159
|
-
const event = (0,
|
|
160
|
-
|
|
160
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
161
|
+
payload: { event_type: eventType },
|
|
161
162
|
});
|
|
162
163
|
fetchStateSpy.mockResolvedValue({
|
|
163
164
|
state: JSON.stringify({
|
|
@@ -176,11 +177,11 @@ describe(state_1.State.name, () => {
|
|
|
176
177
|
});
|
|
177
178
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should not install IDM if version matches for event type %s', async (eventType) => {
|
|
178
179
|
// Arrange
|
|
179
|
-
const event = (0,
|
|
180
|
-
|
|
181
|
-
contextOverrides: {
|
|
180
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
181
|
+
context: {
|
|
182
182
|
snap_in_version_id: '1.0.0',
|
|
183
183
|
},
|
|
184
|
+
payload: { event_type: eventType },
|
|
184
185
|
});
|
|
185
186
|
const stringifiedState = JSON.stringify({
|
|
186
187
|
test: 'test',
|
|
@@ -199,11 +200,11 @@ describe(state_1.State.name, () => {
|
|
|
199
200
|
});
|
|
200
201
|
it.each(constants_1.STATEFUL_EVENT_TYPES)('should install IDM if version does not match for event type %s', async (eventType) => {
|
|
201
202
|
// Arrange
|
|
202
|
-
const event = (0,
|
|
203
|
-
|
|
204
|
-
contextOverrides: {
|
|
203
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
204
|
+
context: {
|
|
205
205
|
snap_in_version_id: '2.0.0',
|
|
206
206
|
},
|
|
207
|
+
payload: { event_type: eventType },
|
|
207
208
|
});
|
|
208
209
|
const stringifiedState = JSON.stringify({
|
|
209
210
|
test: 'test',
|
|
@@ -226,11 +227,13 @@ describe(state_1.State.name, () => {
|
|
|
226
227
|
describe('Enhanced Control Protocol - TimeValue resolution failures', () => {
|
|
227
228
|
it('should exit the process if extraction_start_time resolution fails', async () => {
|
|
228
229
|
// Arrange: WORKERS_NEWEST type but state has no workersNewest
|
|
229
|
-
const event = (0,
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
230
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
231
|
+
payload: {
|
|
232
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
233
|
+
event_context: {
|
|
234
|
+
extraction_start_time: {
|
|
235
|
+
type: extraction_1.TimeValueType.WORKERS_NEWEST,
|
|
236
|
+
},
|
|
234
237
|
},
|
|
235
238
|
},
|
|
236
239
|
});
|
|
@@ -252,14 +255,16 @@ describe(state_1.State.name, () => {
|
|
|
252
255
|
});
|
|
253
256
|
it('should exit the process if extraction_end_time resolution fails', async () => {
|
|
254
257
|
// Arrange: WORKERS_NEWEST type but state has no workersNewest
|
|
255
|
-
const event = (0,
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
258
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
259
|
+
payload: {
|
|
260
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
261
|
+
event_context: {
|
|
262
|
+
extraction_start_time: {
|
|
263
|
+
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
264
|
+
},
|
|
265
|
+
extraction_end_time: {
|
|
266
|
+
type: extraction_1.TimeValueType.WORKERS_NEWEST,
|
|
267
|
+
},
|
|
263
268
|
},
|
|
264
269
|
},
|
|
265
270
|
});
|
|
@@ -283,18 +288,20 @@ describe(state_1.State.name, () => {
|
|
|
283
288
|
describe('Backwards compatibility - missing TimeValue type', () => {
|
|
284
289
|
it('should skip resolution when extraction_start_time has no type', async () => {
|
|
285
290
|
// Arrange: platform sends extraction_start_time without a type field (old platform version)
|
|
286
|
-
const event = (0,
|
|
287
|
-
|
|
288
|
-
eventContextOverrides: {
|
|
289
|
-
extraction_start_time: {},
|
|
290
|
-
extraction_end_time: {
|
|
291
|
-
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
292
|
-
value: '2025-06-01T00:00:00Z',
|
|
293
|
-
},
|
|
294
|
-
},
|
|
295
|
-
contextOverrides: {
|
|
291
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
292
|
+
context: {
|
|
296
293
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
297
294
|
},
|
|
295
|
+
payload: {
|
|
296
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
297
|
+
event_context: {
|
|
298
|
+
extraction_start_time: {},
|
|
299
|
+
extraction_end_time: {
|
|
300
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
301
|
+
value: '2025-06-01T00:00:00Z',
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
},
|
|
298
305
|
});
|
|
299
306
|
const stringifiedState = JSON.stringify({
|
|
300
307
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -315,18 +322,20 @@ describe(state_1.State.name, () => {
|
|
|
315
322
|
});
|
|
316
323
|
it('should skip resolution when extraction_end_time has no type', async () => {
|
|
317
324
|
// Arrange: platform sends extraction_end_time without a type field
|
|
318
|
-
const event = (0,
|
|
319
|
-
|
|
320
|
-
eventContextOverrides: {
|
|
321
|
-
extraction_start_time: {
|
|
322
|
-
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
323
|
-
value: '2024-01-01T00:00:00Z',
|
|
324
|
-
},
|
|
325
|
-
extraction_end_time: {},
|
|
326
|
-
},
|
|
327
|
-
contextOverrides: {
|
|
325
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
326
|
+
context: {
|
|
328
327
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
329
328
|
},
|
|
329
|
+
payload: {
|
|
330
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
331
|
+
event_context: {
|
|
332
|
+
extraction_start_time: {
|
|
333
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
334
|
+
value: '2024-01-01T00:00:00Z',
|
|
335
|
+
},
|
|
336
|
+
extraction_end_time: {},
|
|
337
|
+
},
|
|
338
|
+
},
|
|
330
339
|
});
|
|
331
340
|
const stringifiedState = JSON.stringify({
|
|
332
341
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -346,15 +355,21 @@ describe(state_1.State.name, () => {
|
|
|
346
355
|
});
|
|
347
356
|
it('should skip resolution when both extraction times have no type', async () => {
|
|
348
357
|
// Arrange: platform sends both time values without type fields
|
|
349
|
-
const event = (0,
|
|
350
|
-
|
|
351
|
-
eventContextOverrides: {
|
|
352
|
-
extraction_start_time: { value: 'some-value' },
|
|
353
|
-
extraction_end_time: { value: 'some-value' },
|
|
354
|
-
},
|
|
355
|
-
contextOverrides: {
|
|
358
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
359
|
+
context: {
|
|
356
360
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
357
361
|
},
|
|
362
|
+
payload: {
|
|
363
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
364
|
+
event_context: {
|
|
365
|
+
extraction_start_time: {
|
|
366
|
+
value: 'some-value',
|
|
367
|
+
},
|
|
368
|
+
extraction_end_time: {
|
|
369
|
+
value: 'some-value',
|
|
370
|
+
},
|
|
371
|
+
},
|
|
372
|
+
},
|
|
358
373
|
});
|
|
359
374
|
const stringifiedState = JSON.stringify({
|
|
360
375
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -376,16 +391,18 @@ describe(state_1.State.name, () => {
|
|
|
376
391
|
describe('Enhanced Control Protocol - extraction window validation', () => {
|
|
377
392
|
it('should exit the process if extract_from >= extract_to', async () => {
|
|
378
393
|
// Arrange: start is after end (inverted window)
|
|
379
|
-
const event = (0,
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
394
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
395
|
+
payload: {
|
|
396
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
397
|
+
event_context: {
|
|
398
|
+
extraction_start_time: {
|
|
399
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
400
|
+
value: '2025-06-01T00:00:00Z',
|
|
401
|
+
},
|
|
402
|
+
extraction_end_time: {
|
|
403
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
404
|
+
value: '2024-01-01T00:00:00Z',
|
|
405
|
+
},
|
|
389
406
|
},
|
|
390
407
|
},
|
|
391
408
|
});
|
|
@@ -405,16 +422,18 @@ describe(state_1.State.name, () => {
|
|
|
405
422
|
});
|
|
406
423
|
it('should exit the process if extract_from equals extract_to', async () => {
|
|
407
424
|
// Arrange: start equals end (zero-width window)
|
|
408
|
-
const event = (0,
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
425
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
426
|
+
payload: {
|
|
427
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
428
|
+
event_context: {
|
|
429
|
+
extraction_start_time: {
|
|
430
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
431
|
+
value: '2024-06-01T00:00:00Z',
|
|
432
|
+
},
|
|
433
|
+
extraction_end_time: {
|
|
434
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
435
|
+
value: '2024-06-01T00:00:00Z',
|
|
436
|
+
},
|
|
418
437
|
},
|
|
419
438
|
},
|
|
420
439
|
});
|
|
@@ -434,16 +453,18 @@ describe(state_1.State.name, () => {
|
|
|
434
453
|
});
|
|
435
454
|
it('should not exit when extract_from < extract_to', async () => {
|
|
436
455
|
// Arrange: valid window
|
|
437
|
-
const event = (0,
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
456
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
457
|
+
payload: {
|
|
458
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
459
|
+
event_context: {
|
|
460
|
+
extraction_start_time: {
|
|
461
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
462
|
+
value: '2024-01-01T00:00:00Z',
|
|
463
|
+
},
|
|
464
|
+
extraction_end_time: {
|
|
465
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
466
|
+
value: '2025-06-01T00:00:00Z',
|
|
467
|
+
},
|
|
447
468
|
},
|
|
448
469
|
},
|
|
449
470
|
});
|
|
@@ -463,12 +484,14 @@ describe(state_1.State.name, () => {
|
|
|
463
484
|
});
|
|
464
485
|
it('should not validate when only extract_from is set', async () => {
|
|
465
486
|
// Arrange: only start, no end
|
|
466
|
-
const event = (0,
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
487
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
488
|
+
payload: {
|
|
489
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
490
|
+
event_context: {
|
|
491
|
+
extraction_start_time: {
|
|
492
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
493
|
+
value: '2024-01-01T00:00:00Z',
|
|
494
|
+
},
|
|
472
495
|
},
|
|
473
496
|
},
|
|
474
497
|
});
|
|
@@ -488,15 +511,17 @@ describe(state_1.State.name, () => {
|
|
|
488
511
|
});
|
|
489
512
|
it('should not exit when extract_from is UNBOUNDED and extract_to is a real timestamp', async () => {
|
|
490
513
|
// Arrange: UNBOUNDED start (epoch) with a real ABSOLUTE end timestamp
|
|
491
|
-
const event = (0,
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
514
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
515
|
+
payload: {
|
|
516
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
517
|
+
event_context: {
|
|
518
|
+
extraction_start_time: {
|
|
519
|
+
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
520
|
+
},
|
|
521
|
+
extraction_end_time: {
|
|
522
|
+
type: extraction_1.TimeValueType.ABSOLUTE_TIME,
|
|
523
|
+
value: '2025-06-01T00:00:00Z',
|
|
524
|
+
},
|
|
500
525
|
},
|
|
501
526
|
},
|
|
502
527
|
});
|
|
@@ -526,19 +551,21 @@ describe(state_1.State.name, () => {
|
|
|
526
551
|
});
|
|
527
552
|
it('should store resolved values in pendingWorkersOldest/pendingWorkersNewest on StartExtractingData', async () => {
|
|
528
553
|
// Arrange
|
|
529
|
-
const event = (0,
|
|
530
|
-
|
|
531
|
-
eventContextOverrides: {
|
|
532
|
-
extraction_start_time: {
|
|
533
|
-
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
534
|
-
},
|
|
535
|
-
extraction_end_time: {
|
|
536
|
-
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
537
|
-
},
|
|
538
|
-
},
|
|
539
|
-
contextOverrides: {
|
|
554
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
555
|
+
context: {
|
|
540
556
|
snap_in_version_id: '',
|
|
541
557
|
},
|
|
558
|
+
payload: {
|
|
559
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
560
|
+
event_context: {
|
|
561
|
+
extraction_start_time: {
|
|
562
|
+
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
563
|
+
},
|
|
564
|
+
extraction_end_time: {
|
|
565
|
+
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
566
|
+
},
|
|
567
|
+
},
|
|
568
|
+
},
|
|
542
569
|
});
|
|
543
570
|
fetchStateSpy.mockRejectedValue({
|
|
544
571
|
isAxiosError: true,
|
|
@@ -563,19 +590,21 @@ describe(state_1.State.name, () => {
|
|
|
563
590
|
// Arrange: state has stale pending values from a previous failed attempt
|
|
564
591
|
const staleOldest = '2026-03-25T08:00:00.000Z';
|
|
565
592
|
const staleNewest = '2026-03-25T09:00:00.000Z';
|
|
566
|
-
const event = (0,
|
|
567
|
-
|
|
568
|
-
eventContextOverrides: {
|
|
569
|
-
extraction_start_time: {
|
|
570
|
-
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
571
|
-
},
|
|
572
|
-
extraction_end_time: {
|
|
573
|
-
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
574
|
-
},
|
|
575
|
-
},
|
|
576
|
-
contextOverrides: {
|
|
593
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
594
|
+
context: {
|
|
577
595
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
578
596
|
},
|
|
597
|
+
payload: {
|
|
598
|
+
event_type: extraction_1.EventType.StartExtractingData,
|
|
599
|
+
event_context: {
|
|
600
|
+
extraction_start_time: {
|
|
601
|
+
type: extraction_1.TimeValueType.UNBOUNDED,
|
|
602
|
+
},
|
|
603
|
+
extraction_end_time: {
|
|
604
|
+
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
605
|
+
},
|
|
606
|
+
},
|
|
607
|
+
},
|
|
579
608
|
});
|
|
580
609
|
const stringifiedState = JSON.stringify({
|
|
581
610
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -599,20 +628,22 @@ describe(state_1.State.name, () => {
|
|
|
599
628
|
// Arrange: state has pending values from a prior StartExtractingData phase
|
|
600
629
|
const pendingOldest = '1970-01-01T00:00:00.000Z';
|
|
601
630
|
const pendingNewest = '2026-03-26T08:00:00.000Z'; // Earlier than FIXED_NOW
|
|
602
|
-
const event = (0,
|
|
603
|
-
|
|
604
|
-
eventContextOverrides: {
|
|
605
|
-
// Platform still sends TimeValue objects, but they should be ignored
|
|
606
|
-
extraction_start_time: {
|
|
607
|
-
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
608
|
-
},
|
|
609
|
-
extraction_end_time: {
|
|
610
|
-
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
611
|
-
},
|
|
612
|
-
},
|
|
613
|
-
contextOverrides: {
|
|
631
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
632
|
+
context: {
|
|
614
633
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
615
634
|
},
|
|
635
|
+
payload: {
|
|
636
|
+
event_type: extraction_1.EventType.ContinueExtractingData,
|
|
637
|
+
event_context: {
|
|
638
|
+
// Platform still sends TimeValue objects, but they should be ignored
|
|
639
|
+
extraction_start_time: {
|
|
640
|
+
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
641
|
+
},
|
|
642
|
+
extraction_end_time: {
|
|
643
|
+
type: extraction_1.TimeValueType.CURRENT_TIME,
|
|
644
|
+
},
|
|
645
|
+
},
|
|
646
|
+
},
|
|
616
647
|
});
|
|
617
648
|
const stringifiedState = JSON.stringify({
|
|
618
649
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -636,11 +667,11 @@ describe(state_1.State.name, () => {
|
|
|
636
667
|
});
|
|
637
668
|
it('should not set extract_from/extract_to on ContinueExtractingData if no pending values exist', async () => {
|
|
638
669
|
// Arrange: state has no pending values (e.g. old state from before this feature)
|
|
639
|
-
const event = (0,
|
|
640
|
-
|
|
641
|
-
contextOverrides: {
|
|
670
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
671
|
+
context: {
|
|
642
672
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
643
673
|
},
|
|
674
|
+
payload: { event_type: extraction_1.EventType.ContinueExtractingData },
|
|
644
675
|
});
|
|
645
676
|
const stringifiedState = JSON.stringify({
|
|
646
677
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -661,11 +692,11 @@ describe(state_1.State.name, () => {
|
|
|
661
692
|
// Arrange: state has pending values from the StartExtractingData phase
|
|
662
693
|
const pendingOldest = '1970-01-01T00:00:00.000Z';
|
|
663
694
|
const pendingNewest = '2026-03-26T08:00:00.000Z';
|
|
664
|
-
const event = (0,
|
|
665
|
-
|
|
666
|
-
contextOverrides: {
|
|
695
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
696
|
+
context: {
|
|
667
697
|
snap_in_version_id: 'test_snap_in_version_id',
|
|
668
698
|
},
|
|
699
|
+
payload: { event_type: extraction_1.EventType.StartExtractingAttachments },
|
|
669
700
|
});
|
|
670
701
|
const stringifiedState = JSON.stringify({
|
|
671
702
|
snapInVersionId: 'test_snap_in_version_id',
|
|
@@ -687,11 +718,11 @@ describe(state_1.State.name, () => {
|
|
|
687
718
|
});
|
|
688
719
|
it('should populate extractionScope from API response', async () => {
|
|
689
720
|
// Arrange
|
|
690
|
-
const event = (0,
|
|
691
|
-
|
|
692
|
-
contextOverrides: {
|
|
721
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
722
|
+
context: {
|
|
693
723
|
snap_in_version_id: '1.0.0',
|
|
694
724
|
},
|
|
725
|
+
payload: { event_type: extraction_1.EventType.StartExtractingData },
|
|
695
726
|
});
|
|
696
727
|
fetchStateSpy.mockResolvedValue({
|
|
697
728
|
state: JSON.stringify({ snapInVersionId: '1.0.0' }),
|
|
@@ -715,11 +746,11 @@ describe(state_1.State.name, () => {
|
|
|
715
746
|
});
|
|
716
747
|
it('should have empty extractionScope on 404', async () => {
|
|
717
748
|
// Arrange
|
|
718
|
-
const event = (0,
|
|
719
|
-
|
|
720
|
-
contextOverrides: {
|
|
749
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
750
|
+
context: {
|
|
721
751
|
snap_in_version_id: '',
|
|
722
752
|
},
|
|
753
|
+
payload: { event_type: extraction_1.EventType.StartExtractingMetadata },
|
|
723
754
|
});
|
|
724
755
|
fetchStateSpy.mockRejectedValue({
|
|
725
756
|
isAxiosError: true,
|
|
@@ -739,8 +770,8 @@ describe(state_1.State.name, () => {
|
|
|
739
770
|
});
|
|
740
771
|
it('should have empty extractionScope for stateless events', async () => {
|
|
741
772
|
// Arrange
|
|
742
|
-
const event = (0,
|
|
743
|
-
|
|
773
|
+
const event = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
|
|
774
|
+
payload: { event_type: extraction_1.EventType.StartExtractingExternalSyncUnits },
|
|
744
775
|
});
|
|
745
776
|
// Act
|
|
746
777
|
const result = await (0, state_1.createAdapterState)({
|
|
@@ -19,7 +19,7 @@ export type StageKey = string;
|
|
|
19
19
|
/**
|
|
20
20
|
* Field type discriminator.
|
|
21
21
|
*/
|
|
22
|
-
export type FieldType = 'bool' | 'int' | 'float' | 'text' | 'rich_text' | 'reference' | 'typed_reference' | 'enum' | 'date' | 'timestamp' | 'struct' | 'permission' | 'record_type_privilege' | 'field_privilege' | 'conditional_privilege';
|
|
22
|
+
export type FieldType = 'bool' | 'int' | 'float' | 'text' | 'rich_text' | 'reference' | 'typed_reference' | 'enum' | 'date' | 'timestamp' | 'struct' | 'permission' | 'record_type_privilege' | 'field_privilege' | 'conditional_privilege' | 'participation';
|
|
23
23
|
/**
|
|
24
24
|
* Reference type indicating parent-child relationship.
|
|
25
25
|
*/
|
|
@@ -113,6 +113,13 @@ export interface TypedReferenceData {
|
|
|
113
113
|
export interface StructData {
|
|
114
114
|
key?: StructTypeKey;
|
|
115
115
|
}
|
|
116
|
+
/**
|
|
117
|
+
* Participation field data specifying target record types.
|
|
118
|
+
*/
|
|
119
|
+
export interface ParticipationData {
|
|
120
|
+
/** The record types that this participation reference can refer to */
|
|
121
|
+
refers_to: Record<RecordTypeKey, ReferenceDetail>;
|
|
122
|
+
}
|
|
116
123
|
/**
|
|
117
124
|
* Permission data associating a reference with a role.
|
|
118
125
|
*/
|
|
@@ -190,6 +197,7 @@ export interface Field {
|
|
|
190
197
|
record_type_privilege?: RecordTypePrivilegeData;
|
|
191
198
|
field_privilege?: FieldPrivilegeData;
|
|
192
199
|
conditional_privilege?: ConditionalPrivilegeData;
|
|
200
|
+
participation?: ParticipationData;
|
|
193
201
|
}
|
|
194
202
|
/**
|
|
195
203
|
* Field condition definition.
|
|
@@ -269,6 +277,15 @@ export interface RecordTypeCategory {
|
|
|
269
277
|
/** Indicates whether a record can move between the record types of this category while preserving its identity */
|
|
270
278
|
are_record_type_conversions_possible?: boolean;
|
|
271
279
|
}
|
|
280
|
+
/**
|
|
281
|
+
* Attachments configuration for a record type.
|
|
282
|
+
*/
|
|
283
|
+
export interface Attachments {
|
|
284
|
+
/** Whether attachments can be extracted */
|
|
285
|
+
is_extractable?: boolean;
|
|
286
|
+
/** Whether attachments can be loaded: that is, whether the connector supports creating it in the system */
|
|
287
|
+
is_loadable?: boolean;
|
|
288
|
+
}
|
|
272
289
|
/**
|
|
273
290
|
* Record type definition.
|
|
274
291
|
*/
|
|
@@ -293,6 +310,8 @@ export interface RecordType {
|
|
|
293
310
|
stage_diagram?: StageDiagram;
|
|
294
311
|
/** Link naming data for custom links */
|
|
295
312
|
link_naming_data?: CustomLinkData;
|
|
313
|
+
/** Attachments configuration */
|
|
314
|
+
attachments?: Attachments;
|
|
296
315
|
}
|
|
297
316
|
/**
|
|
298
317
|
* Struct type definition for reusable field structures.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-domain-metadata.d.ts","sourceRoot":"","sources":["../../src/types/external-domain-metadata.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;AAErC,kGAAkG;AAClG,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,8EAA8E;AAC9E,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,uFAAuF;AACvF,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC;AAElC,6DAA6D;AAC7D,MAAM,MAAM,aAAa,GAAG,MAAM,CAAC;AAEnC,gFAAgF;AAChF,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC;AAE3C,+DAA+D;AAC/D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B,+DAA+D;AAC/D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,KAAK,GACL,OAAO,GACP,MAAM,GACN,WAAW,GACX,WAAW,GACX,iBAAiB,GACjB,MAAM,GACN,MAAM,GACN,WAAW,GACX,QAAQ,GACR,YAAY,GACZ,uBAAuB,GACvB,iBAAiB,GACjB,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"external-domain-metadata.d.ts","sourceRoot":"","sources":["../../src/types/external-domain-metadata.ts"],"names":[],"mappings":"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"}
|