@devrev/airsync-sdk 2.0.0-beta.1 → 2.0.0-beta.10
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/README.md +7 -21
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts +6 -7
- package/dist/attachments-streaming/attachments-streaming-pool.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts +4 -3
- package/dist/attachments-streaming/attachments-streaming-pool.interfaces.d.ts.map +1 -1
- package/dist/attachments-streaming/attachments-streaming-pool.js +69 -61
- package/dist/common/constants.d.ts +15 -12
- package/dist/common/constants.d.ts.map +1 -1
- package/dist/common/constants.js +20 -34
- package/dist/common/helpers.d.ts +3 -27
- package/dist/common/helpers.d.ts.map +1 -1
- package/dist/common/helpers.js +6 -36
- package/dist/http/{axios-client-internal.d.ts → client.d.ts} +1 -1
- package/dist/http/client.d.ts.map +1 -0
- package/dist/http/{axios-client-internal.js → client.js} +7 -4
- package/dist/http/errors.d.ts +8 -0
- package/dist/http/errors.d.ts.map +1 -0
- package/dist/http/errors.js +31 -0
- package/dist/index.d.ts +30 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +47 -28
- package/dist/logger/logger.d.ts +13 -70
- package/dist/logger/logger.d.ts.map +1 -1
- package/dist/logger/logger.interfaces.d.ts +4 -7
- package/dist/logger/logger.interfaces.d.ts.map +1 -1
- package/dist/logger/logger.js +67 -92
- package/dist/mappers/mappers.d.ts +10 -43
- package/dist/mappers/mappers.d.ts.map +1 -1
- package/dist/mappers/mappers.interfaces.d.ts +173 -0
- package/dist/mappers/mappers.interfaces.d.ts.map +1 -0
- package/dist/mappers/{mappers.interface.js → mappers.interfaces.js} +1 -10
- package/dist/mappers/mappers.js +32 -46
- package/dist/multithreading/adapters/base-adapter.d.ts +39 -0
- package/dist/multithreading/adapters/base-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/base-adapter.js +212 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts +49 -0
- package/dist/multithreading/adapters/extraction-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/extraction-adapter.js +375 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts +26 -0
- package/dist/multithreading/adapters/loading-adapter.d.ts.map +1 -0
- package/dist/multithreading/adapters/loading-adapter.helpers.d.ts +12 -0
- package/dist/multithreading/adapters/loading-adapter.helpers.d.ts.map +1 -0
- package/dist/multithreading/{worker-adapter/worker-adapter.helpers.js → adapters/loading-adapter.helpers.js} +2 -12
- package/dist/multithreading/adapters/loading-adapter.js +279 -0
- package/dist/multithreading/emit.d.ts +11 -0
- package/dist/multithreading/emit.d.ts.map +1 -0
- package/dist/multithreading/emit.js +25 -0
- package/dist/multithreading/process-task.d.ts +6 -1
- package/dist/multithreading/process-task.d.ts.map +1 -1
- package/dist/multithreading/process-task.js +120 -82
- package/dist/multithreading/spawn/spawn.d.ts +10 -11
- package/dist/multithreading/spawn/spawn.d.ts.map +1 -1
- package/dist/multithreading/spawn/spawn.helpers.d.ts +12 -11
- package/dist/multithreading/spawn/spawn.helpers.d.ts.map +1 -1
- package/dist/multithreading/spawn/spawn.helpers.js +142 -77
- package/dist/multithreading/spawn/spawn.js +59 -75
- package/dist/multithreading/worker.js +16 -5
- package/dist/repo/repo.d.ts +14 -5
- package/dist/repo/repo.d.ts.map +1 -1
- package/dist/repo/repo.helpers.d.ts +6 -0
- package/dist/repo/repo.helpers.d.ts.map +1 -0
- package/dist/repo/repo.helpers.js +16 -0
- package/dist/repo/repo.interfaces.d.ts +11 -20
- package/dist/repo/repo.interfaces.d.ts.map +1 -1
- package/dist/repo/repo.js +36 -22
- package/dist/state/base-state.d.ts +58 -0
- package/dist/state/base-state.d.ts.map +1 -0
- package/dist/state/base-state.js +242 -0
- package/dist/state/extraction-state.d.ts +14 -0
- package/dist/state/extraction-state.d.ts.map +1 -0
- package/dist/state/extraction-state.js +140 -0
- package/dist/state/install-initial-domain-mapping.d.ts +4 -0
- package/dist/state/install-initial-domain-mapping.d.ts.map +1 -0
- package/dist/{common → state}/install-initial-domain-mapping.js +5 -7
- package/dist/state/loading-state.d.ts +8 -0
- package/dist/state/loading-state.d.ts.map +1 -0
- package/dist/state/loading-state.js +29 -0
- package/dist/state/state.d.ts +3 -29
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.interfaces.d.ts +31 -12
- package/dist/state/state.interfaces.d.ts.map +1 -1
- package/dist/state/state.interfaces.js +17 -1
- package/dist/state/state.js +9 -164
- package/dist/state/time-value-resolver.d.ts +17 -0
- package/dist/state/time-value-resolver.d.ts.map +1 -0
- package/dist/state/time-value-resolver.js +110 -0
- package/dist/testing/mock-event.d.ts +10 -0
- package/dist/testing/mock-event.d.ts.map +1 -0
- package/dist/testing/mock-event.js +96 -0
- package/dist/testing/mock-server.d.ts +31 -0
- package/dist/testing/mock-server.d.ts.map +1 -0
- package/dist/testing/mock-server.interfaces.d.ts +54 -0
- package/dist/testing/mock-server.interfaces.d.ts.map +1 -0
- package/dist/testing/mock-server.interfaces.js +4 -0
- package/dist/testing/mock-server.js +297 -0
- package/dist/testing/test-adapters.d.ts +22 -0
- package/dist/testing/test-adapters.d.ts.map +1 -0
- package/dist/testing/test-adapters.js +32 -0
- package/dist/types/common.d.ts +4 -37
- package/dist/types/common.d.ts.map +1 -1
- package/dist/types/common.js +2 -17
- package/dist/types/errors.d.ts +15 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +28 -0
- package/dist/types/external-domain-metadata.d.ts +40 -162
- package/dist/types/external-domain-metadata.d.ts.map +1 -1
- package/dist/types/extraction.d.ts +135 -278
- package/dist/types/extraction.d.ts.map +1 -1
- package/dist/types/extraction.js +46 -133
- package/dist/types/loading.d.ts +15 -55
- package/dist/types/loading.d.ts.map +1 -1
- package/dist/types/loading.js +1 -23
- package/dist/types/workers.d.ts +70 -103
- package/dist/types/workers.d.ts.map +1 -1
- package/dist/types/workers.js +1 -6
- package/dist/uploader/uploader.d.ts +10 -61
- package/dist/uploader/uploader.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.d.ts +7 -27
- package/dist/uploader/uploader.helpers.d.ts.map +1 -1
- package/dist/uploader/uploader.helpers.js +80 -30
- package/dist/uploader/uploader.interfaces.d.ts +19 -54
- package/dist/uploader/uploader.interfaces.d.ts.map +1 -1
- package/dist/uploader/uploader.interfaces.js +8 -0
- package/dist/uploader/uploader.js +72 -124
- package/docs/MIGRATION.md +696 -0
- package/package.json +35 -22
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts +0 -2
- package/dist/attachments-streaming/attachments-streaming-pool.test.d.ts.map +0 -1
- package/dist/attachments-streaming/attachments-streaming-pool.test.js +0 -321
- package/dist/common/control-protocol.d.ts +0 -10
- package/dist/common/control-protocol.d.ts.map +0 -1
- package/dist/common/control-protocol.js +0 -31
- package/dist/common/errors.d.ts +0 -6
- package/dist/common/errors.d.ts.map +0 -1
- package/dist/common/errors.js +0 -4
- package/dist/common/event-type-translation.d.ts +0 -24
- package/dist/common/event-type-translation.d.ts.map +0 -1
- package/dist/common/event-type-translation.js +0 -117
- package/dist/common/install-initial-domain-mapping.d.ts +0 -4
- package/dist/common/install-initial-domain-mapping.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.d.ts +0 -2
- package/dist/common/install-initial-domain-mapping.test.d.ts.map +0 -1
- package/dist/common/install-initial-domain-mapping.test.js +0 -208
- package/dist/deprecated/adapter/index.d.ts +0 -62
- package/dist/deprecated/adapter/index.d.ts.map +0 -1
- package/dist/deprecated/adapter/index.js +0 -151
- package/dist/deprecated/common/helpers.d.ts +0 -7
- package/dist/deprecated/common/helpers.d.ts.map +0 -1
- package/dist/deprecated/common/helpers.js +0 -47
- package/dist/deprecated/demo-extractor/external_domain_metadata.json +0 -38
- package/dist/deprecated/demo-extractor/index.d.ts +0 -18
- package/dist/deprecated/demo-extractor/index.d.ts.map +0 -1
- package/dist/deprecated/demo-extractor/index.js +0 -161
- package/dist/deprecated/http/client.d.ts +0 -22
- package/dist/deprecated/http/client.d.ts.map +0 -1
- package/dist/deprecated/http/client.js +0 -161
- package/dist/deprecated/uploader/index.d.ts +0 -35
- package/dist/deprecated/uploader/index.d.ts.map +0 -1
- package/dist/deprecated/uploader/index.js +0 -161
- package/dist/http/axios-client-internal.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.d.ts +0 -2
- package/dist/http/axios-client-internal.test.d.ts.map +0 -1
- package/dist/http/axios-client-internal.test.js +0 -154
- package/dist/http/axios-client.d.ts +0 -27
- package/dist/http/axios-client.d.ts.map +0 -1
- package/dist/http/axios-client.js +0 -57
- package/dist/http/constants.d.ts +0 -4
- package/dist/http/constants.d.ts.map +0 -1
- package/dist/http/constants.js +0 -6
- package/dist/http/index.d.ts +0 -3
- package/dist/http/index.d.ts.map +0 -1
- package/dist/http/index.js +0 -18
- package/dist/http/types.d.ts +0 -17
- package/dist/http/types.d.ts.map +0 -1
- package/dist/http/types.js +0 -2
- package/dist/logger/logger.constants.d.ts +0 -6
- package/dist/logger/logger.constants.d.ts.map +0 -1
- package/dist/logger/logger.constants.js +0 -13
- package/dist/logger/logger.context.d.ts +0 -58
- package/dist/logger/logger.context.d.ts.map +0 -1
- package/dist/logger/logger.context.js +0 -86
- package/dist/logger/logger.test.d.ts +0 -2
- package/dist/logger/logger.test.d.ts.map +0 -1
- package/dist/logger/logger.test.js +0 -490
- package/dist/mappers/mappers.interface.d.ts +0 -294
- package/dist/mappers/mappers.interface.d.ts.map +0 -1
- package/dist/mappers/mappers.test.d.ts +0 -2
- package/dist/mappers/mappers.test.d.ts.map +0 -1
- package/dist/mappers/mappers.test.js +0 -107
- package/dist/multithreading/create-worker.test.d.ts +0 -2
- package/dist/multithreading/create-worker.test.d.ts.map +0 -1
- package/dist/multithreading/create-worker.test.js +0 -89
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts +0 -2
- package/dist/multithreading/spawn/spawn.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/spawn/spawn.helpers.test.js +0 -293
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.artifacts.test.js +0 -127
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts +0 -91
- package/dist/multithreading/worker-adapter/worker-adapter.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts +0 -22
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.helpers.test.js +0 -514
- package/dist/multithreading/worker-adapter/worker-adapter.js +0 -745
- package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts +0 -2
- package/dist/multithreading/worker-adapter/worker-adapter.test.d.ts.map +0 -1
- package/dist/multithreading/worker-adapter/worker-adapter.test.js +0 -483
- package/dist/repo/repo.test.d.ts +0 -2
- package/dist/repo/repo.test.d.ts.map +0 -1
- package/dist/repo/repo.test.js +0 -131
- package/dist/state/state.test.d.ts +0 -2
- package/dist/state/state.test.d.ts.map +0 -1
- package/dist/state/state.test.js +0 -224
- package/dist/types/extraction.test.d.ts +0 -2
- package/dist/types/extraction.test.d.ts.map +0 -1
- package/dist/types/extraction.test.js +0 -70
- package/dist/types/index.d.ts +0 -10
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -18
- package/dist/uploader/uploader.helpers.test.d.ts +0 -2
- package/dist/uploader/uploader.helpers.test.d.ts.map +0 -1
- package/dist/uploader/uploader.helpers.test.js +0 -267
- package/dist/uploader/uploader.test.d.ts +0 -2
- package/dist/uploader/uploader.test.d.ts.map +0 -1
- package/dist/uploader/uploader.test.js +0 -589
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoadingAdapter = void 0;
|
|
4
|
+
const logger_1 = require("../../logger/logger");
|
|
5
|
+
const mappers_interfaces_1 = require("../../mappers/mappers.interfaces");
|
|
6
|
+
const extraction_1 = require("../../types/extraction");
|
|
7
|
+
const loading_1 = require("../../types/loading");
|
|
8
|
+
const base_adapter_1 = require("./base-adapter");
|
|
9
|
+
const loading_adapter_helpers_1 = require("./loading-adapter.helpers");
|
|
10
|
+
/** Adapter passed to loading tasks (item/attachment loading, loader reports). @public */
|
|
11
|
+
class LoadingAdapter extends base_adapter_1.BaseAdapter {
|
|
12
|
+
/** @internal */
|
|
13
|
+
constructor(params) {
|
|
14
|
+
super(params);
|
|
15
|
+
this.loaderReports = [];
|
|
16
|
+
this._processedFiles = [];
|
|
17
|
+
}
|
|
18
|
+
get reports() {
|
|
19
|
+
return this.loaderReports;
|
|
20
|
+
}
|
|
21
|
+
get processedFiles() {
|
|
22
|
+
return this._processedFiles;
|
|
23
|
+
}
|
|
24
|
+
/** @internal */
|
|
25
|
+
async beforeEmit() {
|
|
26
|
+
// Loading has no pre-emit work.
|
|
27
|
+
}
|
|
28
|
+
/** @internal */
|
|
29
|
+
buildEmitPayload(newEventType) {
|
|
30
|
+
const isLoaderEvent = Object.values(loading_1.LoaderEventType).includes(newEventType);
|
|
31
|
+
return isLoaderEvent
|
|
32
|
+
? {
|
|
33
|
+
reports: this.reports,
|
|
34
|
+
processed_files: this.processedFiles,
|
|
35
|
+
}
|
|
36
|
+
: {};
|
|
37
|
+
}
|
|
38
|
+
/** @internal */
|
|
39
|
+
afterEmit() {
|
|
40
|
+
// Loading keeps its accumulated reports/processed files across emits.
|
|
41
|
+
}
|
|
42
|
+
async loadItemTypes({ itemTypesToLoad, }) {
|
|
43
|
+
if (this.event.payload.event_type === extraction_1.EventType.StartLoadingData) {
|
|
44
|
+
const itemTypes = itemTypesToLoad.map((itemTypeToLoad) => itemTypeToLoad.itemType);
|
|
45
|
+
if (!itemTypes.length) {
|
|
46
|
+
console.warn('No item types to load, returning.');
|
|
47
|
+
return { status: 'success' };
|
|
48
|
+
}
|
|
49
|
+
this.adapterState.sdkState.fromDevRev = {
|
|
50
|
+
filesToLoad: await this.getLoaderBatches(itemTypes),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
return this.loadFiles('data', (fileToLoad) => {
|
|
54
|
+
const itemTypeToLoad = itemTypesToLoad.find((itemTypeToLoad) => itemTypeToLoad.itemType === fileToLoad.itemType);
|
|
55
|
+
if (!itemTypeToLoad) {
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
return async (item) => this.loadItem({ item, itemTypeToLoad });
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
async loadAttachments({ create, }) {
|
|
62
|
+
if (this.event.payload.event_type === extraction_1.EventType.StartLoadingAttachments) {
|
|
63
|
+
this.adapterState.sdkState.fromDevRev = {
|
|
64
|
+
filesToLoad: await this.getLoaderBatches(['attachment']),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
return this.loadFiles('attachment', () => async (item) => this.loadAttachment({ item, create }));
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Walks the transformer files in `fromDevRev.filesToLoad`, resuming from
|
|
71
|
+
* each file's `lineToProcess`. `getLoader` returns undefined when a file has
|
|
72
|
+
* an item type the connector can't load, which fails the phase.
|
|
73
|
+
*/
|
|
74
|
+
async loadFiles(kind, getLoader) {
|
|
75
|
+
var _a;
|
|
76
|
+
const filesToLoad = (_a = this.adapterState.sdkState.fromDevRev) === null || _a === void 0 ? void 0 : _a.filesToLoad;
|
|
77
|
+
if (!(filesToLoad === null || filesToLoad === void 0 ? void 0 : filesToLoad.length)) {
|
|
78
|
+
console.log('No files to load, returning.');
|
|
79
|
+
return { status: 'success' };
|
|
80
|
+
}
|
|
81
|
+
console.log('Files to load in state', filesToLoad);
|
|
82
|
+
try {
|
|
83
|
+
for (const fileToLoad of filesToLoad) {
|
|
84
|
+
if (fileToLoad.completed) {
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const load = getLoader(fileToLoad);
|
|
88
|
+
if (!load) {
|
|
89
|
+
const message = `Item type to load not found for item type: ${fileToLoad.itemType}.`;
|
|
90
|
+
console.error(message);
|
|
91
|
+
return { status: 'error', error: { message } };
|
|
92
|
+
}
|
|
93
|
+
const { response, error: transformerFileError } = await this.uploader.getJsonObjectByArtifactId({
|
|
94
|
+
artifactId: fileToLoad.id,
|
|
95
|
+
isGzipped: true,
|
|
96
|
+
});
|
|
97
|
+
if (transformerFileError) {
|
|
98
|
+
const message = `Transformer file not found for artifact ID: ${fileToLoad.id}.`;
|
|
99
|
+
console.error(message);
|
|
100
|
+
return { status: 'error', error: { message } };
|
|
101
|
+
}
|
|
102
|
+
const transformerFile = response;
|
|
103
|
+
for (let i = fileToLoad.lineToProcess; i < fileToLoad.count; i++) {
|
|
104
|
+
if (this.isTimeout) {
|
|
105
|
+
console.log(`Timeout detected during ${kind} loading. Returning progress to allow continuation.`);
|
|
106
|
+
return { status: 'progress' };
|
|
107
|
+
}
|
|
108
|
+
const { report, rateLimit } = await load(transformerFile[i]);
|
|
109
|
+
if (rateLimit === null || rateLimit === void 0 ? void 0 : rateLimit.delay) {
|
|
110
|
+
return { status: 'delay', delaySeconds: rateLimit.delay };
|
|
111
|
+
}
|
|
112
|
+
if (report) {
|
|
113
|
+
(0, loading_adapter_helpers_1.addReportToLoaderReport)({
|
|
114
|
+
loaderReports: this.loaderReports,
|
|
115
|
+
report,
|
|
116
|
+
});
|
|
117
|
+
fileToLoad.lineToProcess = fileToLoad.lineToProcess + 1;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
fileToLoad.completed = true;
|
|
121
|
+
this._processedFiles.push(fileToLoad.id);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
catch (error) {
|
|
125
|
+
console.error(`Error during ${kind} loading.`, (0, logger_1.serializeError)(error));
|
|
126
|
+
return {
|
|
127
|
+
status: 'error',
|
|
128
|
+
error: {
|
|
129
|
+
message: `Error during ${kind} loading. ${(0, logger_1.serializeError)(error)}`,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return { status: 'success' };
|
|
134
|
+
}
|
|
135
|
+
async getLoaderBatches(supportedItemTypes) {
|
|
136
|
+
var _a;
|
|
137
|
+
const statsFileArtifactId = (_a = this.event.payload.event_data) === null || _a === void 0 ? void 0 : _a.stats_file;
|
|
138
|
+
if (!statsFileArtifactId) {
|
|
139
|
+
return [];
|
|
140
|
+
}
|
|
141
|
+
const { response, error: statsFileError } = await this.uploader.getJsonObjectByArtifactId({
|
|
142
|
+
artifactId: statsFileArtifactId,
|
|
143
|
+
});
|
|
144
|
+
const statsFile = response;
|
|
145
|
+
if (statsFileError || statsFile.length === 0) {
|
|
146
|
+
return [];
|
|
147
|
+
}
|
|
148
|
+
return (0, loading_adapter_helpers_1.getFilesToLoad)({ supportedItemTypes, statsFile });
|
|
149
|
+
}
|
|
150
|
+
async loadItem({ item, itemTypeToLoad, }) {
|
|
151
|
+
const devrevId = item.id.devrev;
|
|
152
|
+
const syncUnit = this.event.payload.event_context.sync_unit;
|
|
153
|
+
let syncMapperRecord;
|
|
154
|
+
try {
|
|
155
|
+
syncMapperRecord = await this.mappers.getByTargetId({
|
|
156
|
+
sync_unit: syncUnit,
|
|
157
|
+
target: devrevId,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
console.warn('Failed to get sync mapper record.', (0, logger_1.serializeError)(error));
|
|
162
|
+
return {
|
|
163
|
+
error: {
|
|
164
|
+
message: 'Failed to get sync mapper record. ' + (0, logger_1.serializeError)(error),
|
|
165
|
+
},
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
const loadParams = { item, mappers: this.mappers, event: this.event };
|
|
169
|
+
if (syncMapperRecord) {
|
|
170
|
+
const response = await itemTypeToLoad.update(loadParams);
|
|
171
|
+
if (response.status !== 'success') {
|
|
172
|
+
return this.toFailedLoad(itemTypeToLoad.itemType, 'update', response);
|
|
173
|
+
}
|
|
174
|
+
try {
|
|
175
|
+
const syncMapperRecordUpdate = await this.mappers.update(Object.assign(Object.assign({ id: syncMapperRecord.sync_mapper_record.id, sync_unit: syncUnit, status: mappers_interfaces_1.SyncMapperRecordStatus.OPERATIONAL }, (response.modifiedDate && {
|
|
176
|
+
external_versions: {
|
|
177
|
+
add: [
|
|
178
|
+
{
|
|
179
|
+
modified_date: response.modifiedDate,
|
|
180
|
+
recipe_version: 0,
|
|
181
|
+
},
|
|
182
|
+
],
|
|
183
|
+
},
|
|
184
|
+
})), { external_ids: {
|
|
185
|
+
add: [response.id],
|
|
186
|
+
}, targets: {
|
|
187
|
+
add: [devrevId],
|
|
188
|
+
} }));
|
|
189
|
+
console.log('Successfully updated sync mapper record.', syncMapperRecordUpdate);
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
console.warn('Failed to update sync mapper record.', (0, logger_1.serializeError)(error));
|
|
193
|
+
return {
|
|
194
|
+
error: {
|
|
195
|
+
message: 'Failed to update sync mapper record' + (0, logger_1.serializeError)(error),
|
|
196
|
+
},
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
return {
|
|
200
|
+
report: {
|
|
201
|
+
item_type: itemTypeToLoad.itemType,
|
|
202
|
+
[loading_1.ActionType.UPDATED]: 1,
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
const response = await itemTypeToLoad.create(loadParams);
|
|
207
|
+
if (response.status !== 'success') {
|
|
208
|
+
return this.toFailedLoad(itemTypeToLoad.itemType, 'create', response);
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const syncMapperRecordCreate = await this.mappers.create(Object.assign({ sync_unit: syncUnit, status: mappers_interfaces_1.SyncMapperRecordStatus.OPERATIONAL, external_ids: [response.id], targets: [devrevId] }, (response.modifiedDate && {
|
|
212
|
+
external_versions: [
|
|
213
|
+
{
|
|
214
|
+
modified_date: response.modifiedDate,
|
|
215
|
+
recipe_version: 0,
|
|
216
|
+
},
|
|
217
|
+
],
|
|
218
|
+
})));
|
|
219
|
+
console.log('Successfully created sync mapper record.', syncMapperRecordCreate);
|
|
220
|
+
}
|
|
221
|
+
catch (error) {
|
|
222
|
+
console.warn('Failed to create sync mapper record.', (0, logger_1.serializeError)(error));
|
|
223
|
+
return {
|
|
224
|
+
error: {
|
|
225
|
+
message: 'Failed to create sync mapper record. ' + (0, logger_1.serializeError)(error),
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
return {
|
|
230
|
+
report: {
|
|
231
|
+
item_type: itemTypeToLoad.itemType,
|
|
232
|
+
[loading_1.ActionType.CREATED]: 1,
|
|
233
|
+
},
|
|
234
|
+
};
|
|
235
|
+
}
|
|
236
|
+
/** Maps a non-success connector response to a delay or a failed report. */
|
|
237
|
+
toFailedLoad(itemType, action, response) {
|
|
238
|
+
if (response.status === 'delay') {
|
|
239
|
+
console.log(`Rate limited during ${action} in external system, delaying for ${response.delaySeconds} seconds.`);
|
|
240
|
+
return { rateLimit: { delay: response.delaySeconds } };
|
|
241
|
+
}
|
|
242
|
+
console.warn(`Failed to ${action} item in external system.`, response.error.message);
|
|
243
|
+
return {
|
|
244
|
+
report: {
|
|
245
|
+
item_type: itemType,
|
|
246
|
+
[loading_1.ActionType.FAILED]: 1,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
async loadAttachment({ item, create, }) {
|
|
251
|
+
const response = await create({
|
|
252
|
+
item,
|
|
253
|
+
mappers: this.mappers,
|
|
254
|
+
event: this.event,
|
|
255
|
+
});
|
|
256
|
+
if (response.status !== 'success') {
|
|
257
|
+
return this.toFailedLoad('attachments', 'create', response);
|
|
258
|
+
}
|
|
259
|
+
try {
|
|
260
|
+
const syncMapperRecordCreate = await this.mappers.create({
|
|
261
|
+
sync_unit: this.event.payload.event_context.sync_unit,
|
|
262
|
+
external_ids: [response.id],
|
|
263
|
+
targets: [item.reference_id],
|
|
264
|
+
status: mappers_interfaces_1.SyncMapperRecordStatus.OPERATIONAL,
|
|
265
|
+
});
|
|
266
|
+
console.log('Successfully created sync mapper record.', syncMapperRecordCreate);
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
console.warn('Failed to create sync mapper record.', (0, logger_1.serializeError)(error));
|
|
270
|
+
}
|
|
271
|
+
return {
|
|
272
|
+
report: {
|
|
273
|
+
item_type: 'attachments',
|
|
274
|
+
[loading_1.ActionType.CREATED]: 1,
|
|
275
|
+
},
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
exports.LoadingAdapter = LoadingAdapter;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AxiosResponse } from 'axios';
|
|
2
|
+
import { AirSyncEvent, EventData, ExtractorEventType, WorkerMetadata } from '../types/extraction';
|
|
3
|
+
import { LoaderEventType } from '../types/loading';
|
|
4
|
+
export interface EmitInterface {
|
|
5
|
+
event: AirSyncEvent;
|
|
6
|
+
eventType: ExtractorEventType | LoaderEventType;
|
|
7
|
+
data?: EventData;
|
|
8
|
+
worker_metadata?: WorkerMetadata;
|
|
9
|
+
}
|
|
10
|
+
export declare const emit: ({ event, eventType, data, worker_metadata, }: EmitInterface) => Promise<AxiosResponse>;
|
|
11
|
+
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../src/multithreading/emit.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAItC,OAAO,EACL,YAAY,EACZ,SAAS,EAET,kBAAkB,EAClB,cAAc,EACf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,YAAY,CAAC;IACpB,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAChD,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,eAAe,CAAC,EAAE,cAAc,CAAC;CAClC;AAED,eAAO,MAAM,IAAI,GAAU,8CAKxB,aAAa,KAAG,OAAO,CAAC,aAAa,CA+BvC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.emit = void 0;
|
|
4
|
+
const constants_1 = require("../common/constants");
|
|
5
|
+
const client_1 = require("../http/client");
|
|
6
|
+
const emit = async ({ event, eventType, data, worker_metadata, }) => {
|
|
7
|
+
const newEvent = {
|
|
8
|
+
event_type: eventType,
|
|
9
|
+
event_context: event.payload.event_context,
|
|
10
|
+
event_data: Object.assign({}, data),
|
|
11
|
+
worker_metadata: Object.assign(Object.assign({}, worker_metadata), { newest_state_date: event.payload.event_context.extract_to, oldest_state_date: event.payload.event_context.extract_from, adaas_library_version: constants_1.LIBRARY_VERSION }),
|
|
12
|
+
};
|
|
13
|
+
console.info('Emitting event', newEvent);
|
|
14
|
+
return client_1.axiosClient.post(event.payload.event_context.callback_url, Object.assign({}, newEvent), {
|
|
15
|
+
headers: {
|
|
16
|
+
Accept: 'application/json, text/plain, */*',
|
|
17
|
+
Authorization: event.context.secrets.service_account_token,
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
'X-DevRev-Client-Platform': event.payload.event_context.snap_in_slug,
|
|
20
|
+
'X-DevRev-Client-Id': event.payload.event_context.snap_in_version_id,
|
|
21
|
+
'X-DevRev-Client-Version': constants_1.LIBRARY_VERSION,
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
exports.emit = emit;
|
|
@@ -1,3 +1,8 @@
|
|
|
1
1
|
import { ProcessTaskInterface } from '../types/workers';
|
|
2
|
-
|
|
2
|
+
import { ExtractionAdapter } from './adapters/extraction-adapter';
|
|
3
|
+
import { LoadingAdapter } from './adapters/loading-adapter';
|
|
4
|
+
/** Entry point for an extraction worker. @public */
|
|
5
|
+
export declare function processExtractionTask<ConnectorState>({ task, onTimeout, }: ProcessTaskInterface<ExtractionAdapter<ConnectorState>>): void;
|
|
6
|
+
/** Entry point for a loading worker. @public */
|
|
7
|
+
export declare function processLoadingTask<ConnectorState>({ task, onTimeout, }: ProcessTaskInterface<LoadingAdapter<ConnectorState>>): void;
|
|
3
8
|
//# sourceMappingURL=process-task.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-task.d.ts","sourceRoot":"","sources":["../../src/multithreading/process-task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"process-task.d.ts","sourceRoot":"","sources":["../../src/multithreading/process-task.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,oBAAoB,EAIrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAyF5D,oDAAoD;AACpD,wBAAgB,qBAAqB,CAAC,cAAc,EAAE,EACpD,IAAI,EACJ,SAAS,GACV,EAAE,oBAAoB,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC,QA6BzD;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,cAAc,EAAE,EACjD,IAAI,EACJ,SAAS,GACV,EAAE,oBAAoB,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,QA6BtD"}
|
|
@@ -1,93 +1,131 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.processExtractionTask = processExtractionTask;
|
|
4
|
+
exports.processLoadingTask = processLoadingTask;
|
|
4
5
|
const node_worker_threads_1 = require("node:worker_threads");
|
|
5
|
-
const event_type_translation_1 = require("../common/event-type-translation");
|
|
6
6
|
const logger_1 = require("../logger/logger");
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const extraction_state_1 = require("../state/extraction-state");
|
|
8
|
+
const loading_state_1 = require("../state/loading-state");
|
|
9
9
|
const workers_1 = require("../types/workers");
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
const extraction_adapter_1 = require("./adapters/extraction-adapter");
|
|
11
|
+
const loading_adapter_1 = require("./adapters/loading-adapter");
|
|
12
|
+
const spawn_helpers_1 = require("./spawn/spawn.helpers");
|
|
13
|
+
/**
|
|
14
|
+
* Shared worker-thread driver: builds the adapter, runs the task, maps the
|
|
15
|
+
* returned {@link TaskResult} to a platform event and emits it exactly once.
|
|
16
|
+
* On soft timeout a returned `progress` is replaced by the `onTimeout` result
|
|
17
|
+
* (or a phase-appropriate default), and so is a `success` in resumable phases.
|
|
18
|
+
* A returned `error` or `delay`, or a `success` in a non-resumable phase, is
|
|
19
|
+
* emitted as is.
|
|
20
|
+
*/
|
|
21
|
+
async function runWorkerTask(buildAdapter, { task, onTimeout }) {
|
|
22
|
+
let adapter;
|
|
23
|
+
try {
|
|
24
|
+
adapter = await buildAdapter();
|
|
25
|
+
const workerAdapter = adapter;
|
|
26
|
+
node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.on(workers_1.WorkerEvent.WorkerMessage, (message) => {
|
|
27
|
+
if (message.subject !== workers_1.WorkerMessageSubject.WorkerMessageExit) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
console.log('Timeout received. Waiting for the task to finish.');
|
|
31
|
+
workerAdapter.isTimeout = true;
|
|
32
|
+
});
|
|
33
|
+
console.log('Event passed from SDK to the connector:', adapter.event);
|
|
34
|
+
let result = await task({ adapter });
|
|
35
|
+
if (adapter.isTimeout) {
|
|
36
|
+
// A returned error or delay is a real outcome and must reach the
|
|
37
|
+
// platform. A success is replaced only where the phase can hand off
|
|
38
|
+
// with progress; a non-resumable phase that finished late is still done.
|
|
39
|
+
const eventType = adapter.event.payload.event_type;
|
|
40
|
+
const isResumable = !(0, spawn_helpers_1.getEventTypeForResult)(eventType, 'progress').illegal;
|
|
41
|
+
const canBeReplaced = result.status === 'progress' ||
|
|
42
|
+
(result.status === 'success' && isResumable);
|
|
43
|
+
if (canBeReplaced && onTimeout) {
|
|
44
|
+
result = await onTimeout({ adapter });
|
|
45
|
+
}
|
|
46
|
+
else if (canBeReplaced) {
|
|
47
|
+
result = isResumable
|
|
48
|
+
? { status: 'progress' }
|
|
49
|
+
: {
|
|
50
|
+
status: 'error',
|
|
51
|
+
error: {
|
|
52
|
+
message: `Worker timed out during a non-resumable phase (${eventType}), which cannot be continued.`,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
await adapter.emitFromResult(result);
|
|
58
|
+
process.exit(0);
|
|
14
59
|
}
|
|
15
|
-
|
|
16
|
-
|
|
60
|
+
catch (error) {
|
|
61
|
+
if (adapter && !adapter.hasWorkerEmitted) {
|
|
17
62
|
try {
|
|
18
|
-
|
|
19
|
-
// TODO: Remove when the old types are completely phased out
|
|
20
|
-
event.payload.event_type = (0, event_type_translation_1.translateIncomingEventType)(event.payload.event_type);
|
|
21
|
-
const initialState = node_worker_threads_1.workerData.initialState;
|
|
22
|
-
const initialDomainMapping = node_worker_threads_1.workerData.initialDomainMapping;
|
|
23
|
-
const options = node_worker_threads_1.workerData.options;
|
|
24
|
-
// eslint-disable-next-line no-global-assign
|
|
25
|
-
console = new logger_1.Logger({ event, options });
|
|
26
|
-
const adapterState = await (0, state_1.createAdapterState)({
|
|
27
|
-
event,
|
|
28
|
-
initialState,
|
|
29
|
-
initialDomainMapping,
|
|
30
|
-
options,
|
|
31
|
-
});
|
|
32
|
-
const adapter = new worker_adapter_1.WorkerAdapter({
|
|
33
|
-
event,
|
|
34
|
-
adapterState,
|
|
35
|
-
options,
|
|
36
|
-
});
|
|
37
|
-
// Timeout handling flow:
|
|
38
|
-
// The task() runs in the main flow below. Meanwhile, the parent thread may send
|
|
39
|
-
// a timeout message at any point. When that happens, the message handler signals
|
|
40
|
-
// the adapter to stop (handleTimeout), waits for task() to finish, then runs onTimeout().
|
|
41
|
-
// If task() completes before any timeout message arrives, the worker exits normally.
|
|
42
|
-
// isTimeoutReceived prevents both flows from calling process.exit.
|
|
43
|
-
let isTimeoutReceived = false;
|
|
44
|
-
let taskExecution;
|
|
45
|
-
node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.on(workers_1.WorkerEvent.WorkerMessage, (message) => {
|
|
46
|
-
if (message.subject !== workers_1.WorkerMessageSubject.WorkerMessageExit) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
isTimeoutReceived = true;
|
|
50
|
-
void (0, logger_context_1.runWithSdkLogContext)(async () => {
|
|
51
|
-
try {
|
|
52
|
-
console.log('Timeout received. Waiting for the task to finish.');
|
|
53
|
-
adapter.handleTimeout();
|
|
54
|
-
try {
|
|
55
|
-
await taskExecution;
|
|
56
|
-
}
|
|
57
|
-
catch (taskError) {
|
|
58
|
-
console.warn('Task error during timeout:', (0, logger_1.serializeError)(taskError));
|
|
59
|
-
}
|
|
60
|
-
console.log('Task finished. Running onTimeout handler.');
|
|
61
|
-
await (0, logger_context_1.runWithUserLogContext)(async () => onTimeout({ adapter }));
|
|
62
|
-
console.log('onTimeout handler complete. Exiting worker.');
|
|
63
|
-
process.exit(0);
|
|
64
|
-
}
|
|
65
|
-
catch (onTimeoutError) {
|
|
66
|
-
console.error('Error in onTimeout handler:', (0, logger_1.serializeError)(onTimeoutError));
|
|
67
|
-
process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
taskExecution = (0, logger_context_1.runWithUserLogContext)(async () => task({ adapter }));
|
|
72
|
-
try {
|
|
73
|
-
await taskExecution;
|
|
74
|
-
}
|
|
75
|
-
catch (taskError) {
|
|
76
|
-
if (isTimeoutReceived) {
|
|
77
|
-
console.log('Task threw during timeout. Letting timeout handler finish.');
|
|
78
|
-
return;
|
|
79
|
-
}
|
|
80
|
-
throw taskError;
|
|
81
|
-
}
|
|
82
|
-
if (!isTimeoutReceived) {
|
|
83
|
-
console.log('Task completed. Exiting worker.');
|
|
84
|
-
process.exit(0);
|
|
85
|
-
}
|
|
63
|
+
await adapter.emitError(error);
|
|
86
64
|
}
|
|
87
|
-
catch (
|
|
88
|
-
console.error('Error while
|
|
89
|
-
process.exit(1);
|
|
65
|
+
catch (emitError) {
|
|
66
|
+
console.error('Error while emitting task failure.', (0, logger_1.serializeError)(emitError));
|
|
90
67
|
}
|
|
68
|
+
}
|
|
69
|
+
if (adapter === null || adapter === void 0 ? void 0 : adapter.hasWorkerEmitted) {
|
|
70
|
+
process.exit(1);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const errorMessage = `Error while processing task. ${(0, logger_1.serializeError)(error)}`;
|
|
74
|
+
console.error(errorMessage);
|
|
75
|
+
node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
|
|
76
|
+
subject: workers_1.WorkerMessageSubject.WorkerMessageFailed,
|
|
77
|
+
payload: { message: errorMessage },
|
|
78
|
+
});
|
|
79
|
+
process.exit(1);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Entry point for an extraction worker. @public */
|
|
83
|
+
function processExtractionTask({ task, onTimeout, }) {
|
|
84
|
+
if (node_worker_threads_1.isMainThread) {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
void runWorkerTask(async () => {
|
|
88
|
+
const event = node_worker_threads_1.workerData.event;
|
|
89
|
+
const initialState = node_worker_threads_1.workerData.initialState;
|
|
90
|
+
const initialDomainMapping = node_worker_threads_1.workerData.initialDomainMapping;
|
|
91
|
+
const options = node_worker_threads_1.workerData.options;
|
|
92
|
+
// eslint-disable-next-line no-global-assign
|
|
93
|
+
console = new logger_1.Logger({ event, options });
|
|
94
|
+
const adapterState = await (0, extraction_state_1.createExtractionState)({
|
|
95
|
+
event,
|
|
96
|
+
initialState,
|
|
97
|
+
initialDomainMapping,
|
|
98
|
+
options,
|
|
99
|
+
});
|
|
100
|
+
return new extraction_adapter_1.ExtractionAdapter({
|
|
101
|
+
event,
|
|
102
|
+
adapterState,
|
|
103
|
+
options,
|
|
104
|
+
});
|
|
105
|
+
}, { task, onTimeout });
|
|
106
|
+
}
|
|
107
|
+
/** Entry point for a loading worker. @public */
|
|
108
|
+
function processLoadingTask({ task, onTimeout, }) {
|
|
109
|
+
if (node_worker_threads_1.isMainThread) {
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
void runWorkerTask(async () => {
|
|
113
|
+
const event = node_worker_threads_1.workerData.event;
|
|
114
|
+
const initialState = node_worker_threads_1.workerData.initialState;
|
|
115
|
+
const initialDomainMapping = node_worker_threads_1.workerData.initialDomainMapping;
|
|
116
|
+
const options = node_worker_threads_1.workerData.options;
|
|
117
|
+
// eslint-disable-next-line no-global-assign
|
|
118
|
+
console = new logger_1.Logger({ event, options });
|
|
119
|
+
const adapterState = await (0, loading_state_1.createLoadingState)({
|
|
120
|
+
event,
|
|
121
|
+
initialState,
|
|
122
|
+
initialDomainMapping,
|
|
123
|
+
options,
|
|
124
|
+
});
|
|
125
|
+
return new loading_adapter_1.LoadingAdapter({
|
|
126
|
+
event,
|
|
127
|
+
adapterState,
|
|
128
|
+
options,
|
|
91
129
|
});
|
|
92
|
-
})
|
|
130
|
+
}, { task, onTimeout });
|
|
93
131
|
}
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { SpawnFactoryInterface, SpawnInterface } from '../../types/workers';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* The class provides utilities to emit control events to the platform and exit the worker gracefully.
|
|
6
|
-
* In case of lambda timeout, the class emits a lambda timeout event to the platform.
|
|
7
|
-
* @param {SpawnFactoryInterface} options - The options to create a new instance of Spawn class
|
|
8
|
-
* @param {AirdropEvent} options.event - The event object received from the platform
|
|
9
|
-
* @param {object} options.initialState - The initial state of the adapter
|
|
10
|
-
* @param {string} [options.workerPath] Remove getWorkerPath function and use baseWorkerPath: __dirname instead of workerPath
|
|
11
|
-
* @param {string} [options.baseWorkerPath] - The base path for the worker files, usually `__dirname`
|
|
12
|
-
* @returns {Promise<Spawn>} - A new instance of Spawn class
|
|
3
|
+
* Local mode is opt-in through AIRSYNC_LOCAL_DEVELOPMENT only, and refused on
|
|
4
|
+
* Lambda so a stray flag can never change production behavior.
|
|
13
5
|
*/
|
|
14
|
-
export declare function
|
|
6
|
+
export declare function isLocalDevelopment(env?: NodeJS.ProcessEnv): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Spawns a worker thread for the event and manages its lifecycle (control
|
|
9
|
+
* events, graceful exit, lambda timeout handling). Resolves when the worker
|
|
10
|
+
* run is fully finished.
|
|
11
|
+
*/
|
|
12
|
+
export declare function spawn<ConnectorState>({ event, initialState, initialDomainMapping, options: spawnOptions, baseWorkerPath, workerPathOverrides, }: SpawnFactoryInterface<ConnectorState>): Promise<void>;
|
|
15
13
|
export declare class Spawn {
|
|
16
14
|
private event;
|
|
17
15
|
private alreadyEmitted;
|
|
@@ -24,6 +22,7 @@ export declare class Spawn {
|
|
|
24
22
|
private resolve;
|
|
25
23
|
private originalConsole;
|
|
26
24
|
private logger;
|
|
25
|
+
private workerFailedMessage;
|
|
27
26
|
constructor({ event, worker, options, resolve, originalConsole, }: SpawnInterface);
|
|
28
27
|
private clearTimeouts;
|
|
29
28
|
private exitFromMainThread;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.ts"],"names":[],"mappings":"AASA,OAAO,EAGL,qBAAqB,EACrB,cAAc,EAGf,MAAM,qBAAqB,CAAC;AAe7B;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,oBAAc,GAAG,OAAO,CAY7D;AAoCD;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,cAAc,EAAE,EAC1C,KAAK,EACL,YAAY,EACZ,oBAAoB,EACpB,OAAO,EAAE,YAAY,EACrB,cAAc,EACd,mBAAmB,GACpB,EAAE,qBAAqB,CAAC,cAAc,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DvD;AAED,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAe;IAC5B,OAAO,CAAC,cAAc,CAAU;IAChC,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,oBAAoB,CAAkC;IAC9D,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,gBAAgB,CAA4C;IACpE,OAAO,CAAC,wBAAwB,CAA6C;IAC7E,OAAO,CAAC,OAAO,CAA4C;IAC3D,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,mBAAmB,CAAqB;gBACpC,EACV,KAAK,EACL,MAAM,EACN,OAAO,EACP,OAAO,EACP,eAAe,GAChB,EAAE,cAAc;IA0GjB,OAAO,CAAC,aAAa;YAYP,kBAAkB;CAoCjC"}
|
|
@@ -1,21 +1,22 @@
|
|
|
1
1
|
import { EventType, ExtractorEventType } from '../../types/extraction';
|
|
2
2
|
import { LoaderEventType } from '../../types/loading';
|
|
3
|
+
import { TaskStatus } from '../../types/workers';
|
|
3
4
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @
|
|
6
|
-
*
|
|
5
|
+
* Resolves the outgoing event type to emit for an incoming event type and a
|
|
6
|
+
* {@link TaskResult} status. Resumable phases honor every status
|
|
7
|
+
* (success/progress/delay/error -> *_DONE/*_PROGRESS/*_DELAYED/*_ERROR);
|
|
8
|
+
* non-resumable phases only have done/error, so `progress`/`delay` there is
|
|
9
|
+
* illegal and maps to the phase's error event.
|
|
7
10
|
*/
|
|
11
|
+
export declare function getEventTypeForResult(eventType: EventType, status: TaskStatus): {
|
|
12
|
+
eventType: ExtractorEventType | LoaderEventType;
|
|
13
|
+
illegal: boolean;
|
|
14
|
+
};
|
|
8
15
|
export declare function getTimeoutErrorEventType(eventType: EventType): {
|
|
9
16
|
eventType: ExtractorEventType | LoaderEventType;
|
|
10
17
|
};
|
|
11
|
-
/**
|
|
12
|
-
* Gets the event type for the no script error.
|
|
13
|
-
* @param {EventType} eventType - The event type to get the no script error event type for
|
|
14
|
-
* @returns {ExtractorEventType | LoaderEventType} The event type for the no script error
|
|
15
|
-
*/
|
|
18
|
+
/** Event type to emit when no worker script exists for the incoming event. */
|
|
16
19
|
export declare function getNoScriptEventType(eventType: EventType): {
|
|
17
|
-
eventType: ExtractorEventType;
|
|
18
|
-
} | {
|
|
19
|
-
eventType: LoaderEventType;
|
|
20
|
+
eventType: ExtractorEventType | LoaderEventType;
|
|
20
21
|
};
|
|
21
22
|
//# sourceMappingURL=spawn.helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.helpers.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"spawn.helpers.d.ts","sourceRoot":"","sources":["../../../src/multithreading/spawn/spawn.helpers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,UAAU,GACjB;IACD,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;IAChD,OAAO,EAAE,OAAO,CAAC;CAClB,CAiCA;AAgHD,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,SAAS,GAAG;IAC9D,SAAS,EAAE,kBAAkB,GAAG,eAAe,CAAC;CACjD,CAEA;AAED,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS;eA+BhB,kBAAkB,GAAG,eAAe;EAG5E"}
|