@devrev/airsync-sdk 2.0.0-beta.2 → 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 (89) hide show
  1. package/dist/airsync-sdk.d.ts +414 -157
  2. package/dist/attachments-streaming/attachments-streaming-pool.d.ts +2 -1
  3. package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
  4. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +8 -2
  5. package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
  6. package/dist/attachments-streaming/attachments-streaming-pool.js +14 -14
  7. package/dist/attachments-streaming/attachments-streaming-pool.test.js +47 -23
  8. package/dist/common/time-value-resolver.d.ts +2 -2
  9. package/dist/common/time-value-resolver.d.ts.map +1 -1
  10. package/dist/index.d.ts +3 -2
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +7 -4
  13. package/dist/multithreading/adapters/base-adapter.d.ts +56 -0
  14. package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
  15. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts +2 -0
  16. package/dist/multithreading/adapters/base-adapter.emit.test.d.ts.map +1 -0
  17. package/dist/multithreading/{worker-adapter/worker-adapter.emit.test.js → adapters/base-adapter.emit.test.js} +66 -53
  18. package/dist/multithreading/adapters/base-adapter.js +105 -0
  19. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts +2 -0
  20. package/dist/multithreading/adapters/extraction-adapter.artifacts.test.d.ts.map +1 -0
  21. package/dist/multithreading/{worker-adapter/worker-adapter.artifacts.test.js → adapters/extraction-adapter.artifacts.test.js} +6 -6
  22. package/dist/multithreading/adapters/extraction-adapter.d.ts +58 -0
  23. package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
  24. package/dist/multithreading/adapters/extraction-adapter.js +325 -0
  25. package/dist/multithreading/adapters/extraction-adapter.test.d.ts +2 -0
  26. package/dist/multithreading/adapters/extraction-adapter.test.d.ts.map +1 -0
  27. package/dist/multithreading/{worker-adapter/worker-adapter.extraction.test.js → adapters/extraction-adapter.test.js} +41 -51
  28. package/dist/multithreading/adapters/loading-adapter.d.ts +44 -0
  29. package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
  30. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.d.ts → adapters/loading-adapter.helpers.d.ts} +1 -1
  31. package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
  32. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts +2 -0
  33. package/dist/multithreading/adapters/loading-adapter.helpers.test.d.ts.map +1 -0
  34. package/dist/multithreading/{worker-adapter/worker-adapter.helpers.test.js → adapters/loading-adapter.helpers.test.js} +26 -26
  35. package/dist/multithreading/adapters/loading-adapter.js +461 -0
  36. package/dist/multithreading/adapters/loading-adapter.test.d.ts +2 -0
  37. package/dist/multithreading/adapters/loading-adapter.test.d.ts.map +1 -0
  38. package/dist/multithreading/{worker-adapter/worker-adapter.loading.test.js → adapters/loading-adapter.test.js} +19 -26
  39. package/dist/multithreading/adapters/serialization.test.d.ts +2 -0
  40. package/dist/multithreading/adapters/serialization.test.d.ts.map +1 -0
  41. package/dist/multithreading/process-task.d.ts +16 -1
  42. package/dist/multithreading/process-task.d.ts.map +1 -1
  43. package/dist/multithreading/process-task.js +97 -49
  44. package/dist/multithreading/process-task.test.js +15 -15
  45. package/dist/state/base-state.d.ts +75 -0
  46. package/dist/state/base-state.d.ts.map +1 -0
  47. package/dist/state/base-state.js +261 -0
  48. package/dist/state/extraction-state.d.ts +29 -0
  49. package/dist/state/extraction-state.d.ts.map +1 -0
  50. package/dist/state/extraction-state.js +122 -0
  51. package/dist/state/loading-state.d.ts +19 -0
  52. package/dist/state/loading-state.d.ts.map +1 -0
  53. package/dist/state/loading-state.js +40 -0
  54. package/dist/state/state.extract-window.test.js +7 -7
  55. package/dist/state/state.interfaces.d.ts +32 -25
  56. package/dist/state/state.interfaces.d.ts.map +1 -1
  57. package/dist/state/state.interfaces.js +15 -4
  58. package/dist/state/state.pending-boundaries.test.js +15 -15
  59. package/dist/state/state.post-state.test.js +9 -8
  60. package/dist/state/state.test.js +22 -19
  61. package/dist/state/state.time-value-resolution.test.js +8 -8
  62. package/dist/types/extraction.d.ts +3 -3
  63. package/dist/types/extraction.d.ts.map +1 -1
  64. package/dist/types/index.d.ts +0 -1
  65. package/dist/types/index.d.ts.map +1 -1
  66. package/dist/types/workers.d.ts +16 -15
  67. package/dist/types/workers.d.ts.map +1 -1
  68. package/package.json +1 -1
  69. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
  70. package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
  71. package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -97
  72. package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
  73. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts +0 -2
  74. package/dist/multithreading/worker-adapter/worker-adapter.emit.test.d.ts.map +0 -1
  75. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts +0 -2
  76. package/dist/multithreading/worker-adapter/worker-adapter.extraction.test.d.ts.map +0 -1
  77. package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
  78. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
  79. package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
  80. package/dist/multithreading/worker-adapter/worker-adapter.js +0 -846
  81. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts +0 -2
  82. package/dist/multithreading/worker-adapter/worker-adapter.loading.test.d.ts.map +0 -1
  83. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts +0 -2
  84. package/dist/multithreading/worker-adapter/worker-adapter.serialization.test.d.ts.map +0 -1
  85. package/dist/state/state.d.ts +0 -36
  86. package/dist/state/state.d.ts.map +0 -1
  87. package/dist/state/state.js +0 -265
  88. /package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +0 -0
  89. /package/dist/multithreading/{worker-adapter/worker-adapter.serialization.test.js → adapters/serialization.test.js} +0 -0
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=worker-adapter.loading.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-adapter.loading.test.d.ts","sourceRoot":"","sources":["../../../src/multithreading/worker-adapter/worker-adapter.loading.test.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=worker-adapter.serialization.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"worker-adapter.serialization.test.d.ts","sourceRoot":"","sources":["../../../src/multithreading/worker-adapter/worker-adapter.serialization.test.ts"],"names":[],"mappings":""}
@@ -1,36 +0,0 @@
1
- import { AdapterState, StateInterface } from './state.interfaces';
2
- import { ExtractionScope } from '../types/workers';
3
- export declare function createAdapterState<ConnectorState>({ event, initialState, initialDomainMapping, options, }: StateInterface<ConnectorState>): Promise<State<ConnectorState>>;
4
- export declare class State<ConnectorState> {
5
- private _state;
6
- private _extractionScope;
7
- private initialSdkState;
8
- private workerUrl;
9
- private devrevToken;
10
- private syncUnitId;
11
- private requestId;
12
- constructor({ event, initialState }: StateInterface<ConnectorState>);
13
- get state(): AdapterState<ConnectorState>;
14
- set state(value: AdapterState<ConnectorState>);
15
- get extractionScope(): ExtractionScope;
16
- /**
17
- * Initializes the state for this adapter instance by fetching from API
18
- * or creating an initial state if none exists (404).
19
- * @param initialState The initial connector state provided by the spawn function
20
- */
21
- init(initialState: ConnectorState): Promise<void>;
22
- /**
23
- * Updates the state of the adapter by posting to API.
24
- * @param {object} state - The state to be updated
25
- */
26
- postState(state?: AdapterState<ConnectorState>): Promise<void>;
27
- /**
28
- * Fetches the state of the adapter from API.
29
- * @return The raw state data from API
30
- */
31
- fetchState(): Promise<{
32
- state: string;
33
- objects?: string;
34
- }>;
35
- }
36
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"AAYA,OAAO,EACL,YAAY,EAIZ,cAAc,EACf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,wBAAsB,kBAAkB,CAAC,cAAc,EAAE,EACvD,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,OAAO,GACR,EAAE,cAAc,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAoIjE;AAED,qBAAa,KAAK,CAAC,cAAc;IAC/B,OAAO,CAAC,MAAM,CAA+B;IAC7C,OAAO,CAAC,gBAAgB,CAAuB;IAC/C,OAAO,CAAC,eAAe,CAAW;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,cAAc,CAAC,cAAc,CAAC;IAenE,IAAI,KAAK,IAAI,YAAY,CAAC,cAAc,CAAC,CAExC;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,cAAc,CAAC,EAE5C;IAED,IAAI,eAAe,IAAI,eAAe,CAErC;IAED;;;;OAIG;IACG,IAAI,CAAC,YAAY,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAiDvD;;;OAGG;IACG,SAAS,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC,cAAc,CAAC;IAqDpD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAqBjE"}
@@ -1,265 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.State = void 0;
7
- exports.createAdapterState = createAdapterState;
8
- const axios_1 = __importDefault(require("axios"));
9
- const node_worker_threads_1 = require("node:worker_threads");
10
- const constants_1 = require("../common/constants");
11
- const install_initial_domain_mapping_1 = require("../common/install-initial-domain-mapping");
12
- const time_value_resolver_1 = require("../common/time-value-resolver");
13
- const axios_client_internal_1 = require("../http/axios-client-internal");
14
- const logger_1 = require("../logger/logger");
15
- const common_1 = require("../types/common");
16
- const extraction_1 = require("../types/extraction");
17
- const workers_1 = require("../types/workers");
18
- const state_interfaces_1 = require("./state.interfaces");
19
- async function createAdapterState({ event, initialState, initialDomainMapping, options, }) {
20
- // Deep clone the initial state to avoid mutating the original state
21
- const deepCloneInitialState = structuredClone(initialState);
22
- const as = new State({
23
- event,
24
- initialState: deepCloneInitialState,
25
- initialDomainMapping,
26
- options,
27
- });
28
- if (!constants_1.STATELESS_EVENT_TYPES.includes(event.payload.event_type)) {
29
- await as.init(deepCloneInitialState);
30
- // Check if IDM needs to be updated
31
- const snapInVersionId = event.context.snap_in_version_id;
32
- const hasSnapInVersionInState = 'snapInVersionId' in as.state;
33
- const shouldUpdateIDM = !hasSnapInVersionInState || as.state.snapInVersionId !== snapInVersionId;
34
- if (!shouldUpdateIDM) {
35
- console.log(`Snap-in version in state matches the version in event context "${snapInVersionId}". Skipping initial domain mapping installation.`);
36
- }
37
- else {
38
- try {
39
- console.log(`Snap-in version in state "${as.state.snapInVersionId}" does not match the version in event context "${snapInVersionId}". Installing initial domain mapping.`);
40
- if (initialDomainMapping) {
41
- await (0, install_initial_domain_mapping_1.installInitialDomainMapping)(event, initialDomainMapping);
42
- as.state.snapInVersionId = snapInVersionId;
43
- }
44
- else {
45
- throw new Error('No initial domain mapping was passed to spawn function. Skipping initial domain mapping installation.');
46
- }
47
- }
48
- catch (error) {
49
- const errorMessage = `Error while installing initial domain mapping. ${(0, logger_1.serializeError)(error)}`;
50
- console.error(errorMessage);
51
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
52
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
53
- payload: { message: errorMessage },
54
- });
55
- process.exit(1);
56
- }
57
- }
58
- // Resolve extraction timestamps from TimeValue objects, or reuse pending values from a prior invocation.
59
- // On StartExtractingMetadata: resolve fresh from TimeValue objects and store in pending state (always overwrite).
60
- // On all other events: reuse the pending values cached during StartExtractingMetadata.
61
- const eventContext = event.payload.event_context;
62
- if (event.payload.event_type === extraction_1.EventType.StartExtractingMetadata) {
63
- const timeFields = [
64
- {
65
- source: 'extraction_start_time',
66
- target: 'extract_from',
67
- pending: 'pendingWorkersOldest',
68
- },
69
- {
70
- source: 'extraction_end_time',
71
- target: 'extract_to',
72
- pending: 'pendingWorkersNewest',
73
- },
74
- ];
75
- for (const { source, target, pending } of timeFields) {
76
- const timeValue = eventContext[source];
77
- if (timeValue && timeValue.type) {
78
- try {
79
- const resolved = (0, time_value_resolver_1.resolveTimeValue)(timeValue, as.state);
80
- eventContext[target] = resolved;
81
- as.state[pending] = resolved;
82
- console.log(`Resolved ${target} to ${resolved}. Stored in ${pending}.`);
83
- }
84
- catch (error) {
85
- const errorMessage = `Failed to resolve ${source}: ${(0, logger_1.serializeError)(error)}`;
86
- console.error(errorMessage);
87
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
88
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
89
- payload: { message: errorMessage },
90
- });
91
- process.exit(1);
92
- }
93
- }
94
- }
95
- }
96
- else {
97
- // Non-StartExtractingMetadata events: reuse pending values from state
98
- if (as.state.pendingWorkersOldest) {
99
- eventContext.extract_from = as.state.pendingWorkersOldest;
100
- console.log(`Reusing pendingWorkersOldest as extract_from: ${as.state.pendingWorkersOldest}.`);
101
- }
102
- else {
103
- console.log('pendingWorkersOldest is not set in state. extract_from will not be populated for this invocation.');
104
- }
105
- if (as.state.pendingWorkersNewest) {
106
- eventContext.extract_to = as.state.pendingWorkersNewest;
107
- console.log(`Reusing pendingWorkersNewest as extract_to: ${as.state.pendingWorkersNewest}.`);
108
- }
109
- else {
110
- console.log('pendingWorkersNewest is not set in state. extract_to will not be populated for this invocation.');
111
- }
112
- }
113
- // Validate that extract_from is before extract_to
114
- if (eventContext.extract_from && eventContext.extract_to) {
115
- if (eventContext.extract_from >= eventContext.extract_to) {
116
- 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.`;
117
- console.error(errorMessage);
118
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
119
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
120
- payload: { message: errorMessage },
121
- });
122
- process.exit(1);
123
- }
124
- }
125
- }
126
- return as;
127
- }
128
- class State {
129
- constructor({ event, initialState }) {
130
- this._extractionScope = {};
131
- this.initialSdkState =
132
- event.payload.event_context.mode === common_1.SyncMode.LOADING
133
- ? state_interfaces_1.loadingSdkState
134
- : state_interfaces_1.extractionSdkState;
135
- this._state = Object.assign(Object.assign({}, initialState), this.initialSdkState);
136
- this.workerUrl = event.payload.event_context.worker_data_url;
137
- this.devrevToken = event.context.secrets.service_account_token;
138
- this.syncUnitId = event.payload.event_context.sync_unit_id;
139
- this.requestId = event.payload.event_context.request_id_adaas;
140
- }
141
- get state() {
142
- return this._state;
143
- }
144
- set state(value) {
145
- this._state = value;
146
- }
147
- get extractionScope() {
148
- return this._extractionScope;
149
- }
150
- /**
151
- * Initializes the state for this adapter instance by fetching from API
152
- * or creating an initial state if none exists (404).
153
- * @param initialState The initial connector state provided by the spawn function
154
- */
155
- async init(initialState) {
156
- var _a;
157
- try {
158
- const { state: stringifiedState, objects } = await this.fetchState();
159
- if (!stringifiedState) {
160
- throw new Error('No state found in response.');
161
- }
162
- let parsedState;
163
- try {
164
- parsedState = JSON.parse(stringifiedState);
165
- }
166
- catch (error) {
167
- throw new Error(`Failed to parse state. ${error}`);
168
- }
169
- this.state = parsedState;
170
- console.log('State fetched successfully. Current state', (0, logger_1.getPrintableState)(this.state));
171
- if (objects) {
172
- try {
173
- this._extractionScope = JSON.parse(objects);
174
- }
175
- catch (error) {
176
- console.warn(`Failed to parse extractionScope. ${error}`);
177
- }
178
- }
179
- }
180
- catch (error) {
181
- if (axios_1.default.isAxiosError(error) && ((_a = error.response) === null || _a === void 0 ? void 0 : _a.status) === 404) {
182
- console.log('State not found. Initializing state with initial state.');
183
- const initialAdapterState = Object.assign(Object.assign({}, initialState), this.initialSdkState);
184
- this.state = initialAdapterState;
185
- await this.postState(initialAdapterState);
186
- }
187
- else {
188
- const errorMessage = `Failed to init state. ${(0, logger_1.serializeError)(error)}`;
189
- console.error(errorMessage);
190
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
191
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
192
- payload: { message: errorMessage },
193
- });
194
- process.exit(1);
195
- }
196
- }
197
- }
198
- /**
199
- * Updates the state of the adapter by posting to API.
200
- * @param {object} state - The state to be updated
201
- */
202
- async postState(state) {
203
- const url = this.workerUrl + '.update';
204
- this.state = state || this.state;
205
- let stringifiedState;
206
- try {
207
- stringifiedState = JSON.stringify(this.state);
208
- }
209
- catch (error) {
210
- const errorMessage = `Failed to stringify state. ${(0, logger_1.serializeError)(error)}`;
211
- console.error(errorMessage);
212
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
213
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
214
- payload: { message: errorMessage },
215
- });
216
- process.exit(1);
217
- }
218
- try {
219
- await axios_client_internal_1.axiosClient.post(url, {
220
- state: stringifiedState,
221
- }, {
222
- headers: {
223
- Authorization: this.devrevToken,
224
- },
225
- params: {
226
- sync_unit: this.syncUnitId,
227
- request_id: this.requestId,
228
- },
229
- });
230
- console.log('State updated successfully to', (0, logger_1.getPrintableState)(this.state));
231
- }
232
- catch (error) {
233
- const errorMessage = `Failed to update the state. ${(0, logger_1.serializeError)(error)}`;
234
- console.error(errorMessage);
235
- node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
236
- subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
237
- payload: { message: errorMessage },
238
- });
239
- process.exit(1);
240
- }
241
- }
242
- /**
243
- * Fetches the state of the adapter from API.
244
- * @return The raw state data from API
245
- */
246
- async fetchState() {
247
- var _a, _b;
248
- console.log(`Fetching state with sync unit id ${this.syncUnitId} and request id ${this.requestId}.`);
249
- const url = this.workerUrl + '.get';
250
- const response = await axios_client_internal_1.axiosClient.get(url, {
251
- headers: {
252
- Authorization: this.devrevToken,
253
- },
254
- params: {
255
- sync_unit: this.syncUnitId,
256
- request_id: this.requestId,
257
- },
258
- });
259
- return {
260
- state: (_a = response.data) === null || _a === void 0 ? void 0 : _a.state,
261
- objects: (_b = response.data) === null || _b === void 0 ? void 0 : _b.objects,
262
- };
263
- }
264
- }
265
- exports.State = State;