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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/README.md +0 -4
  2. package/dist/airsync-sdk.d.ts +2059 -0
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +2 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +8 -2
  6. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  7. package/dist/attachments-streaming/attachments-streaming-pool.js +27 -16
  8. package/dist/attachments-streaming/attachments-streaming-pool.test.js +246 -27
  9. package/dist/common/constants.d.ts +16 -5
  10. package/dist/common/constants.d.ts.map +1 -1
  11. package/dist/common/constants.js +20 -6
  12. package/dist/common/control-protocol.d.ts +2 -2
  13. package/dist/common/control-protocol.d.ts.map +1 -1
  14. package/dist/common/control-protocol.js +1 -5
  15. package/dist/common/helpers.d.ts +8 -0
  16. package/dist/common/helpers.d.ts.map +1 -1
  17. package/dist/common/helpers.js +15 -0
  18. package/dist/common/install-initial-domain-mapping.d.ts +2 -2
  19. package/dist/common/install-initial-domain-mapping.test.js +5 -2
  20. package/dist/common/test-utils.d.ts +19 -0
  21. package/dist/common/test-utils.d.ts.map +1 -0
  22. package/dist/common/test-utils.js +101 -0
  23. package/dist/common/time-value-resolver.d.ts +47 -0
  24. package/dist/common/time-value-resolver.d.ts.map +1 -0
  25. package/dist/common/time-value-resolver.js +141 -0
  26. package/dist/common/time-value-resolver.test.d.ts +2 -0
  27. package/dist/common/time-value-resolver.test.d.ts.map +1 -0
  28. package/dist/common/time-value-resolver.test.js +268 -0
  29. package/dist/http/axios-client-internal.d.ts.map +1 -1
  30. package/dist/http/axios-client-internal.js +7 -0
  31. package/dist/http/axios-client-internal.test.js +21 -0
  32. package/dist/http/axios-client.d.ts.map +1 -1
  33. package/dist/http/axios-client.js +6 -3
  34. package/dist/http/index.d.ts +0 -1
  35. package/dist/http/index.d.ts.map +1 -1
  36. package/dist/http/index.js +0 -1
  37. package/dist/index.d.ts +12 -10
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +18 -13
  40. package/dist/logger/logger.d.ts +1 -17
  41. package/dist/logger/logger.d.ts.map +1 -1
  42. package/dist/logger/logger.interfaces.d.ts +2 -2
  43. package/dist/logger/logger.js +35 -27
  44. package/dist/logger/logger.test.js +66 -19
  45. package/dist/mappers/mappers.interface.d.ts +5 -5
  46. package/dist/mappers/mappers.interface.js +3 -3
  47. package/dist/mappers/mappers.test.js +8 -10
  48. package/dist/mock-server/mock-server.d.ts +47 -0
  49. package/dist/mock-server/mock-server.d.ts.map +1 -0
  50. package/dist/mock-server/mock-server.interfaces.d.ts +73 -0
  51. package/dist/mock-server/mock-server.interfaces.d.ts.map +1 -0
  52. package/dist/mock-server/mock-server.interfaces.js +4 -0
  53. package/dist/mock-server/mock-server.js +278 -0
  54. package/dist/multithreading/adapters/base-adapter.d.ts +56 -0
  55. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  56. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts +2 -0
  57. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts.map +1 -0
  58. package/dist/multithreading/adapters/base-adapter.emit.test.js +403 -0
  59. package/dist/multithreading/adapters/base-adapter.js +105 -0
  60. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts +2 -0
  61. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts.map +1 -0
  62. package/dist/multithreading/{worker-adapter/worker-adapter.artifacts.test.js → adapters/extraction-adapter.artifacts.test.js} +53 -5
  63. package/dist/multithreading/adapters/extraction-adapter.d.ts +58 -0
  64. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  65. package/dist/multithreading/adapters/extraction-adapter.js +325 -0
  66. package/dist/multithreading/adapters/extraction-adapter.test.d.ts +2 -0
  67. package/dist/multithreading/adapters/extraction-adapter.test.d.ts.map +1 -0
  68. package/dist/multithreading/adapters/extraction-adapter.test.js +789 -0
  69. package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
  70. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  71. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
  72. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  73. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts +2 -0
  74. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts.map +1 -0
  75. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.test.js → adapters/loading-adapter.helpers.test.js} +26 -26
  76. package/dist/multithreading/adapters/loading-adapter.js +461 -0
  77. package/dist/multithreading/adapters/loading-adapter.test.d.ts +2 -0
  78. package/dist/multithreading/adapters/loading-adapter.test.d.ts.map +1 -0
  79. package/dist/multithreading/adapters/loading-adapter.test.js +589 -0
  80. package/dist/multithreading/adapters/serialization.test.d.ts +2 -0
  81. package/dist/multithreading/adapters/serialization.test.d.ts.map +1 -0
  82. package/dist/multithreading/adapters/serialization.test.js +71 -0
  83. package/dist/multithreading/create-worker.test.js +36 -17
  84. package/dist/multithreading/process-task.d.ts +16 -1
  85. package/dist/multithreading/process-task.d.ts.map +1 -1
  86. package/dist/multithreading/process-task.js +97 -82
  87. package/dist/multithreading/process-task.test.d.ts +2 -0
  88. package/dist/multithreading/process-task.test.d.ts.map +1 -0
  89. package/dist/multithreading/process-task.test.js +146 -0
  90. package/dist/multithreading/spawn/spawn.d.ts +3 -3
  91. package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
  92. package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
  93. package/dist/multithreading/spawn/spawn.helpers.js +6 -14
  94. package/dist/multithreading/spawn/spawn.helpers.test.js +8 -8
  95. package/dist/multithreading/spawn/spawn.js +20 -25
  96. package/dist/multithreading/spawn/spawn.test.d.ts +2 -0
  97. package/dist/multithreading/spawn/spawn.test.d.ts.map +1 -0
  98. package/dist/multithreading/spawn/spawn.test.js +232 -0
  99. package/dist/repo/repo.d.ts.map +1 -1
  100. package/dist/repo/repo.interfaces.d.ts +4 -2
  101. package/dist/repo/repo.interfaces.d.ts.map +1 -1
  102. package/dist/repo/repo.js +4 -3
  103. package/dist/repo/repo.test.js +60 -7
  104. package/dist/state/base-state.d.ts +75 -0
  105. package/dist/state/base-state.d.ts.map +1 -0
  106. package/dist/state/base-state.js +261 -0
  107. package/dist/state/extraction-state.d.ts +29 -0
  108. package/dist/state/extraction-state.d.ts.map +1 -0
  109. package/dist/state/extraction-state.js +122 -0
  110. package/dist/state/loading-state.d.ts +19 -0
  111. package/dist/state/loading-state.d.ts.map +1 -0
  112. package/dist/state/loading-state.js +40 -0
  113. package/dist/state/state.extract-window.test.d.ts +2 -0
  114. package/dist/state/state.extract-window.test.d.ts.map +1 -0
  115. package/dist/state/state.extract-window.test.js +163 -0
  116. package/dist/state/state.interfaces.d.ts +44 -27
  117. package/dist/state/state.interfaces.d.ts.map +1 -1
  118. package/dist/state/state.interfaces.js +18 -5
  119. package/dist/state/state.pending-boundaries.test.d.ts +2 -0
  120. package/dist/state/state.pending-boundaries.test.d.ts.map +1 -0
  121. package/dist/state/state.pending-boundaries.test.js +189 -0
  122. package/dist/state/state.post-state.test.d.ts +2 -0
  123. package/dist/state/state.post-state.test.d.ts.map +1 -0
  124. package/dist/state/state.post-state.test.js +78 -0
  125. package/dist/state/state.test.js +135 -88
  126. package/dist/state/state.time-value-resolution.test.d.ts +2 -0
  127. package/dist/state/state.time-value-resolution.test.d.ts.map +1 -0
  128. package/dist/state/state.time-value-resolution.test.js +175 -0
  129. package/dist/tsdoc-metadata.json +11 -0
  130. package/dist/types/common.d.ts +0 -25
  131. package/dist/types/common.d.ts.map +1 -1
  132. package/dist/types/common.js +1 -11
  133. package/dist/types/external-domain-metadata.d.ts +20 -1
  134. package/dist/types/external-domain-metadata.d.ts.map +1 -1
  135. package/dist/types/extraction.d.ts +92 -221
  136. package/dist/types/extraction.d.ts.map +1 -1
  137. package/dist/types/extraction.js +56 -124
  138. package/dist/types/extraction.test.js +69 -43
  139. package/dist/types/index.d.ts +3 -3
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/dist/types/index.js +6 -3
  142. package/dist/types/loading.d.ts +4 -24
  143. package/dist/types/loading.d.ts.map +1 -1
  144. package/dist/types/loading.js +1 -22
  145. package/dist/types/workers.d.ts +47 -29
  146. package/dist/types/workers.d.ts.map +1 -1
  147. package/dist/types/workers.js +1 -0
  148. package/dist/uploader/uploader.d.ts +1 -0
  149. package/dist/uploader/uploader.d.ts.map +1 -1
  150. package/dist/uploader/uploader.helpers.test.js +0 -11
  151. package/dist/uploader/uploader.interfaces.d.ts +3 -3
  152. package/dist/uploader/uploader.js +53 -20
  153. package/dist/uploader/uploader.test.js +22 -10
  154. package/package.json +10 -13
  155. package/dist/common/event-type-translation.d.ts +0 -24
  156. package/dist/common/event-type-translation.d.ts.map +0 -1
  157. package/dist/common/event-type-translation.js +0 -117
  158. package/dist/deprecated/adapter/index.d.ts +0 -62
  159. package/dist/deprecated/adapter/index.d.ts.map +0 -1
  160. package/dist/deprecated/adapter/index.js +0 -151
  161. package/dist/deprecated/common/helpers.d.ts +0 -7
  162. package/dist/deprecated/common/helpers.d.ts.map +0 -1
  163. package/dist/deprecated/common/helpers.js +0 -47
  164. package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
  165. package/dist/deprecated/demo-extractor/index.d.ts +0 -18
  166. package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
  167. package/dist/deprecated/demo-extractor/index.js +0 -161
  168. package/dist/deprecated/http/client.d.ts +0 -22
  169. package/dist/deprecated/http/client.d.ts.map +0 -1
  170. package/dist/deprecated/http/client.js +0 -161
  171. package/dist/deprecated/uploader/index.d.ts +0 -35
  172. package/dist/deprecated/uploader/index.d.ts.map +0 -1
  173. package/dist/deprecated/uploader/index.js +0 -161
  174. package/dist/http/types.d.ts +0 -17
  175. package/dist/http/types.d.ts.map +0 -1
  176. package/dist/http/types.js +0 -2
  177. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  178. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  179. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
  180. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  181. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  182. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  183. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  184. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -745
  185. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
  186. package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
  187. package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
  188. package/dist/state/state.d.ts +0 -30
  189. package/dist/state/state.d.ts.map +0 -1
  190. package/dist/state/state.js +0 -166
  191. /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_SLEEP_DELAY_MS = exports.MEMORY_LOG_INTERVAL = exports.HARD_TIMEOUT_MULTIPLIER = exports.DEFAULT_LAMBDA_TIMEOUT = exports.LIBRARY_VERSION = exports.AIRDROP_DEFAULT_ITEM_TYPES = exports.MAX_DEVREV_FILENAME_EXTENSION_LENGTH = exports.MAX_DEVREV_FILENAME_LENGTH = exports.MAX_DEVREV_ARTIFACT_SIZE = exports.ARTIFACT_BATCH_SIZE = exports.STATEFUL_EVENT_TYPES = exports.STATEFUL_LOADING_EVENT_TYPES = exports.STATEFUL_EXTRACTION_EVENT_TYPES = exports.STATELESS_EVENT_TYPES = exports.STATELESS_LOADING_EVENT_TYPES = exports.STATELESS_EXTRACTION_EVENT_TYPES = exports.ALLOWED_EVENT_TYPES = exports.ALLOWED_LOADING_EVENT_TYPES = exports.ALLOWED_EXTRACTION_EVENT_TYPES = void 0;
3
+ exports.UNBOUNDED_DATE_TIME_VALUE = exports.DEFAULT_SLEEP_DELAY_MS = exports.MEMORY_LOG_INTERVAL = exports.HARD_TIMEOUT_MULTIPLIER = exports.DEFAULT_LAMBDA_TIMEOUT = exports.LIBRARY_VERSION = exports.AirSyncDefaultItemTypes = exports.SSOR_ATTACHMENT = exports.EVENT_SIZE_THRESHOLD_BYTES = exports.MAX_EVENT_SIZE_BYTES = exports.MAX_DEVREV_FILENAME_EXTENSION_LENGTH = exports.MAX_DEVREV_FILENAME_LENGTH = exports.MAX_DEVREV_ARTIFACT_SIZE = exports.ARTIFACT_BATCH_SIZE = exports.STATEFUL_EVENT_TYPES = exports.STATEFUL_LOADING_EVENT_TYPES = exports.STATEFUL_EXTRACTION_EVENT_TYPES = exports.STATELESS_EVENT_TYPES = exports.STATELESS_LOADING_EVENT_TYPES = exports.STATELESS_EXTRACTION_EVENT_TYPES = exports.ALLOWED_EVENT_TYPES = exports.ALLOWED_LOADING_EVENT_TYPES = exports.ALLOWED_EXTRACTION_EVENT_TYPES = void 0;
4
4
  const extraction_1 = require("../types/extraction");
5
5
  const helpers_1 = require("./helpers");
6
6
  exports.ALLOWED_EXTRACTION_EVENT_TYPES = [
@@ -46,13 +46,27 @@ exports.ARTIFACT_BATCH_SIZE = 2000;
46
46
  exports.MAX_DEVREV_ARTIFACT_SIZE = 2 * 1024 * 1024 * 1024; // 2GB
47
47
  exports.MAX_DEVREV_FILENAME_LENGTH = 256;
48
48
  exports.MAX_DEVREV_FILENAME_EXTENSION_LENGTH = 20; // 20 characters for the file extension
49
- exports.AIRDROP_DEFAULT_ITEM_TYPES = {
50
- EXTERNAL_DOMAIN_METADATA: 'external_domain_metadata',
51
- ATTACHMENTS: 'attachments',
52
- SSOR_ATTACHMENT: 'ssor_attachment',
53
- };
49
+ // Max SQS message size is 250KB, we want to leave some room for the other data in the message
50
+ exports.MAX_EVENT_SIZE_BYTES = 200000;
51
+ // We want to leave some room for the other data in the message and process the rest of queued messages
52
+ exports.EVENT_SIZE_THRESHOLD_BYTES = Math.floor(exports.MAX_EVENT_SIZE_BYTES * 0.8);
53
+ exports.SSOR_ATTACHMENT = 'ssor_attachment';
54
+ var AirSyncDefaultItemTypes;
55
+ (function (AirSyncDefaultItemTypes) {
56
+ AirSyncDefaultItemTypes["EXTERNAL_DOMAIN_METADATA"] = "external_domain_metadata";
57
+ AirSyncDefaultItemTypes["ATTACHMENTS"] = "attachments";
58
+ AirSyncDefaultItemTypes["EXTERNAL_SYNC_UNITS"] = "external_sync_units";
59
+ })(AirSyncDefaultItemTypes || (exports.AirSyncDefaultItemTypes = AirSyncDefaultItemTypes = {}));
54
60
  exports.LIBRARY_VERSION = (0, helpers_1.getLibraryVersion)();
55
61
  exports.DEFAULT_LAMBDA_TIMEOUT = 10 * 60 * 1000; // 10 minutes
56
62
  exports.HARD_TIMEOUT_MULTIPLIER = 1.3;
57
63
  exports.MEMORY_LOG_INTERVAL = 30 * 1000; // 30 seconds
58
64
  exports.DEFAULT_SLEEP_DELAY_MS = 3 * 60 * 1000; // 3 minutes
65
+ /**
66
+ * Sentinel value representing an unbounded (no limit) extraction timestamp.
67
+ * Used as the resolved value for TimeValueType.UNBOUNDED, stored as workersOldest
68
+ * when the initial import has no lower time bound. The Unix epoch ensures that
69
+ * no real extraction timestamp can be earlier, preventing accidental overwrites
70
+ * of the boundary by subsequent syncs (e.g. reconciliation with absolute dates).
71
+ */
72
+ exports.UNBOUNDED_DATE_TIME_VALUE = '1970-01-01T00:00:00.000Z';
@@ -1,8 +1,8 @@
1
1
  import { AxiosResponse } from 'axios';
2
- import { AirdropEvent, EventData, ExtractorEventType } from '../types/extraction';
2
+ import { AirSyncEvent, EventData, ExtractorEventType } from '../types/extraction';
3
3
  import { LoaderEventType } from '../types/loading';
4
4
  export interface EmitInterface {
5
- event: AirdropEvent;
5
+ event: AirSyncEvent;
6
6
  eventType: ExtractorEventType | LoaderEventType;
7
7
  data?: EventData;
8
8
  }
@@ -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,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"}
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;AAGnD,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,CA4BvC,CAAC"}
@@ -3,13 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.emit = void 0;
4
4
  const axios_client_internal_1 = require("../http/axios-client-internal");
5
5
  const constants_1 = require("./constants");
6
- const event_type_translation_1 = require("./event-type-translation");
7
6
  const emit = async ({ event, eventType, data, }) => {
8
- // Translate outgoing event type to ensure we always send new event types
9
- // TODO: Remove when the old types are completely phased out
10
- const translatedEventType = (0, event_type_translation_1.translateOutgoingEventType)(eventType);
11
7
  const newEvent = {
12
- event_type: translatedEventType,
8
+ event_type: eventType,
13
9
  event_context: event.payload.event_context,
14
10
  event_data: Object.assign({}, data),
15
11
  worker_metadata: {
@@ -38,4 +38,12 @@ export interface MemoryInfo {
38
38
  * @returns {MemoryInfo} The memory usage information
39
39
  */
40
40
  export declare function getMemoryUsage(): MemoryInfo;
41
+ /**
42
+ * Truncates a message if it exceeds the maximum allowed length.
43
+ * Adds a suffix indicating how many characters were omitted.
44
+ *
45
+ * @param message - The message to truncate
46
+ * @returns Truncated message or original if within limits
47
+ */
48
+ export declare function truncateMessage(message: string): string;
41
49
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/common/helpers.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAgB,iBAAiB,QAiBhC;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAGrC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAmD3C"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/common/helpers.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,iBAAiB,QAiBhC;AAED;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,MAAM,oBAGrC;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmBzD;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,UAAU,CAmD3C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOvD"}
@@ -37,10 +37,12 @@ exports.getLibraryVersion = getLibraryVersion;
37
37
  exports.sleep = sleep;
38
38
  exports.truncateFilename = truncateFilename;
39
39
  exports.getMemoryUsage = getMemoryUsage;
40
+ exports.truncateMessage = truncateMessage;
40
41
  const fs_1 = require("fs");
41
42
  const path = __importStar(require("path"));
42
43
  const v8 = __importStar(require("v8"));
43
44
  const constants_1 = require("./constants");
45
+ const logger_constants_1 = require("../logger/logger.constants");
44
46
  /**
45
47
  * Gets the library version from the package.json file.
46
48
  * @returns {string} The library version
@@ -122,3 +124,16 @@ function getMemoryUsage() {
122
124
  throw err;
123
125
  }
124
126
  }
127
+ /**
128
+ * Truncates a message if it exceeds the maximum allowed length.
129
+ * Adds a suffix indicating how many characters were omitted.
130
+ *
131
+ * @param message - The message to truncate
132
+ * @returns Truncated message or original if within limits
133
+ */
134
+ function truncateMessage(message) {
135
+ if (message.length > logger_constants_1.MAX_LOG_STRING_LENGTH) {
136
+ return `${message.substring(0, logger_constants_1.MAX_LOG_STRING_LENGTH)}... ${message.length - logger_constants_1.MAX_LOG_STRING_LENGTH} more characters`;
137
+ }
138
+ return message;
139
+ }
@@ -1,4 +1,4 @@
1
- import { AirdropEvent } from '../types/extraction';
1
+ import { AirSyncEvent } from '../types/extraction';
2
2
  import { InitialDomainMapping } from '../types/common';
3
- export declare function installInitialDomainMapping(event: AirdropEvent, initialDomainMappingJson: InitialDomainMapping): Promise<void>;
3
+ export declare function installInitialDomainMapping(event: AirSyncEvent, initialDomainMappingJson: InitialDomainMapping): Promise<void>;
4
4
  //# sourceMappingURL=install-initial-domain-mapping.d.ts.map
@@ -5,7 +5,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const axios_1 = __importDefault(require("axios"));
7
7
  const axios_client_internal_1 = require("../http/axios-client-internal");
8
- const test_helpers_1 = require("../tests/test-helpers");
8
+ const jest_setup_1 = require("../tests/jest.setup");
9
+ const test_utils_1 = require("./test-utils");
9
10
  const extraction_1 = require("../types/extraction");
10
11
  const install_initial_domain_mapping_1 = require("./install-initial-domain-mapping");
11
12
  // Mock dependencies
@@ -22,7 +23,9 @@ const mockAxiosClient = axios_client_internal_1.axiosClient;
22
23
  const mockIsAxiosError = axios_1.default.isAxiosError;
23
24
  describe(install_initial_domain_mapping_1.installInitialDomainMapping.name, () => {
24
25
  // Create mock objects
25
- const mockEvent = (0, test_helpers_1.createEvent)({ eventType: extraction_1.EventType.ExtractionDataStart });
26
+ const mockEvent = (0, test_utils_1.createMockEvent)(jest_setup_1.mockServer.baseUrl, {
27
+ payload: { event_type: extraction_1.EventType.StartExtractingData },
28
+ });
26
29
  const mockInitialDomainMapping = {
27
30
  starting_recipe_blueprint: {
28
31
  name: 'Test Recipe Blueprint',
@@ -0,0 +1,19 @@
1
+ import { AirSyncEvent } from '../types/extraction';
2
+ export declare const MOCK_SERVER_DEFAULT_URL = "http://localhost:0";
3
+ /**
4
+ * Recursively makes all properties of T optional.
5
+ */
6
+ export type DeepPartial<T> = {
7
+ [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P];
8
+ };
9
+ /**
10
+ * Creates a mock AirSyncEvent for testing.
11
+ *
12
+ * @param mockServerUrl - Base URL for the mock server. Defaults to {@link MOCK_SERVER_DEFAULT_URL}.
13
+ * The `callback_url`, `worker_data_url`, and `devrev_endpoint` fields are
14
+ * derived from this value unless explicitly overridden.
15
+ * @param overrides - Deep partial of AirSyncEvent. Any provided fields are
16
+ * deep-merged on top of the defaults.
17
+ */
18
+ export declare function createMockEvent(mockServerUrl?: string, overrides?: DeepPartial<AirSyncEvent>): AirSyncEvent;
19
+ //# sourceMappingURL=test-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/common/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAa,MAAM,qBAAqB,CAAC;AAE9D,eAAO,MAAM,uBAAuB,uBAAuB,CAAC;AAE5D;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAC;AAoCF;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,aAAa,GAAE,MAAgC,EAC/C,SAAS,GAAE,WAAW,CAAC,YAAY,CAAM,GACxC,YAAY,CAmEd"}
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MOCK_SERVER_DEFAULT_URL = void 0;
4
+ exports.createMockEvent = createMockEvent;
5
+ const extraction_1 = require("../types/extraction");
6
+ exports.MOCK_SERVER_DEFAULT_URL = 'http://localhost:0';
7
+ /**
8
+ * Deep merges source into target. Arrays and primitives from source replace
9
+ * those in target; plain objects are merged recursively.
10
+ */
11
+ function deepMerge(target, source) {
12
+ const result = Object.assign({}, target);
13
+ for (const key of Object.keys(source)) {
14
+ const sourceVal = source[key];
15
+ const targetVal = target[key];
16
+ if (sourceVal !== null &&
17
+ typeof sourceVal === 'object' &&
18
+ !Array.isArray(sourceVal) &&
19
+ targetVal !== null &&
20
+ typeof targetVal === 'object' &&
21
+ !Array.isArray(targetVal)) {
22
+ result[key] = deepMerge(targetVal, sourceVal);
23
+ }
24
+ else {
25
+ result[key] = sourceVal;
26
+ }
27
+ }
28
+ return result;
29
+ }
30
+ /**
31
+ * Creates a mock AirSyncEvent for testing.
32
+ *
33
+ * @param mockServerUrl - Base URL for the mock server. Defaults to {@link MOCK_SERVER_DEFAULT_URL}.
34
+ * The `callback_url`, `worker_data_url`, and `devrev_endpoint` fields are
35
+ * derived from this value unless explicitly overridden.
36
+ * @param overrides - Deep partial of AirSyncEvent. Any provided fields are
37
+ * deep-merged on top of the defaults.
38
+ */
39
+ function createMockEvent(mockServerUrl = exports.MOCK_SERVER_DEFAULT_URL, overrides = {}) {
40
+ var _a, _b, _c, _d;
41
+ const base = {
42
+ context: {
43
+ secrets: {
44
+ service_account_token: 'test_token',
45
+ },
46
+ snap_in_version_id: 'test_snap_in_version_id',
47
+ snap_in_id: 'test_snap_in_id',
48
+ },
49
+ payload: {
50
+ connection_data: {
51
+ org_id: 'test_org_id',
52
+ org_name: 'test_org_name',
53
+ key: 'test_key',
54
+ key_type: 'test_key_type',
55
+ },
56
+ event_context: {
57
+ callback_url: `${mockServerUrl}/callback_url`,
58
+ dev_oid: 'test_dev_oid',
59
+ dev_org_id: 'test_dev_org_id',
60
+ dev_uid: 'test_dev_uid',
61
+ event_type_adaas: 'test_event_type_adaas',
62
+ external_sync_unit_id: 'test_external_sync_unit_id',
63
+ external_sync_unit_name: 'test_external_sync_unit_name',
64
+ external_system_id: 'test_external_system_id',
65
+ external_system_name: 'test_external_system_name',
66
+ external_system_type: 'test_external_system_type',
67
+ import_slug: 'test_import_slug',
68
+ mode: 'INITIAL',
69
+ request_id: 'test_request_id',
70
+ request_id_adaas: 'test_request_id_adaas',
71
+ run_id: 'test_run_id',
72
+ sequence_version: 'test_sequence_version',
73
+ snap_in_slug: 'test_snap_in_slug',
74
+ snap_in_version_id: 'test_snap_in_version_id',
75
+ sync_tier: 'test_sync_tier',
76
+ sync_unit: 'test_sync_unit',
77
+ sync_unit_id: 'test_sync_unit_id',
78
+ worker_data_url: `${mockServerUrl}/worker_data_url`,
79
+ },
80
+ event_type: extraction_1.EventType.StartExtractingData,
81
+ event_data: {},
82
+ },
83
+ execution_metadata: {
84
+ devrev_endpoint: mockServerUrl,
85
+ },
86
+ input_data: {
87
+ global_values: {},
88
+ event_sources: {},
89
+ },
90
+ };
91
+ const merged = deepMerge(base, overrides);
92
+ // Ensure mock server URLs always win over overrides, unless the caller
93
+ // explicitly provided them.
94
+ if (!((_b = (_a = overrides.payload) === null || _a === void 0 ? void 0 : _a.event_context) === null || _b === void 0 ? void 0 : _b.callback_url)) {
95
+ merged.payload.event_context.callback_url = `${mockServerUrl}/callback_url`;
96
+ }
97
+ if (!((_d = (_c = overrides.payload) === null || _c === void 0 ? void 0 : _c.event_context) === null || _d === void 0 ? void 0 : _d.worker_data_url)) {
98
+ merged.payload.event_context.worker_data_url = `${mockServerUrl}/worker_data_url`;
99
+ }
100
+ return merged;
101
+ }
@@ -0,0 +1,47 @@
1
+ import { TimeUnit, TimeValue } from '../types/extraction';
2
+ import { ExtractionSdkState } from '../state/state.interfaces';
3
+ /**
4
+ * Parses a shorthand duration string into its numeric value and unit.
5
+ * Supported units:
6
+ * - 'ns' for nanoseconds
7
+ * - 'us' or 'µs' for microseconds
8
+ * - 'ms' for milliseconds
9
+ * - 's' for seconds
10
+ * - 'm' for minutes
11
+ * - 'h' for hours
12
+ *
13
+ * @throws Error if the format is invalid
14
+ */
15
+ export declare function parseDuration(shorthand: string): {
16
+ value: number;
17
+ unit: TimeUnit;
18
+ };
19
+ /**
20
+ * Applies a shorthand duration to a base ISO 8601 timestamp.
21
+ *
22
+ * @param baseTimestamp - ISO 8601 timestamp to apply duration to
23
+ * @param duration - Shorthand duration string (e.g. '100ns', '500ms', '30s', '5m', '2h')
24
+ * @param operation - Whether to 'add' or 'subtract' the duration
25
+ * @returns ISO 8601 timestamp with the duration applied
26
+ */
27
+ export declare function applyDuration(baseTimestamp: string, duration: string, operation: 'add' | 'subtract'): string;
28
+ /**
29
+ * Resolves a TimeValue into a concrete ISO 8601 timestamp string.
30
+ *
31
+ * Resolution rules:
32
+ * - ABSOLUTE: Returns the value directly (must be an ISO 8601 timestamp)
33
+ * - NOW: Returns the current time as ISO 8601
34
+ * - UNBOUNDED: Returns UNBOUNDED_DATE_TIME_VALUE ('1970-01-01T00:00:00.000Z')
35
+ * - WORKERS_OLDEST: Returns workersOldest from state, or throws if not set
36
+ * - WORKERS_NEWEST: Returns workersNewest from state, or throws if not set
37
+ * - WORKERS_OLDEST_MINUS_WINDOW: Subtracts duration from workersOldest, or throws if not set
38
+ * - WORKERS_NEWEST_PLUS_WINDOW: Adds duration to workersNewest, or throws if not set
39
+ *
40
+ * @param timeValue - The TimeValue to resolve
41
+ * @param state - The current SDK state containing workersOldest and workersNewest
42
+ * @returns Resolved ISO 8601 timestamp string
43
+ * @throws Error if required TimeValue.value is missing for ABSOLUTE or *_WINDOW types
44
+ * @throws Error if workersOldest/workersNewest is not set in state for WORKERS_* types
45
+ */
46
+ export declare function resolveTimeValue(timeValue: TimeValue, state: ExtractionSdkState): string;
47
+ //# sourceMappingURL=time-value-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-value-resolver.d.ts","sourceRoot":"","sources":["../../src/common/time-value-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAiB,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,QAAQ,CAAC;CAChB,CAcA;AAED;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,KAAK,GAAG,UAAU,GAC5B,MAAM,CA6BR;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,kBAAkB,GACxB,MAAM,CA2ER"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseDuration = parseDuration;
4
+ exports.applyDuration = applyDuration;
5
+ exports.resolveTimeValue = resolveTimeValue;
6
+ const extraction_1 = require("../types/extraction");
7
+ const constants_1 = require("./constants");
8
+ /**
9
+ * Parses a shorthand duration string into its numeric value and unit.
10
+ * Supported units:
11
+ * - 'ns' for nanoseconds
12
+ * - 'us' or 'µs' for microseconds
13
+ * - 'ms' for milliseconds
14
+ * - 's' for seconds
15
+ * - 'm' for minutes
16
+ * - 'h' for hours
17
+ *
18
+ * @throws Error if the format is invalid
19
+ */
20
+ function parseDuration(shorthand) {
21
+ const validUnits = Object.values(extraction_1.TimeUnit).join('|');
22
+ const match = shorthand.match(new RegExp(`^(\\d+(?:\\.\\d+)?)(${validUnits})$`));
23
+ if (!match) {
24
+ throw new Error(`Invalid duration format: '${shorthand}'. Expected format like '100ns', '500ms', '30s', '5m', or '2h'.`);
25
+ }
26
+ return {
27
+ value: parseFloat(match[1]),
28
+ unit: match[2],
29
+ };
30
+ }
31
+ /**
32
+ * Applies a shorthand duration to a base ISO 8601 timestamp.
33
+ *
34
+ * @param baseTimestamp - ISO 8601 timestamp to apply duration to
35
+ * @param duration - Shorthand duration string (e.g. '100ns', '500ms', '30s', '5m', '2h')
36
+ * @param operation - Whether to 'add' or 'subtract' the duration
37
+ * @returns ISO 8601 timestamp with the duration applied
38
+ */
39
+ function applyDuration(baseTimestamp, duration, operation) {
40
+ const { value, unit } = parseDuration(duration);
41
+ const date = new Date(baseTimestamp);
42
+ const sign = operation === 'add' ? 1 : -1;
43
+ switch (unit) {
44
+ case extraction_1.TimeUnit.NANOSECONDS:
45
+ // JavaScript Date works in milliseconds, so convert nanoseconds
46
+ date.setTime(date.getTime() + sign * value * 0.000001);
47
+ break;
48
+ case extraction_1.TimeUnit.MICROSECONDS:
49
+ case extraction_1.TimeUnit.MICROSECONDS_MU:
50
+ date.setTime(date.getTime() + sign * value * 0.001);
51
+ break;
52
+ case extraction_1.TimeUnit.MILLISECONDS:
53
+ date.setTime(date.getTime() + sign * value);
54
+ break;
55
+ case extraction_1.TimeUnit.SECONDS:
56
+ date.setUTCSeconds(date.getUTCSeconds() + sign * value);
57
+ break;
58
+ case extraction_1.TimeUnit.MINUTES:
59
+ date.setUTCMinutes(date.getUTCMinutes() + sign * value);
60
+ break;
61
+ case extraction_1.TimeUnit.HOURS:
62
+ date.setUTCHours(date.getUTCHours() + sign * value);
63
+ break;
64
+ }
65
+ return date.toISOString();
66
+ }
67
+ /**
68
+ * Resolves a TimeValue into a concrete ISO 8601 timestamp string.
69
+ *
70
+ * Resolution rules:
71
+ * - ABSOLUTE: Returns the value directly (must be an ISO 8601 timestamp)
72
+ * - NOW: Returns the current time as ISO 8601
73
+ * - UNBOUNDED: Returns UNBOUNDED_DATE_TIME_VALUE ('1970-01-01T00:00:00.000Z')
74
+ * - WORKERS_OLDEST: Returns workersOldest from state, or throws if not set
75
+ * - WORKERS_NEWEST: Returns workersNewest from state, or throws if not set
76
+ * - WORKERS_OLDEST_MINUS_WINDOW: Subtracts duration from workersOldest, or throws if not set
77
+ * - WORKERS_NEWEST_PLUS_WINDOW: Adds duration to workersNewest, or throws if not set
78
+ *
79
+ * @param timeValue - The TimeValue to resolve
80
+ * @param state - The current SDK state containing workersOldest and workersNewest
81
+ * @returns Resolved ISO 8601 timestamp string
82
+ * @throws Error if required TimeValue.value is missing for ABSOLUTE or *_WINDOW types
83
+ * @throws Error if workersOldest/workersNewest is not set in state for WORKERS_* types
84
+ */
85
+ function resolveTimeValue(timeValue, state) {
86
+ switch (timeValue.type) {
87
+ case extraction_1.TimeValueType.ABSOLUTE_TIME: {
88
+ if (!timeValue.value) {
89
+ throw new Error('TimeValue of type ABSOLUTE must have a value (ISO 8601 timestamp).');
90
+ }
91
+ // Normalize to consistent ISO 8601 format (YYYY-MM-DDTHH:mm:ss.sssZ)
92
+ // to ensure string comparisons in boundary expansion are safe.
93
+ const parsed = new Date(timeValue.value);
94
+ if (isNaN(parsed.getTime())) {
95
+ throw new Error(`TimeValue of type ABSOLUTE has an invalid ISO 8601 timestamp: '${timeValue.value}'.`);
96
+ }
97
+ return parsed.toISOString();
98
+ }
99
+ case extraction_1.TimeValueType.CURRENT_TIME: {
100
+ return new Date().toISOString();
101
+ }
102
+ case extraction_1.TimeValueType.UNBOUNDED: {
103
+ return constants_1.UNBOUNDED_DATE_TIME_VALUE;
104
+ }
105
+ case extraction_1.TimeValueType.WORKERS_OLDEST: {
106
+ if (!state.workersOldest) {
107
+ // To support backwards-compatibility for the old state
108
+ return constants_1.UNBOUNDED_DATE_TIME_VALUE;
109
+ }
110
+ return state.workersOldest;
111
+ }
112
+ case extraction_1.TimeValueType.WORKERS_NEWEST: {
113
+ if (!state.workersNewest) {
114
+ throw new Error('Field workersNewest is not set in state. Cannot resolve TimeValue of type WORKERS_NEWEST without a prior extraction boundary.');
115
+ }
116
+ return state.workersNewest;
117
+ }
118
+ case extraction_1.TimeValueType.WORKERS_OLDEST_MINUS_WINDOW: {
119
+ if (!timeValue.value) {
120
+ throw new Error("TimeValue of type WORKERS_OLDEST_MINUS_WINDOW must have a value (duration, e.g. '30s', '5m', '2h').");
121
+ }
122
+ if (!state.workersOldest) {
123
+ // To support backwards-compatibility for the old state
124
+ return constants_1.UNBOUNDED_DATE_TIME_VALUE;
125
+ }
126
+ return applyDuration(state.workersOldest, timeValue.value, 'subtract');
127
+ }
128
+ case extraction_1.TimeValueType.WORKERS_NEWEST_PLUS_WINDOW: {
129
+ if (!timeValue.value) {
130
+ throw new Error("TimeValue of type WORKERS_NEWEST_PLUS_WINDOW must have a value (duration, e.g. '30s', '5m', '2h').");
131
+ }
132
+ if (!state.workersNewest) {
133
+ throw new Error('Field workersNewest is not set in state. Cannot resolve TimeValue of type WORKERS_NEWEST_PLUS_WINDOW without a prior extraction boundary.');
134
+ }
135
+ return applyDuration(state.workersNewest, timeValue.value, 'add');
136
+ }
137
+ default: {
138
+ throw new Error(`Unknown TimeValueType: '${timeValue.type}'.`);
139
+ }
140
+ }
141
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=time-value-resolver.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"time-value-resolver.test.d.ts","sourceRoot":"","sources":["../../src/common/time-value-resolver.test.ts"],"names":[],"mappings":""}