@devrev/ts-adaas 1.17.1-beta.5 → 1.17.1-beta.7

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 (32) hide show
  1. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  2. package/dist/common/constants.d.ts +8 -0
  3. package/dist/common/constants.d.ts.map +1 -1
  4. package/dist/common/constants.js +9 -1
  5. package/dist/common/time-value-resolver.d.ts +47 -0
  6. package/dist/common/time-value-resolver.d.ts.map +1 -0
  7. package/dist/common/time-value-resolver.js +149 -0
  8. package/dist/common/time-value-resolver.test.d.ts +2 -0
  9. package/dist/common/time-value-resolver.test.d.ts.map +1 -0
  10. package/dist/common/time-value-resolver.test.js +273 -0
  11. package/dist/mock-server/mock-server.d.ts +1 -34
  12. package/dist/mock-server/mock-server.d.ts.map +1 -1
  13. package/dist/mock-server/mock-server.interfaces.d.ts +18 -2
  14. package/dist/mock-server/mock-server.interfaces.d.ts.map +1 -1
  15. package/dist/mock-server/mock-server.js +87 -80
  16. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +1 -1
  17. package/dist/multithreading/worker-adapter/worker-adapter.js +19 -0
  18. package/dist/multithreading/worker-adapter/worker-adapter.test.js +192 -6
  19. package/dist/state/state.d.ts.map +1 -1
  20. package/dist/state/state.interfaces.d.ts +22 -0
  21. package/dist/state/state.interfaces.d.ts.map +1 -1
  22. package/dist/state/state.interfaces.js +4 -0
  23. package/dist/state/state.js +68 -0
  24. package/dist/state/state.test.js +369 -0
  25. package/dist/types/extraction.d.ts +77 -1
  26. package/dist/types/extraction.d.ts.map +1 -1
  27. package/dist/types/extraction.js +43 -1
  28. package/dist/types/extraction.test.js +22 -11
  29. package/dist/types/index.d.ts +2 -1
  30. package/dist/types/index.d.ts.map +1 -1
  31. package/dist/types/index.js +6 -1
  32. package/package.json +1 -15
@@ -9,6 +9,7 @@ const axios_1 = __importDefault(require("axios"));
9
9
  const node_worker_threads_1 = require("node:worker_threads");
10
10
  const constants_1 = require("../common/constants");
11
11
  const install_initial_domain_mapping_1 = require("../common/install-initial-domain-mapping");
12
+ const time_value_resolver_1 = require("../common/time-value-resolver");
12
13
  const axios_client_internal_1 = require("../http/axios-client-internal");
13
14
  const logger_1 = require("../logger/logger");
14
15
  const common_1 = require("../types/common");
@@ -60,6 +61,73 @@ async function createAdapterState({ event, initialState, initialDomainMapping, o
60
61
  as.state.lastSyncStarted = new Date().toISOString();
61
62
  console.log(`Setting lastSyncStarted to ${as.state.lastSyncStarted}.`);
62
63
  }
64
+ // Resolve extraction timestamps from TimeValue objects, or reuse pending values from a prior invocation.
65
+ // On StartExtractingData: resolve fresh from TimeValue objects and store in pending state (always overwrite).
66
+ // On all other events: reuse the pending values cached during StartExtractingData.
67
+ const eventContext = event.payload.event_context;
68
+ if (event.payload.event_type === extraction_1.EventType.StartExtractingData) {
69
+ const timeFields = [
70
+ {
71
+ source: 'extraction_start_time',
72
+ target: 'extract_from',
73
+ pending: 'pendingWorkersOldest',
74
+ },
75
+ {
76
+ source: 'extraction_end_time',
77
+ target: 'extract_to',
78
+ pending: 'pendingWorkersNewest',
79
+ },
80
+ ];
81
+ for (const { source, target, pending } of timeFields) {
82
+ const timeValue = eventContext[source];
83
+ if (timeValue) {
84
+ try {
85
+ const resolved = (0, time_value_resolver_1.resolveTimeValue)(timeValue, as.state);
86
+ eventContext[target] = resolved;
87
+ as.state[pending] = resolved;
88
+ console.log(`Resolved ${target} to ${resolved}. Stored in ${pending}.`);
89
+ }
90
+ catch (error) {
91
+ const errorMessage = `Failed to resolve ${source}: ${(0, logger_1.serializeError)(error)}`;
92
+ console.error(errorMessage);
93
+ node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
94
+ subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
95
+ payload: { message: errorMessage },
96
+ });
97
+ process.exit(1);
98
+ }
99
+ }
100
+ }
101
+ }
102
+ else {
103
+ // Non-StartExtractingData events: reuse pending values from state
104
+ if (as.state.pendingWorkersOldest) {
105
+ eventContext.extract_from = as.state.pendingWorkersOldest;
106
+ console.log(`Reusing pendingWorkersOldest as extract_from: ${as.state.pendingWorkersOldest}.`);
107
+ }
108
+ else {
109
+ console.warn('pendingWorkersOldest is not set in state. extract_from will not be populated for this invocation.');
110
+ }
111
+ if (as.state.pendingWorkersNewest) {
112
+ eventContext.extract_to = as.state.pendingWorkersNewest;
113
+ console.log(`Reusing pendingWorkersNewest as extract_to: ${as.state.pendingWorkersNewest}.`);
114
+ }
115
+ else {
116
+ console.warn('pendingWorkersNewest is not set in state. extract_to will not be populated for this invocation.');
117
+ }
118
+ }
119
+ // Validate that extract_from is before extract_to
120
+ if (eventContext.extract_from && eventContext.extract_to) {
121
+ if (eventContext.extract_from >= eventContext.extract_to) {
122
+ const errorMessage = `Invalid extraction window: extract_from (${eventContext.extract_from}) must be older than extract_to (${eventContext.extract_to}). This indicates an error in the platform.`;
123
+ console.error(errorMessage);
124
+ node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
125
+ subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
126
+ payload: { message: errorMessage },
127
+ });
128
+ process.exit(1);
129
+ }
130
+ }
63
131
  }
64
132
  return as;
65
133
  }
@@ -223,6 +223,375 @@ describe(state_1.State.name, () => {
223
223
  // Assert
224
224
  expect(installInitialDomainMappingSpy).toHaveBeenCalled();
225
225
  });
226
+ describe('Enhanced Control Protocol - TimeValue resolution failures', () => {
227
+ it('should exit the process if extraction_start_time resolution fails', async () => {
228
+ // Arrange: WORKERS_NEWEST type but state has no workersNewest
229
+ const event = (0, test_helpers_1.createEvent)({
230
+ eventType: extraction_1.EventType.StartExtractingData,
231
+ eventContextOverrides: {
232
+ extraction_start_time: {
233
+ type: extraction_1.TimeValueType.WORKERS_NEWEST,
234
+ },
235
+ },
236
+ });
237
+ const stringifiedState = JSON.stringify({
238
+ snapInVersionId: 'test_snap_in_version_id',
239
+ workers_oldest: '',
240
+ workers_newest: '',
241
+ });
242
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
243
+ jest.spyOn(console, 'log').mockImplementation(() => { });
244
+ jest.spyOn(console, 'error').mockImplementation(() => { });
245
+ // Act & Assert
246
+ await expect((0, state_1.createAdapterState)({
247
+ event,
248
+ initialState: {},
249
+ initialDomainMapping: {},
250
+ })).rejects.toThrow('process.exit called');
251
+ expect(processExitSpy).toHaveBeenCalledWith(1);
252
+ });
253
+ it('should exit the process if extraction_end_time resolution fails', async () => {
254
+ // Arrange: WORKERS_NEWEST type but state has no workersNewest
255
+ const event = (0, test_helpers_1.createEvent)({
256
+ eventType: extraction_1.EventType.StartExtractingData,
257
+ eventContextOverrides: {
258
+ extraction_start_time: {
259
+ type: extraction_1.TimeValueType.UNBOUNDED,
260
+ },
261
+ extraction_end_time: {
262
+ type: extraction_1.TimeValueType.WORKERS_NEWEST,
263
+ },
264
+ },
265
+ });
266
+ const stringifiedState = JSON.stringify({
267
+ snapInVersionId: 'test_snap_in_version_id',
268
+ workers_oldest: '',
269
+ workers_newest: '',
270
+ });
271
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
272
+ jest.spyOn(console, 'log').mockImplementation(() => { });
273
+ jest.spyOn(console, 'error').mockImplementation(() => { });
274
+ // Act & Assert
275
+ await expect((0, state_1.createAdapterState)({
276
+ event,
277
+ initialState: {},
278
+ initialDomainMapping: {},
279
+ })).rejects.toThrow('process.exit called');
280
+ expect(processExitSpy).toHaveBeenCalledWith(1);
281
+ });
282
+ });
283
+ describe('Enhanced Control Protocol - extraction window validation', () => {
284
+ it('should exit the process if extract_from >= extract_to', async () => {
285
+ // Arrange: start is after end (inverted window)
286
+ const event = (0, test_helpers_1.createEvent)({
287
+ eventType: extraction_1.EventType.StartExtractingData,
288
+ eventContextOverrides: {
289
+ extraction_start_time: {
290
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
291
+ value: '2025-06-01T00:00:00Z',
292
+ },
293
+ extraction_end_time: {
294
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
295
+ value: '2024-01-01T00:00:00Z',
296
+ },
297
+ },
298
+ });
299
+ const stringifiedState = JSON.stringify({
300
+ snapInVersionId: 'test_snap_in_version_id',
301
+ });
302
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
303
+ jest.spyOn(console, 'log').mockImplementation(() => { });
304
+ jest.spyOn(console, 'error').mockImplementation(() => { });
305
+ // Act & Assert
306
+ await expect((0, state_1.createAdapterState)({
307
+ event,
308
+ initialState: {},
309
+ initialDomainMapping: {},
310
+ })).rejects.toThrow('process.exit called');
311
+ expect(processExitSpy).toHaveBeenCalledWith(1);
312
+ });
313
+ it('should exit the process if extract_from equals extract_to', async () => {
314
+ // Arrange: start equals end (zero-width window)
315
+ const event = (0, test_helpers_1.createEvent)({
316
+ eventType: extraction_1.EventType.StartExtractingData,
317
+ eventContextOverrides: {
318
+ extraction_start_time: {
319
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
320
+ value: '2024-06-01T00:00:00Z',
321
+ },
322
+ extraction_end_time: {
323
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
324
+ value: '2024-06-01T00:00:00Z',
325
+ },
326
+ },
327
+ });
328
+ const stringifiedState = JSON.stringify({
329
+ snapInVersionId: 'test_snap_in_version_id',
330
+ });
331
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
332
+ jest.spyOn(console, 'log').mockImplementation(() => { });
333
+ jest.spyOn(console, 'error').mockImplementation(() => { });
334
+ // Act & Assert
335
+ await expect((0, state_1.createAdapterState)({
336
+ event,
337
+ initialState: {},
338
+ initialDomainMapping: {},
339
+ })).rejects.toThrow('process.exit called');
340
+ expect(processExitSpy).toHaveBeenCalledWith(1);
341
+ });
342
+ it('should not exit when extract_from < extract_to', async () => {
343
+ // Arrange: valid window
344
+ const event = (0, test_helpers_1.createEvent)({
345
+ eventType: extraction_1.EventType.StartExtractingData,
346
+ eventContextOverrides: {
347
+ extraction_start_time: {
348
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
349
+ value: '2024-01-01T00:00:00Z',
350
+ },
351
+ extraction_end_time: {
352
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
353
+ value: '2025-06-01T00:00:00Z',
354
+ },
355
+ },
356
+ });
357
+ const stringifiedState = JSON.stringify({
358
+ snapInVersionId: 'test_snap_in_version_id',
359
+ });
360
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
361
+ jest.spyOn(console, 'log').mockImplementation(() => { });
362
+ // Act
363
+ await (0, state_1.createAdapterState)({
364
+ event,
365
+ initialState: {},
366
+ initialDomainMapping: {},
367
+ });
368
+ // Assert: process.exit should NOT have been called
369
+ expect(processExitSpy).not.toHaveBeenCalled();
370
+ });
371
+ it('should not validate when only extract_from is set', async () => {
372
+ // Arrange: only start, no end
373
+ const event = (0, test_helpers_1.createEvent)({
374
+ eventType: extraction_1.EventType.StartExtractingData,
375
+ eventContextOverrides: {
376
+ extraction_start_time: {
377
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
378
+ value: '2024-01-01T00:00:00Z',
379
+ },
380
+ },
381
+ });
382
+ const stringifiedState = JSON.stringify({
383
+ snapInVersionId: 'test_snap_in_version_id',
384
+ });
385
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
386
+ jest.spyOn(console, 'log').mockImplementation(() => { });
387
+ // Act
388
+ await (0, state_1.createAdapterState)({
389
+ event,
390
+ initialState: {},
391
+ initialDomainMapping: {},
392
+ });
393
+ // Assert: process.exit should NOT have been called
394
+ expect(processExitSpy).not.toHaveBeenCalled();
395
+ });
396
+ it('should not exit when extract_from is UNBOUNDED and extract_to is a real timestamp', async () => {
397
+ // Arrange: UNBOUNDED start (epoch) with a real ABSOLUTE end timestamp
398
+ const event = (0, test_helpers_1.createEvent)({
399
+ eventType: extraction_1.EventType.StartExtractingData,
400
+ eventContextOverrides: {
401
+ extraction_start_time: {
402
+ type: extraction_1.TimeValueType.UNBOUNDED,
403
+ },
404
+ extraction_end_time: {
405
+ type: extraction_1.TimeValueType.ABSOLUTE_TIME,
406
+ value: '2025-06-01T00:00:00Z',
407
+ },
408
+ },
409
+ });
410
+ const stringifiedState = JSON.stringify({
411
+ snapInVersionId: 'test_snap_in_version_id',
412
+ });
413
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
414
+ jest.spyOn(console, 'log').mockImplementation(() => { });
415
+ // Act
416
+ await (0, state_1.createAdapterState)({
417
+ event,
418
+ initialState: {},
419
+ initialDomainMapping: {},
420
+ });
421
+ // Assert: process.exit should NOT have been called
422
+ expect(processExitSpy).not.toHaveBeenCalled();
423
+ });
424
+ });
425
+ describe('Pending extraction boundaries (pendingWorkersOldest/pendingWorkersNewest)', () => {
426
+ const FIXED_NOW = '2026-03-26T10:00:00.000Z';
427
+ beforeEach(() => {
428
+ jest.useFakeTimers();
429
+ jest.setSystemTime(new Date(FIXED_NOW));
430
+ });
431
+ afterEach(() => {
432
+ jest.useRealTimers();
433
+ });
434
+ it('should store resolved values in pendingWorkersOldest/pendingWorkersNewest on StartExtractingData', async () => {
435
+ // Arrange
436
+ const event = (0, test_helpers_1.createEvent)({
437
+ eventType: extraction_1.EventType.StartExtractingData,
438
+ eventContextOverrides: {
439
+ extraction_start_time: {
440
+ type: extraction_1.TimeValueType.UNBOUNDED,
441
+ },
442
+ extraction_end_time: {
443
+ type: extraction_1.TimeValueType.CURRENT_TIME,
444
+ },
445
+ },
446
+ contextOverrides: {
447
+ snap_in_version_id: '',
448
+ },
449
+ });
450
+ fetchStateSpy.mockRejectedValue({
451
+ isAxiosError: true,
452
+ response: { status: 404 },
453
+ });
454
+ installInitialDomainMappingSpy.mockResolvedValue({ success: true });
455
+ postStateSpy.mockResolvedValue({ success: true });
456
+ jest.spyOn(console, 'log').mockImplementation(() => { });
457
+ // Act
458
+ const state = await (0, state_1.createAdapterState)({
459
+ event,
460
+ initialState: {},
461
+ initialDomainMapping: {},
462
+ });
463
+ // Assert
464
+ expect(state.state.pendingWorkersOldest).toBe('1970-01-01T00:00:00.000Z');
465
+ expect(state.state.pendingWorkersNewest).toBe(FIXED_NOW);
466
+ expect(event.payload.event_context.extract_from).toBe('1970-01-01T00:00:00.000Z');
467
+ expect(event.payload.event_context.extract_to).toBe(FIXED_NOW);
468
+ });
469
+ it('should overwrite pending values on a retry (new StartExtractingData after failure)', async () => {
470
+ // Arrange: state has stale pending values from a previous failed attempt
471
+ const staleOldest = '2026-03-25T08:00:00.000Z';
472
+ const staleNewest = '2026-03-25T09:00:00.000Z';
473
+ const event = (0, test_helpers_1.createEvent)({
474
+ eventType: extraction_1.EventType.StartExtractingData,
475
+ eventContextOverrides: {
476
+ extraction_start_time: {
477
+ type: extraction_1.TimeValueType.UNBOUNDED,
478
+ },
479
+ extraction_end_time: {
480
+ type: extraction_1.TimeValueType.CURRENT_TIME,
481
+ },
482
+ },
483
+ contextOverrides: {
484
+ snap_in_version_id: 'test_snap_in_version_id',
485
+ },
486
+ });
487
+ const stringifiedState = JSON.stringify({
488
+ snapInVersionId: 'test_snap_in_version_id',
489
+ pendingWorkersOldest: staleOldest,
490
+ pendingWorkersNewest: staleNewest,
491
+ });
492
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
493
+ jest.spyOn(console, 'log').mockImplementation(() => { });
494
+ // Act
495
+ const state = await (0, state_1.createAdapterState)({
496
+ event,
497
+ initialState: {},
498
+ initialDomainMapping: {},
499
+ });
500
+ // Assert: pending values are overwritten with fresh resolution, not stale values
501
+ expect(state.state.pendingWorkersOldest).toBe('1970-01-01T00:00:00.000Z');
502
+ expect(state.state.pendingWorkersNewest).toBe(FIXED_NOW);
503
+ expect(state.state.pendingWorkersNewest).not.toBe(staleNewest);
504
+ });
505
+ it('should reuse pending values from state on ContinueExtractingData instead of re-resolving', async () => {
506
+ // Arrange: state has pending values from a prior StartExtractingData phase
507
+ const pendingOldest = '1970-01-01T00:00:00.000Z';
508
+ const pendingNewest = '2026-03-26T08:00:00.000Z'; // Earlier than FIXED_NOW
509
+ const event = (0, test_helpers_1.createEvent)({
510
+ eventType: extraction_1.EventType.ContinueExtractingData,
511
+ eventContextOverrides: {
512
+ // Platform still sends TimeValue objects, but they should be ignored
513
+ extraction_start_time: {
514
+ type: extraction_1.TimeValueType.CURRENT_TIME,
515
+ },
516
+ extraction_end_time: {
517
+ type: extraction_1.TimeValueType.CURRENT_TIME,
518
+ },
519
+ },
520
+ contextOverrides: {
521
+ snap_in_version_id: 'test_snap_in_version_id',
522
+ },
523
+ });
524
+ const stringifiedState = JSON.stringify({
525
+ snapInVersionId: 'test_snap_in_version_id',
526
+ pendingWorkersOldest: pendingOldest,
527
+ pendingWorkersNewest: pendingNewest,
528
+ });
529
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
530
+ jest.spyOn(console, 'log').mockImplementation(() => { });
531
+ // Act
532
+ const state = await (0, state_1.createAdapterState)({
533
+ event,
534
+ initialState: {},
535
+ initialDomainMapping: {},
536
+ });
537
+ // Assert: uses cached pending values, NOT new Date() resolution
538
+ expect(event.payload.event_context.extract_from).toBe(pendingOldest);
539
+ expect(event.payload.event_context.extract_to).toBe(pendingNewest);
540
+ // Pending values in state remain unchanged
541
+ expect(state.state.pendingWorkersOldest).toBe(pendingOldest);
542
+ expect(state.state.pendingWorkersNewest).toBe(pendingNewest);
543
+ });
544
+ it('should not set extract_from/extract_to on ContinueExtractingData if no pending values exist', async () => {
545
+ // Arrange: state has no pending values (e.g. old state from before this feature)
546
+ const event = (0, test_helpers_1.createEvent)({
547
+ eventType: extraction_1.EventType.ContinueExtractingData,
548
+ contextOverrides: {
549
+ snap_in_version_id: 'test_snap_in_version_id',
550
+ },
551
+ });
552
+ const stringifiedState = JSON.stringify({
553
+ snapInVersionId: 'test_snap_in_version_id',
554
+ });
555
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
556
+ jest.spyOn(console, 'log').mockImplementation(() => { });
557
+ // Act
558
+ await (0, state_1.createAdapterState)({
559
+ event,
560
+ initialState: {},
561
+ initialDomainMapping: {},
562
+ });
563
+ // Assert: no extraction timestamps are set
564
+ expect(event.payload.event_context.extract_from).toBeUndefined();
565
+ expect(event.payload.event_context.extract_to).toBeUndefined();
566
+ });
567
+ it('should reuse pending values on StartExtractingAttachments', async () => {
568
+ // Arrange: state has pending values from the StartExtractingData phase
569
+ const pendingOldest = '1970-01-01T00:00:00.000Z';
570
+ const pendingNewest = '2026-03-26T08:00:00.000Z';
571
+ const event = (0, test_helpers_1.createEvent)({
572
+ eventType: extraction_1.EventType.StartExtractingAttachments,
573
+ contextOverrides: {
574
+ snap_in_version_id: 'test_snap_in_version_id',
575
+ },
576
+ });
577
+ const stringifiedState = JSON.stringify({
578
+ snapInVersionId: 'test_snap_in_version_id',
579
+ pendingWorkersOldest: pendingOldest,
580
+ pendingWorkersNewest: pendingNewest,
581
+ });
582
+ fetchStateSpy.mockResolvedValue({ state: stringifiedState });
583
+ jest.spyOn(console, 'log').mockImplementation(() => { });
584
+ // Act
585
+ await (0, state_1.createAdapterState)({
586
+ event,
587
+ initialState: {},
588
+ initialDomainMapping: {},
589
+ });
590
+ // Assert: pending values are reused
591
+ expect(event.payload.event_context.extract_from).toBe(pendingOldest);
592
+ expect(event.payload.event_context.extract_to).toBe(pendingNewest);
593
+ });
594
+ });
226
595
  it('should populate extractionScope from API response', async () => {
227
596
  // Arrange
228
597
  const event = (0, test_helpers_1.createEvent)({
@@ -172,6 +172,57 @@ export declare enum InitialSyncScope {
172
172
  FULL_HISTORY = "full-history",
173
173
  TIME_SCOPED = "time-scoped"
174
174
  }
175
+ /**
176
+ * TimeUnit is an enum that defines the supported Go duration units for time window calculations.
177
+ * These correspond directly to Go's time.ParseDuration units.
178
+ */
179
+ export declare enum TimeUnit {
180
+ /** Nanoseconds */
181
+ NANOSECONDS = "ns",
182
+ /** Microseconds (ASCII alias) */
183
+ MICROSECONDS = "us",
184
+ /** Microseconds (Unicode alias) */
185
+ MICROSECONDS_MU = "\u00B5s",
186
+ /** Milliseconds */
187
+ MILLISECONDS = "ms",
188
+ /** Seconds */
189
+ SECONDS = "s",
190
+ /** Minutes */
191
+ MINUTES = "m",
192
+ /** Hours */
193
+ HOURS = "h"
194
+ }
195
+ /**
196
+ * TimeValueType is an enum that defines the type of a time value used in extraction start/end times.
197
+ * The platform sends these types to indicate how the extraction time should be resolved by the SDK.
198
+ */
199
+ export declare enum TimeValueType {
200
+ /** Oldest timestamp from worker state */
201
+ WORKERS_OLDEST = "workers_oldest",
202
+ /** Oldest timestamp from worker state minus a duration window */
203
+ WORKERS_OLDEST_MINUS_WINDOW = "workers_oldest_minus_window",
204
+ /** Newest timestamp from worker state */
205
+ WORKERS_NEWEST = "workers_newest",
206
+ /** Newest timestamp from worker state plus a duration window */
207
+ WORKERS_NEWEST_PLUS_WINDOW = "workers_newest_plus_window",
208
+ /** Current time */
209
+ CURRENT_TIME = "current_time",
210
+ /** User-specified absolute timestamp */
211
+ ABSOLUTE_TIME = "absolute_time",
212
+ /** No bound - extract all available data */
213
+ UNBOUNDED = "unbounded"
214
+ }
215
+ /**
216
+ * TimeValue is an interface that represents a time value used in extraction start/end times.
217
+ * It contains a type (which denotes how the value should be resolved) and an optional value.
218
+ * - For ABSOLUTE: value is an ISO 8601 timestamp
219
+ * - For *_WINDOW types: value is a Go duration string (e.g. '500ms', '30s', '5m', '2h')
220
+ * - For other types: value is not used
221
+ */
222
+ export interface TimeValue {
223
+ type: TimeValueType;
224
+ value?: string;
225
+ }
175
226
  /**
176
227
  * EventContextIn is an interface that defines the structure of the input event context that is sent to the external extractor from ADaaS.
177
228
  * @deprecated
@@ -242,6 +293,11 @@ export interface EventContext {
242
293
  external_system_id: string;
243
294
  external_system_name: string;
244
295
  external_system_type: string;
296
+ /**
297
+ * Resolved start timestamp of extraction (ISO 8601 format).
298
+ * Automatically computed by the SDK from extraction_start_time and worker state.
299
+ * This is the field developers should read to know when to start extracting from.
300
+ */
245
301
  extract_from?: string;
246
302
  import_slug: string;
247
303
  initial_sync_scope?: InitialSyncScope;
@@ -249,9 +305,13 @@ export interface EventContext {
249
305
  request_id: string;
250
306
  request_id_adaas: string;
251
307
  /**
252
- * @deprecated reset_extraction is deprecated and should not be used. Use reset_extract_from instead.
308
+ * @deprecated reset_extraction is deprecated and should not be used.
253
309
  */
254
310
  reset_extraction?: boolean;
311
+ /**
312
+ * @deprecated reset_extract_from is deprecated. Use extraction_start_time/extraction_end_time instead,
313
+ * which are automatically resolved into extract_from and extract_to.
314
+ */
255
315
  reset_extract_from?: boolean;
256
316
  run_id: string;
257
317
  sequence_version: string;
@@ -273,6 +333,22 @@ export interface EventContext {
273
333
  */
274
334
  uuid: string;
275
335
  worker_data_url: string;
336
+ /**
337
+ * Start time value for extraction, as sent by the platform.
338
+ * The SDK resolves this into a concrete ISO 8601 timestamp on extract_from.
339
+ */
340
+ extraction_start_time?: TimeValue;
341
+ /**
342
+ * End time value for extraction, as sent by the platform.
343
+ * The SDK resolves this into a concrete ISO 8601 timestamp on extract_to.
344
+ */
345
+ extraction_end_time?: TimeValue;
346
+ /**
347
+ * Resolved end timestamp of extraction (ISO 8601 format).
348
+ * Automatically computed by the SDK from extraction_end_time and worker state.
349
+ * This is the field developers should read to know when to stop extracting at.
350
+ */
351
+ extract_to?: string;
276
352
  }
277
353
  /**
278
354
  * ConnectionData is an interface that defines the structure of the connection data that is sent to the external extractor from ADaaS.
@@ -1 +1 @@
1
- {"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/types/extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"extraction.d.ts","sourceRoot":"","sources":["../../src/types/extraction.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.InitialSyncScope = exports.ExtractionMode = exports.ExtractorEventType = exports.EventType = void 0;
3
+ exports.TimeValueType = exports.TimeUnit = exports.InitialSyncScope = exports.ExtractionMode = exports.ExtractorEventType = exports.EventType = void 0;
4
4
  /**
5
5
  * EventType is an enum that defines the different types of events that can be sent to the external extractor from ADaaS.
6
6
  * The external extractor can use these events to know what to do next in the extraction process.
@@ -168,3 +168,45 @@ var InitialSyncScope;
168
168
  InitialSyncScope["FULL_HISTORY"] = "full-history";
169
169
  InitialSyncScope["TIME_SCOPED"] = "time-scoped";
170
170
  })(InitialSyncScope || (exports.InitialSyncScope = InitialSyncScope = {}));
171
+ /**
172
+ * TimeUnit is an enum that defines the supported Go duration units for time window calculations.
173
+ * These correspond directly to Go's time.ParseDuration units.
174
+ */
175
+ var TimeUnit;
176
+ (function (TimeUnit) {
177
+ /** Nanoseconds */
178
+ TimeUnit["NANOSECONDS"] = "ns";
179
+ /** Microseconds (ASCII alias) */
180
+ TimeUnit["MICROSECONDS"] = "us";
181
+ /** Microseconds (Unicode alias) */
182
+ TimeUnit["MICROSECONDS_MU"] = "\u00B5s";
183
+ /** Milliseconds */
184
+ TimeUnit["MILLISECONDS"] = "ms";
185
+ /** Seconds */
186
+ TimeUnit["SECONDS"] = "s";
187
+ /** Minutes */
188
+ TimeUnit["MINUTES"] = "m";
189
+ /** Hours */
190
+ TimeUnit["HOURS"] = "h";
191
+ })(TimeUnit || (exports.TimeUnit = TimeUnit = {}));
192
+ /**
193
+ * TimeValueType is an enum that defines the type of a time value used in extraction start/end times.
194
+ * The platform sends these types to indicate how the extraction time should be resolved by the SDK.
195
+ */
196
+ var TimeValueType;
197
+ (function (TimeValueType) {
198
+ /** Oldest timestamp from worker state */
199
+ TimeValueType["WORKERS_OLDEST"] = "workers_oldest";
200
+ /** Oldest timestamp from worker state minus a duration window */
201
+ TimeValueType["WORKERS_OLDEST_MINUS_WINDOW"] = "workers_oldest_minus_window";
202
+ /** Newest timestamp from worker state */
203
+ TimeValueType["WORKERS_NEWEST"] = "workers_newest";
204
+ /** Newest timestamp from worker state plus a duration window */
205
+ TimeValueType["WORKERS_NEWEST_PLUS_WINDOW"] = "workers_newest_plus_window";
206
+ /** Current time */
207
+ TimeValueType["CURRENT_TIME"] = "current_time";
208
+ /** User-specified absolute timestamp */
209
+ TimeValueType["ABSOLUTE_TIME"] = "absolute_time";
210
+ /** No bound - extract all available data */
211
+ TimeValueType["UNBOUNDED"] = "unbounded";
212
+ })(TimeValueType || (exports.TimeValueType = TimeValueType = {}));