@strapi/data-transfer 5.42.1 → 5.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/directory/providers/source/index.d.ts.map +1 -1
- package/dist/directory/providers/source/index.js +3 -2
- package/dist/directory/providers/source/index.js.map +1 -1
- package/dist/directory/providers/source/index.mjs +3 -2
- package/dist/directory/providers/source/index.mjs.map +1 -1
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +130 -5
- package/dist/engine/index.js.map +1 -1
- package/dist/engine/index.mjs +130 -5
- package/dist/engine/index.mjs.map +1 -1
- package/dist/engine/validation/schemas/index.js +2 -0
- package/dist/engine/validation/schemas/index.js.map +1 -1
- package/dist/engine/validation/schemas/index.mjs +2 -0
- package/dist/engine/validation/schemas/index.mjs.map +1 -1
- package/dist/file/providers/source/index.d.ts.map +1 -1
- package/dist/file/providers/source/index.js +84 -45
- package/dist/file/providers/source/index.js.map +1 -1
- package/dist/file/providers/source/index.mjs +85 -46
- package/dist/file/providers/source/index.mjs.map +1 -1
- package/dist/strapi/providers/index.js +2 -0
- package/dist/strapi/providers/index.js.map +1 -1
- package/dist/strapi/providers/index.mjs +1 -0
- package/dist/strapi/providers/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts +22 -0
- package/dist/strapi/providers/local-destination/assets-destination-writable.d.ts.map +1 -0
- package/dist/strapi/providers/local-destination/assets-destination-writable.js +107 -0
- package/dist/strapi/providers/local-destination/assets-destination-writable.js.map +1 -0
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs +105 -0
- package/dist/strapi/providers/local-destination/assets-destination-writable.mjs.map +1 -0
- package/dist/strapi/providers/local-destination/index.d.ts +2 -0
- package/dist/strapi/providers/local-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-destination/index.js +18 -79
- package/dist/strapi/providers/local-destination/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/index.mjs +18 -79
- package/dist/strapi/providers/local-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js +2 -0
- package/dist/strapi/providers/local-destination/strategies/restore/entities.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs +2 -0
- package/dist/strapi/providers/local-destination/strategies/restore/entities.mjs.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.js +2 -0
- package/dist/strapi/providers/local-destination/strategies/restore/index.js.map +1 -1
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs +2 -0
- package/dist/strapi/providers/local-destination/strategies/restore/index.mjs.map +1 -1
- package/dist/strapi/providers/local-source/assets.d.ts +8 -1
- package/dist/strapi/providers/local-source/assets.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/assets.js +47 -19
- package/dist/strapi/providers/local-source/assets.js.map +1 -1
- package/dist/strapi/providers/local-source/assets.mjs +46 -20
- package/dist/strapi/providers/local-source/assets.mjs.map +1 -1
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts +11 -0
- package/dist/strapi/providers/local-source/estimate-asset-totals.d.ts.map +1 -0
- package/dist/strapi/providers/local-source/estimate-asset-totals.js +130 -0
- package/dist/strapi/providers/local-source/estimate-asset-totals.js.map +1 -0
- package/dist/strapi/providers/local-source/estimate-asset-totals.mjs +128 -0
- package/dist/strapi/providers/local-source/estimate-asset-totals.mjs.map +1 -0
- package/dist/strapi/providers/local-source/index.d.ts +3 -2
- package/dist/strapi/providers/local-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/local-source/index.js +30 -3
- package/dist/strapi/providers/local-source/index.js.map +1 -1
- package/dist/strapi/providers/local-source/index.mjs +30 -4
- package/dist/strapi/providers/local-source/index.mjs.map +1 -1
- package/dist/strapi/providers/remote-destination/index.d.ts +3 -1
- package/dist/strapi/providers/remote-destination/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-destination/index.js +88 -19
- package/dist/strapi/providers/remote-destination/index.js.map +1 -1
- package/dist/strapi/providers/remote-destination/index.mjs +89 -20
- package/dist/strapi/providers/remote-destination/index.mjs.map +1 -1
- package/dist/strapi/providers/remote-source/index.d.ts +6 -3
- package/dist/strapi/providers/remote-source/index.d.ts.map +1 -1
- package/dist/strapi/providers/remote-source/index.js +180 -47
- package/dist/strapi/providers/remote-source/index.js.map +1 -1
- package/dist/strapi/providers/remote-source/index.mjs +181 -48
- package/dist/strapi/providers/remote-source/index.mjs.map +1 -1
- package/dist/strapi/providers/utils.d.ts +9 -6
- package/dist/strapi/providers/utils.d.ts.map +1 -1
- package/dist/strapi/providers/utils.js +9 -4
- package/dist/strapi/providers/utils.js.map +1 -1
- package/dist/strapi/providers/utils.mjs +9 -4
- package/dist/strapi/providers/utils.mjs.map +1 -1
- package/dist/strapi/remote/handlers/pull.d.ts +1 -0
- package/dist/strapi/remote/handlers/pull.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/pull.js +36 -15
- package/dist/strapi/remote/handlers/pull.js.map +1 -1
- package/dist/strapi/remote/handlers/pull.mjs +37 -16
- package/dist/strapi/remote/handlers/pull.mjs.map +1 -1
- package/dist/strapi/remote/handlers/push.d.ts +13 -2
- package/dist/strapi/remote/handlers/push.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/push.js +81 -34
- package/dist/strapi/remote/handlers/push.js.map +1 -1
- package/dist/strapi/remote/handlers/push.mjs +82 -35
- package/dist/strapi/remote/handlers/push.mjs.map +1 -1
- package/dist/strapi/remote/handlers/utils.d.ts.map +1 -1
- package/dist/strapi/remote/handlers/utils.js +5 -3
- package/dist/strapi/remote/handlers/utils.js.map +1 -1
- package/dist/strapi/remote/handlers/utils.mjs +5 -3
- package/dist/strapi/remote/handlers/utils.mjs.map +1 -1
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/index.mjs +2 -0
- package/dist/utils/index.mjs.map +1 -1
- package/dist/utils/stream.d.ts.map +1 -1
- package/dist/utils/stream.js +40 -3
- package/dist/utils/stream.js.map +1 -1
- package/dist/utils/stream.mjs +40 -3
- package/dist/utils/stream.mjs.map +1 -1
- package/dist/utils/transfer-asset-chunk.d.ts +41 -0
- package/dist/utils/transfer-asset-chunk.d.ts.map +1 -0
- package/dist/utils/transfer-asset-chunk.js +93 -0
- package/dist/utils/transfer-asset-chunk.js.map +1 -0
- package/dist/utils/transfer-asset-chunk.mjs +88 -0
- package/dist/utils/transfer-asset-chunk.mjs.map +1 -0
- package/dist/utils/transfer-websocket-json.d.ts +24 -0
- package/dist/utils/transfer-websocket-json.d.ts.map +1 -0
- package/dist/utils/transfer-websocket-json.js +67 -0
- package/dist/utils/transfer-websocket-json.js.map +1 -0
- package/dist/utils/transfer-websocket-json.mjs +63 -0
- package/dist/utils/transfer-websocket-json.mjs.map +1 -0
- package/dist/utils/writable-async-write.d.ts +17 -0
- package/dist/utils/writable-async-write.d.ts.map +1 -0
- package/dist/utils/writable-async-write.js +61 -0
- package/dist/utils/writable-async-write.js.map +1 -0
- package/dist/utils/writable-async-write.mjs +59 -0
- package/dist/utils/writable-async-write.mjs.map +1 -0
- package/package.json +8 -8
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHash } from 'crypto';
|
|
2
|
+
import { PassThrough, Writable } from 'stream';
|
|
2
3
|
import { castArray } from 'lodash/fp';
|
|
3
4
|
import { ProviderValidationError, ProviderTransferError } from '../../../errors/providers.mjs';
|
|
4
5
|
import { TRANSFER_PATH } from '../../remote/constants.mjs';
|
|
6
|
+
import { decodeTransferAssetStreamItem } from '../../../utils/transfer-asset-chunk.mjs';
|
|
7
|
+
import { write } from '../../../utils/writable-async-write.mjs';
|
|
5
8
|
import { trimTrailingSlash, connectToWebsocket, createDispatcher } from '../utils.mjs';
|
|
6
9
|
|
|
7
10
|
function _class_private_field_loose_base(receiver, privateKey) {
|
|
@@ -14,7 +17,15 @@ var id = 0;
|
|
|
14
17
|
function _class_private_field_loose_key(name) {
|
|
15
18
|
return "__private_" + id++ + "_" + name;
|
|
16
19
|
}
|
|
17
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Pull server answers `assets` step `start` only after `estimateAssetTotals` (DB stream; remote sizes from DB when complete, else HTTP like `createAssetsStream`).
|
|
22
|
+
* That can exceed the default dispatcher wait (~30s between resends, a few minutes total). This message
|
|
23
|
+
* uses a longer window so large libraries do not fail with `Request timed out` before totals are returned.
|
|
24
|
+
*/ const ASSETS_START_RETRY_OVERRIDES = {
|
|
25
|
+
retryMessageTimeout: 120000,
|
|
26
|
+
retryMessageMaxRetries: 30
|
|
27
|
+
};
|
|
28
|
+
var _diagnostics = /*#__PURE__*/ _class_private_field_loose_key("_diagnostics"), _pullAssetStreamWireSampleLogged = /*#__PURE__*/ _class_private_field_loose_key("_pullAssetStreamWireSampleLogged"), _checksumsEnabled = /*#__PURE__*/ _class_private_field_loose_key("_checksumsEnabled"), /** Set from pull server `start` response for `assets` when present (for engine `getStageTotals`). */ _cachedAssetsTotals = /*#__PURE__*/ _class_private_field_loose_key("_cachedAssetsTotals"), _createStageReadStream = /*#__PURE__*/ _class_private_field_loose_key("_createStageReadStream"), _reportInfo = /*#__PURE__*/ _class_private_field_loose_key("_reportInfo"), /** Reports a warning diagnostic (`kind: 'warning'`). Consumers (e.g. CLI) choose log levels and routing. */ _reportWarning = /*#__PURE__*/ _class_private_field_loose_key("_reportWarning"), _startStep = /*#__PURE__*/ _class_private_field_loose_key("_startStep"), _respond = /*#__PURE__*/ _class_private_field_loose_key("_respond"), _endStep = /*#__PURE__*/ _class_private_field_loose_key("_endStep");
|
|
18
29
|
class RemoteStrapiSourceProvider {
|
|
19
30
|
createEntitiesReadStream() {
|
|
20
31
|
return _class_private_field_loose_base(this, _createStageReadStream)[_createStageReadStream]('entities');
|
|
@@ -30,50 +41,71 @@ class RemoteStrapiSourceProvider {
|
|
|
30
41
|
});
|
|
31
42
|
// Init the asset map
|
|
32
43
|
const assets = {};
|
|
33
|
-
// Watch for stalled assets
|
|
44
|
+
// Watch for stalled assets: no remote chunks and no completed writes to the asset stream for streamTimeout ms
|
|
34
45
|
const resetTimeout = (assetID)=>{
|
|
46
|
+
if (!assets[assetID]) {
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
35
49
|
if (assets[assetID].timeout) {
|
|
36
50
|
clearTimeout(assets[assetID].timeout);
|
|
37
51
|
}
|
|
38
52
|
assets[assetID].timeout = setTimeout(()=>{
|
|
53
|
+
if (!assets[assetID]) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
39
56
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo](`Asset ${assetID} transfer stalled, aborting.`);
|
|
40
57
|
assets[assetID].status = 'errored';
|
|
41
58
|
assets[assetID].stream.destroy(new Error(`Asset ${assetID} transfer timed out`));
|
|
42
59
|
}, this.options.streamTimeout);
|
|
43
60
|
};
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
61
|
+
const clearStallTimeoutForAsset = (assetID)=>{
|
|
62
|
+
const entry = assets[assetID];
|
|
63
|
+
if (entry?.timeout) {
|
|
64
|
+
clearTimeout(entry.timeout);
|
|
65
|
+
entry.timeout = undefined;
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
const clearAllStallTimeouts = ()=>{
|
|
69
|
+
for (const id of Object.keys(assets)){
|
|
70
|
+
clearStallTimeoutForAsset(id);
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
/**
|
|
74
|
+
* Serialize asset batch handling: `Readable.on('data', async …)` does not apply backpressure,
|
|
75
|
+
* so we pipe through a Writable with highWaterMark 1 so only one batch is in flight.
|
|
76
|
+
*/ const processAssetPayload = async (payload)=>{
|
|
50
77
|
for (const item of payload){
|
|
51
78
|
const { action, assetID } = item;
|
|
52
|
-
// Creates the stream to send the incoming asset through
|
|
53
79
|
if (action === 'start') {
|
|
54
|
-
// if a transfer has already been started for the same asset ID, something is wrong
|
|
55
80
|
if (assets[assetID]) {
|
|
56
81
|
throw new Error(`Asset ${assetID} already started`);
|
|
57
82
|
}
|
|
58
83
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo](`Asset ${assetID} starting`);
|
|
59
|
-
// Register the asset
|
|
60
84
|
assets[assetID] = {
|
|
61
85
|
...item.data,
|
|
62
86
|
stream: new PassThrough(),
|
|
63
87
|
status: 'ok',
|
|
64
|
-
queue: []
|
|
88
|
+
queue: [],
|
|
89
|
+
..._class_private_field_loose_base(this, _checksumsEnabled)[_checksumsEnabled] ? {
|
|
90
|
+
checksumHash: createHash('sha256')
|
|
91
|
+
} : {}
|
|
65
92
|
};
|
|
66
93
|
resetTimeout(assetID);
|
|
67
|
-
|
|
68
|
-
// Note: nothing is transferred until data chunks are fed to the asset stream
|
|
69
|
-
await this.writeAsync(pass, assets[assetID]);
|
|
94
|
+
await write(pass, assets[assetID]);
|
|
70
95
|
} else if (action === 'stream' || action === 'end') {
|
|
71
|
-
// If the asset hasn't been registered, or if it's been closed already, something is wrong
|
|
72
96
|
if (!assets[assetID]) {
|
|
73
97
|
throw new Error(`No id matching ${assetID} for stream action`);
|
|
74
98
|
}
|
|
75
|
-
// On every action, reset the timeout timer
|
|
76
99
|
if (action === 'stream') {
|
|
100
|
+
if (!_class_private_field_loose_base(this, _pullAssetStreamWireSampleLogged)[_pullAssetStreamWireSampleLogged]) {
|
|
101
|
+
_class_private_field_loose_base(this, _pullAssetStreamWireSampleLogged)[_pullAssetStreamWireSampleLogged] = true;
|
|
102
|
+
const { data } = item;
|
|
103
|
+
// Same legacy shape `decodeTransferAssetStreamData` accepts after JSON.parse (proof, not frame-size guess).
|
|
104
|
+
const legacyBufferJson = data && typeof data === 'object' && !Buffer.isBuffer(data) && data.type === 'Buffer' && (Array.isArray(data.data) || ArrayBuffer.isView(data.data));
|
|
105
|
+
if (legacyBufferJson) {
|
|
106
|
+
_class_private_field_loose_base(this, _reportWarning)[_reportWarning]('[Data transfer][pull] Remote is using legacy Buffer JSON for asset chunks (each byte as a JSON number). That uses much more memory during JSON.parse than base64. Upgrade the remote Strapi to a version that sends base64 asset chunks, or out-of-memory errors may still happen on large files.');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
77
109
|
resetTimeout(assetID);
|
|
78
110
|
} else {
|
|
79
111
|
clearTimeout(assets[assetID].timeout);
|
|
@@ -84,8 +116,6 @@ class RemoteStrapiSourceProvider {
|
|
|
84
116
|
assets[assetID].queue.push(item);
|
|
85
117
|
}
|
|
86
118
|
}
|
|
87
|
-
// each new payload will start new processQueue calls, which may cause some extra calls
|
|
88
|
-
// it's essentially saying "start processing this asset again, I added more data to the queue"
|
|
89
119
|
for(const assetID in assets){
|
|
90
120
|
if (Object.prototype.hasOwnProperty.call(assets, assetID)) {
|
|
91
121
|
const asset = assets[assetID];
|
|
@@ -94,9 +124,37 @@ class RemoteStrapiSourceProvider {
|
|
|
94
124
|
}
|
|
95
125
|
}
|
|
96
126
|
}
|
|
97
|
-
}
|
|
98
|
-
|
|
127
|
+
};
|
|
128
|
+
const processor = new Writable({
|
|
129
|
+
objectMode: true,
|
|
130
|
+
highWaterMark: 1,
|
|
131
|
+
write (payload, _encoding, callback) {
|
|
132
|
+
processAssetPayload(payload).then(()=>{
|
|
133
|
+
callback();
|
|
134
|
+
}, (err)=>{
|
|
135
|
+
clearAllStallTimeouts();
|
|
136
|
+
stream.destroy(err);
|
|
137
|
+
callback(err);
|
|
138
|
+
});
|
|
139
|
+
},
|
|
140
|
+
final (callback) {
|
|
141
|
+
pass.end();
|
|
142
|
+
callback();
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
processor.on('error', (err)=>{
|
|
146
|
+
clearAllStallTimeouts();
|
|
147
|
+
pass.destroy(err);
|
|
148
|
+
});
|
|
149
|
+
stream.on('error', (err)=>{
|
|
150
|
+
clearAllStallTimeouts();
|
|
151
|
+
processor.destroy(err);
|
|
152
|
+
pass.destroy(err);
|
|
99
153
|
});
|
|
154
|
+
stream.once('end', ()=>{
|
|
155
|
+
clearAllStallTimeouts();
|
|
156
|
+
});
|
|
157
|
+
stream.pipe(processor);
|
|
100
158
|
/**
|
|
101
159
|
* Start processing the queue for a given assetID
|
|
102
160
|
*
|
|
@@ -123,15 +181,20 @@ class RemoteStrapiSourceProvider {
|
|
|
123
181
|
// if this is an end chunk, close the asset stream
|
|
124
182
|
if (data.action === 'end') {
|
|
125
183
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo](`Ending asset stream for ${id}`);
|
|
126
|
-
await closeAssetStream(id);
|
|
184
|
+
await closeAssetStream(id, data.checksum);
|
|
127
185
|
break; // Exit the loop after closing the stream
|
|
128
186
|
}
|
|
129
187
|
// Save the current chunk
|
|
130
188
|
await writeChunkToStream(id, data);
|
|
131
|
-
} catch
|
|
189
|
+
} catch (error) {
|
|
132
190
|
if (!assets[id]) {
|
|
133
191
|
throw new Error(`No id matching ${id} for writeAssetChunk`);
|
|
134
192
|
}
|
|
193
|
+
clearStallTimeoutForAsset(id);
|
|
194
|
+
if (error instanceof Error) {
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
197
|
+
throw new Error(`Unexpected error while processing asset chunk for "${id}"`);
|
|
135
198
|
}
|
|
136
199
|
}
|
|
137
200
|
};
|
|
@@ -139,30 +202,52 @@ class RemoteStrapiSourceProvider {
|
|
|
139
202
|
* Writes a chunk of data to the asset's stream.
|
|
140
203
|
*
|
|
141
204
|
* Only check if the targeted asset exists, no other validation is done.
|
|
142
|
-
*/ const writeChunkToStream = async (id,
|
|
205
|
+
*/ const writeChunkToStream = async (id, item)=>{
|
|
143
206
|
const asset = assets[id];
|
|
144
207
|
if (!asset) {
|
|
145
208
|
throw new Error(`Failed to write asset chunk for "${id}". Asset not found.`);
|
|
146
209
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
210
|
+
if (item.action !== 'stream') {
|
|
211
|
+
throw new Error(`Expected stream queue item for "${id}"`);
|
|
212
|
+
}
|
|
213
|
+
const chunk = decodeTransferAssetStreamItem(item);
|
|
214
|
+
asset.checksumHash?.update(chunk);
|
|
215
|
+
await write(asset.stream, chunk);
|
|
216
|
+
// Count slow draining as progress so backpressure on large chunks does not trip the stall timer
|
|
217
|
+
resetTimeout(id);
|
|
150
218
|
};
|
|
151
219
|
/**
|
|
152
220
|
* Closes the asset stream associated with the given ID.
|
|
153
221
|
*
|
|
154
222
|
* It deletes the stream for the asset upon successful closure.
|
|
155
|
-
*/ const closeAssetStream = async (id)=>{
|
|
223
|
+
*/ const closeAssetStream = async (id, checksum)=>{
|
|
156
224
|
if (!assets[id]) {
|
|
157
225
|
throw new Error(`Failed to close asset "${id}". Asset not found.`);
|
|
158
226
|
}
|
|
159
|
-
assets[id]
|
|
227
|
+
const asset = assets[id];
|
|
228
|
+
// The queue processes stream chunks before `end`; the last `writeChunkToStream` calls
|
|
229
|
+
// `resetTimeout` after the `end` chunk already cleared the timer — clear again before closing.
|
|
230
|
+
clearStallTimeoutForAsset(id);
|
|
231
|
+
if (_class_private_field_loose_base(this, _checksumsEnabled)[_checksumsEnabled]) {
|
|
232
|
+
if (!checksum) {
|
|
233
|
+
throw new ProviderTransferError(`Asset ${id} is missing checksum in transfer end payload`);
|
|
234
|
+
}
|
|
235
|
+
if (checksum.algorithm !== 'sha256') {
|
|
236
|
+
throw new ProviderTransferError(`Asset ${id} checksum algorithm "${checksum.algorithm}" is not supported`);
|
|
237
|
+
}
|
|
238
|
+
const actual = asset.checksumHash?.digest('hex');
|
|
239
|
+
if (!actual || actual !== checksum.value) {
|
|
240
|
+
throw new ProviderTransferError(`Checksum mismatch for asset "${id}" (expected ${checksum.value}, got ${actual ?? 'none'})`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
asset.status = 'closed';
|
|
160
244
|
await new Promise((resolve, reject)=>{
|
|
161
|
-
const { stream } =
|
|
245
|
+
const { stream } = asset;
|
|
162
246
|
stream.on('close', ()=>{
|
|
247
|
+
delete assets[id];
|
|
163
248
|
resolve();
|
|
164
249
|
}).on('error', (e)=>{
|
|
165
|
-
assets[id]
|
|
250
|
+
delete assets[id];
|
|
166
251
|
reject(new Error(`Failed to close asset "${id}". Asset stream error: ${e.toString()}`));
|
|
167
252
|
}).end();
|
|
168
253
|
});
|
|
@@ -192,13 +277,24 @@ class RemoteStrapiSourceProvider {
|
|
|
192
277
|
}
|
|
193
278
|
}
|
|
194
279
|
async initTransfer() {
|
|
280
|
+
const wantsChecksums = this.options.verifyChecksums === true;
|
|
195
281
|
const query = this.dispatcher?.dispatchCommand({
|
|
196
|
-
command: 'init'
|
|
282
|
+
command: 'init',
|
|
283
|
+
...wantsChecksums ? {
|
|
284
|
+
params: {
|
|
285
|
+
transfer: 'pull',
|
|
286
|
+
checksums: true
|
|
287
|
+
}
|
|
288
|
+
} : {}
|
|
197
289
|
});
|
|
198
290
|
const res = await query;
|
|
199
291
|
if (!res?.transferID) {
|
|
200
292
|
throw new ProviderTransferError('Init failed, invalid response from the server');
|
|
201
293
|
}
|
|
294
|
+
_class_private_field_loose_base(this, _checksumsEnabled)[_checksumsEnabled] = wantsChecksums && res.checksums === true;
|
|
295
|
+
if (wantsChecksums && res.checksums !== true) {
|
|
296
|
+
_class_private_field_loose_base(this, _reportWarning)[_reportWarning]('[Data transfer][pull] Checksums were requested but the remote does not support checksum negotiation; continuing without checksum validation.');
|
|
297
|
+
}
|
|
202
298
|
return res.transferID;
|
|
203
299
|
}
|
|
204
300
|
async bootstrap(diagnostics) {
|
|
@@ -208,6 +304,7 @@ class RemoteStrapiSourceProvider {
|
|
|
208
304
|
this.assertValidProtocol(url);
|
|
209
305
|
const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
210
306
|
const wsUrl = `${wsProtocol}//${url.host}${trimTrailingSlash(url.pathname)}${TRANSFER_PATH}/pull`;
|
|
307
|
+
_class_private_field_loose_base(this, _pullAssetStreamWireSampleLogged)[_pullAssetStreamWireSampleLogged] = false;
|
|
211
308
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('establishing websocket connection');
|
|
212
309
|
// No auth defined, trying public access for transfer
|
|
213
310
|
if (!auth) {
|
|
@@ -232,7 +329,7 @@ class RemoteStrapiSourceProvider {
|
|
|
232
329
|
const { retryMessageOptions } = this.options;
|
|
233
330
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('creating dispatcher');
|
|
234
331
|
this.dispatcher = createDispatcher(this.ws, retryMessageOptions, (message)=>_class_private_field_loose_base(this, _reportInfo)[_reportInfo](message));
|
|
235
|
-
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('
|
|
332
|
+
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('created dispatcher');
|
|
236
333
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo]('initialize transfer');
|
|
237
334
|
const transferID = await this.initTransfer();
|
|
238
335
|
_class_private_field_loose_base(this, _reportInfo)[_reportInfo](`initialized transfer ${transferID}`);
|
|
@@ -257,6 +354,13 @@ class RemoteStrapiSourceProvider {
|
|
|
257
354
|
const schemas = await this.dispatcher?.dispatchTransferAction('getSchemas');
|
|
258
355
|
return schemas ?? null;
|
|
259
356
|
}
|
|
357
|
+
async getStageTotals(stage) {
|
|
358
|
+
if (stage !== 'assets') {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
const cached = _class_private_field_loose_base(this, _cachedAssetsTotals)[_cachedAssetsTotals];
|
|
362
|
+
return cached ?? null;
|
|
363
|
+
}
|
|
260
364
|
constructor(options){
|
|
261
365
|
Object.defineProperty(this, _createStageReadStream, {
|
|
262
366
|
value: createStageReadStream
|
|
@@ -264,6 +368,9 @@ class RemoteStrapiSourceProvider {
|
|
|
264
368
|
Object.defineProperty(this, _reportInfo, {
|
|
265
369
|
value: reportInfo
|
|
266
370
|
});
|
|
371
|
+
Object.defineProperty(this, _reportWarning, {
|
|
372
|
+
value: reportWarning
|
|
373
|
+
});
|
|
267
374
|
Object.defineProperty(this, _startStep, {
|
|
268
375
|
value: startStep
|
|
269
376
|
});
|
|
@@ -277,35 +384,50 @@ class RemoteStrapiSourceProvider {
|
|
|
277
384
|
writable: true,
|
|
278
385
|
value: void 0
|
|
279
386
|
});
|
|
387
|
+
Object.defineProperty(this, _pullAssetStreamWireSampleLogged, {
|
|
388
|
+
writable: true,
|
|
389
|
+
value: void 0
|
|
390
|
+
});
|
|
391
|
+
Object.defineProperty(this, _checksumsEnabled, {
|
|
392
|
+
writable: true,
|
|
393
|
+
value: void 0
|
|
394
|
+
});
|
|
395
|
+
Object.defineProperty(this, _cachedAssetsTotals, {
|
|
396
|
+
writable: true,
|
|
397
|
+
value: void 0
|
|
398
|
+
});
|
|
280
399
|
this.name = 'source::remote-strapi';
|
|
281
400
|
this.type = 'source';
|
|
282
401
|
this.defaultOptions = {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
this.writeAsync = (stream, data)=>{
|
|
286
|
-
return new Promise((resolve, reject)=>{
|
|
287
|
-
stream.write(data, (error)=>{
|
|
288
|
-
if (error) {
|
|
289
|
-
reject(error);
|
|
290
|
-
}
|
|
291
|
-
resolve();
|
|
292
|
-
});
|
|
293
|
-
});
|
|
402
|
+
// Large files + JSON/WS backpressure can go minutes between *messages* while bytes still drain locally
|
|
403
|
+
streamTimeout: 300000
|
|
294
404
|
};
|
|
405
|
+
_class_private_field_loose_base(this, _pullAssetStreamWireSampleLogged)[_pullAssetStreamWireSampleLogged] = false;
|
|
406
|
+
_class_private_field_loose_base(this, _checksumsEnabled)[_checksumsEnabled] = false;
|
|
295
407
|
this.options = {
|
|
296
408
|
...this.defaultOptions,
|
|
297
409
|
...options
|
|
298
410
|
};
|
|
411
|
+
_class_private_field_loose_base(this, _checksumsEnabled)[_checksumsEnabled] = this.options.verifyChecksums === true;
|
|
299
412
|
this.ws = null;
|
|
300
413
|
this.dispatcher = null;
|
|
301
414
|
}
|
|
302
415
|
}
|
|
303
416
|
async function createStageReadStream(stage) {
|
|
417
|
+
if (stage === 'assets') {
|
|
418
|
+
_class_private_field_loose_base(this, _cachedAssetsTotals)[_cachedAssetsTotals] = undefined;
|
|
419
|
+
}
|
|
304
420
|
const startResult = await _class_private_field_loose_base(this, _startStep)[_startStep](stage);
|
|
305
421
|
if (startResult instanceof Error) {
|
|
306
422
|
throw startResult;
|
|
307
423
|
}
|
|
308
|
-
const { id: processID } = startResult;
|
|
424
|
+
const { id: processID, totals } = startResult;
|
|
425
|
+
if (stage === 'assets' && totals && (totals.totalBytes != null || totals.totalCount != null)) {
|
|
426
|
+
_class_private_field_loose_base(this, _cachedAssetsTotals)[_cachedAssetsTotals] = totals;
|
|
427
|
+
}
|
|
428
|
+
// Default object-mode HWM (~16 chunks). Do not await `drain` on manual `push` while `pipe()`
|
|
429
|
+
// is attached — drain/`readableLength` races reliably deadlock after a few 1MiB asset frames.
|
|
430
|
+
// Backpressure for pull assets is enforced by the Writable below (`highWaterMark: 1`).
|
|
309
431
|
const stream = new PassThrough({
|
|
310
432
|
objectMode: true
|
|
311
433
|
});
|
|
@@ -329,7 +451,6 @@ async function createStageReadStream(stage) {
|
|
|
329
451
|
stream.end();
|
|
330
452
|
return;
|
|
331
453
|
}
|
|
332
|
-
// if we get a single items instead of a batch
|
|
333
454
|
for (const item of castArray(data)){
|
|
334
455
|
stream.push(item);
|
|
335
456
|
}
|
|
@@ -349,12 +470,24 @@ function reportInfo(message) {
|
|
|
349
470
|
kind: 'info'
|
|
350
471
|
});
|
|
351
472
|
}
|
|
473
|
+
function reportWarning(message) {
|
|
474
|
+
_class_private_field_loose_base(this, _diagnostics)[_diagnostics]?.report({
|
|
475
|
+
details: {
|
|
476
|
+
createdAt: new Date(),
|
|
477
|
+
message,
|
|
478
|
+
origin: 'remote-source-provider'
|
|
479
|
+
},
|
|
480
|
+
kind: 'warning'
|
|
481
|
+
});
|
|
482
|
+
}
|
|
352
483
|
async function startStep(step) {
|
|
353
484
|
try {
|
|
354
485
|
return await this.dispatcher?.dispatchTransferStep({
|
|
355
486
|
action: 'start',
|
|
356
487
|
step
|
|
357
|
-
}
|
|
488
|
+
}, step === 'assets' ? {
|
|
489
|
+
retryOverrides: ASSETS_START_RETRY_OVERRIDES
|
|
490
|
+
} : undefined);
|
|
358
491
|
} catch (e) {
|
|
359
492
|
if (e instanceof Error) {
|
|
360
493
|
return e;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/providers/remote-source/index.ts"],"sourcesContent":["import { PassThrough, Readable, Writable } from 'stream';\nimport type { Struct, Utils } from '@strapi/types';\nimport { WebSocket } from 'ws';\nimport { castArray } from 'lodash/fp';\n\nimport type {\n IAsset,\n IMetadata,\n ISourceProvider,\n ISourceProviderTransferResults,\n MaybePromise,\n Protocol,\n ProviderType,\n TransferStage,\n} from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { Client, Server, Auth } from '../../../../types/remote/protocol';\nimport { ProviderTransferError, ProviderValidationError } from '../../../errors/providers';\nimport { TRANSFER_PATH } from '../../remote/constants';\nimport { ILocalStrapiSourceProviderOptions } from '../local-source';\nimport { createDispatcher, connectToWebsocket, trimTrailingSlash } from '../utils';\n\nexport interface IRemoteStrapiSourceProviderOptions extends ILocalStrapiSourceProviderOptions {\n url: URL; // the url of the remote Strapi admin\n auth?: Auth.ITransferTokenAuth;\n retryMessageOptions?: {\n retryMessageTimeout: number; // milliseconds to wait for a response from a message\n retryMessageMaxRetries: number; // max number of retries for a message before aborting transfer\n };\n streamTimeout?: number; // milliseconds to wait between chunks of an asset before aborting the transfer\n}\n\ntype QueueableAction = Protocol.Client.TransferAssetFlow &\n ({ action: 'stream' } | { action: 'end' });\n\nclass RemoteStrapiSourceProvider implements ISourceProvider {\n name = 'source::remote-strapi';\n\n type: ProviderType = 'source';\n\n options: IRemoteStrapiSourceProviderOptions;\n\n ws: WebSocket | null;\n\n dispatcher: ReturnType<typeof createDispatcher> | null;\n\n defaultOptions: Partial<IRemoteStrapiSourceProviderOptions> = {\n streamTimeout: 15000,\n };\n\n constructor(options: IRemoteStrapiSourceProviderOptions) {\n this.options = {\n ...this.defaultOptions,\n ...options,\n };\n\n this.ws = null;\n this.dispatcher = null;\n }\n\n results?: ISourceProviderTransferResults | undefined;\n\n #diagnostics?: IDiagnosticReporter;\n\n async #createStageReadStream(stage: Exclude<TransferStage, 'schemas'>) {\n const startResult = await this.#startStep(stage);\n\n if (startResult instanceof Error) {\n throw startResult;\n }\n\n const { id: processID } = startResult as { id: string };\n\n const stream = new PassThrough({ objectMode: true });\n\n const listener = async (raw: Buffer) => {\n const parsed = JSON.parse(raw.toString());\n // If not a message related to our transfer process, ignore it\n if (!parsed.uuid || parsed?.data?.type !== 'transfer' || parsed?.data?.id !== processID) {\n this.ws?.once('message', listener);\n return;\n }\n\n const { uuid, data: message } = parsed;\n const { ended, error, data } = message;\n\n if (error) {\n await this.#respond(uuid);\n stream.destroy(error);\n return;\n }\n\n if (ended) {\n await this.#respond(uuid);\n await this.#endStep(stage);\n\n stream.end();\n return;\n }\n\n // if we get a single items instead of a batch\n for (const item of castArray(data)) {\n stream.push(item);\n }\n\n this.ws?.once('message', listener);\n\n await this.#respond(uuid);\n };\n\n this.ws?.once('message', listener);\n\n return stream;\n }\n\n createEntitiesReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('entities');\n }\n\n createLinksReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('links');\n }\n\n writeAsync = <T>(stream: Writable, data: T) => {\n return new Promise<void>((resolve, reject) => {\n stream.write(data, (error) => {\n if (error) {\n reject(error);\n }\n\n resolve();\n });\n });\n };\n\n async createAssetsReadStream(): Promise<Readable> {\n // Create the streams used to transfer the assets\n const stream = await this.#createStageReadStream('assets');\n const pass = new PassThrough({ objectMode: true });\n\n // Init the asset map\n const assets: {\n // TODO: could we include filename in this for improved logging?\n [assetID: string]: IAsset & {\n stream: PassThrough;\n queue: Array<QueueableAction>;\n status: 'ok' | 'closed' | 'errored';\n timeout?: NodeJS.Timeout;\n };\n } = {};\n\n // Watch for stalled assets; if we don't receive a chunk within timeout, abort transfer\n const resetTimeout = (assetID: string) => {\n if (assets[assetID].timeout) {\n clearTimeout(assets[assetID].timeout);\n }\n assets[assetID].timeout = setTimeout(() => {\n this.#reportInfo(`Asset ${assetID} transfer stalled, aborting.`);\n assets[assetID].status = 'errored';\n assets[assetID].stream.destroy(new Error(`Asset ${assetID} transfer timed out`));\n }, this.options.streamTimeout);\n };\n\n stream\n /**\n * Process a payload of many transfer assets and performs the following tasks:\n * - Start: creates a stream for new assets.\n * - Stream: writes asset chunks to the asset's stream.\n * - End: closes the stream after the asset s transferred and cleanup related resources.\n */\n .on('data', async (payload: Protocol.Client.TransferAssetFlow[]) => {\n for (const item of payload) {\n const { action, assetID } = item;\n\n // Creates the stream to send the incoming asset through\n if (action === 'start') {\n // if a transfer has already been started for the same asset ID, something is wrong\n if (assets[assetID]) {\n throw new Error(`Asset ${assetID} already started`);\n }\n\n this.#reportInfo(`Asset ${assetID} starting`);\n // Register the asset\n assets[assetID] = {\n ...item.data,\n stream: new PassThrough(),\n status: 'ok',\n queue: [],\n };\n\n resetTimeout(assetID);\n\n // Connect the individual asset stream to the main asset stage stream\n // Note: nothing is transferred until data chunks are fed to the asset stream\n await this.writeAsync(pass, assets[assetID]);\n }\n\n // Writes the asset's data chunks to their corresponding stream\n // \"end\" is considered a chunk, but it's not a data chunk, it's a control message\n // That is done so that we don't complicate the already complicated async processing of the queue\n else if (action === 'stream' || action === 'end') {\n // If the asset hasn't been registered, or if it's been closed already, something is wrong\n if (!assets[assetID]) {\n throw new Error(`No id matching ${assetID} for stream action`);\n }\n\n // On every action, reset the timeout timer\n if (action === 'stream') {\n resetTimeout(assetID);\n } else {\n clearTimeout(assets[assetID].timeout);\n }\n\n if (assets[assetID].status === 'closed') {\n throw new Error(`Asset ${assetID} is closed`);\n }\n\n assets[assetID].queue.push(item);\n }\n }\n\n // each new payload will start new processQueue calls, which may cause some extra calls\n // it's essentially saying \"start processing this asset again, I added more data to the queue\"\n for (const assetID in assets) {\n if (Object.prototype.hasOwnProperty.call(assets, assetID)) {\n const asset = assets[assetID];\n if (asset.queue?.length > 0) {\n await processQueue(assetID);\n }\n }\n }\n })\n .on('close', () => {\n pass.end();\n });\n\n /**\n * Start processing the queue for a given assetID\n *\n * Even though this is a loop that attempts to process the entire queue, it is safe to call this more than once\n * for the same asset id because the queue is shared globally, the items are shifted off, and immediately written\n */\n const processQueue = async (id: string) => {\n if (!assets[id]) {\n throw new Error(`Failed to write asset chunk for \"${id}\". Asset not found.`);\n }\n\n const asset = assets[id];\n const { status: currentStatus } = asset;\n\n if (['closed', 'errored'].includes(currentStatus)) {\n throw new Error(\n `Failed to write asset chunk for \"${id}\". The asset is currently \"${currentStatus}\"`\n );\n }\n\n while (asset.queue.length > 0) {\n const data = asset.queue.shift();\n\n if (!data) {\n throw new Error(`Invalid chunk found for ${id}`);\n }\n\n try {\n // if this is an end chunk, close the asset stream\n if (data.action === 'end') {\n this.#reportInfo(`Ending asset stream for ${id}`);\n await closeAssetStream(id);\n break; // Exit the loop after closing the stream\n }\n\n // Save the current chunk\n await writeChunkToStream(id, data);\n } catch {\n if (!assets[id]) {\n throw new Error(`No id matching ${id} for writeAssetChunk`);\n }\n }\n }\n };\n\n /**\n * Writes a chunk of data to the asset's stream.\n *\n * Only check if the targeted asset exists, no other validation is done.\n */\n const writeChunkToStream = async (id: string, data: unknown) => {\n const asset = assets[id];\n\n if (!asset) {\n throw new Error(`Failed to write asset chunk for \"${id}\". Asset not found.`);\n }\n\n const rawBuffer = data as { type: 'Buffer'; data: Uint8Array };\n const chunk = Buffer.from(rawBuffer.data);\n\n await this.writeAsync(asset.stream, chunk);\n };\n\n /**\n * Closes the asset stream associated with the given ID.\n *\n * It deletes the stream for the asset upon successful closure.\n */\n const closeAssetStream = async (id: string) => {\n if (!assets[id]) {\n throw new Error(`Failed to close asset \"${id}\". Asset not found.`);\n }\n\n assets[id].status = 'closed';\n\n await new Promise<void>((resolve, reject) => {\n const { stream } = assets[id];\n\n stream\n .on('close', () => {\n resolve();\n })\n .on('error', (e) => {\n assets[id].status = 'errored';\n reject(new Error(`Failed to close asset \"${id}\". Asset stream error: ${e.toString()}`));\n })\n .end();\n });\n };\n\n return pass;\n }\n\n createConfigurationReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('configuration');\n }\n\n async getMetadata(): Promise<IMetadata | null> {\n const metadata = await this.dispatcher?.dispatchTransferAction<IMetadata>('getMetadata');\n\n return metadata ?? null;\n }\n\n assertValidProtocol(url: URL) {\n const validProtocols = ['https:', 'http:'];\n\n if (!validProtocols.includes(url.protocol)) {\n throw new ProviderValidationError(`Invalid protocol \"${url.protocol}\"`, {\n check: 'url',\n details: {\n protocol: url.protocol,\n validProtocols,\n },\n });\n }\n }\n\n async initTransfer(): Promise<string> {\n const query = this.dispatcher?.dispatchCommand({\n command: 'init',\n });\n\n const res = (await query) as Server.Payload<Server.InitMessage>;\n\n if (!res?.transferID) {\n throw new ProviderTransferError('Init failed, invalid response from the server');\n }\n\n return res.transferID;\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'remote-source-provider',\n },\n kind: 'info',\n });\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n const { url, auth } = this.options;\n let ws: WebSocket;\n this.assertValidProtocol(url);\n const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n const wsUrl = `${wsProtocol}//${url.host}${trimTrailingSlash(\n url.pathname\n )}${TRANSFER_PATH}/pull`;\n\n this.#reportInfo('establishing websocket connection');\n // No auth defined, trying public access for transfer\n if (!auth) {\n ws = await connectToWebsocket(wsUrl, undefined, this.#diagnostics);\n }\n\n // Common token auth, this should be the main auth method\n else if (auth.type === 'token') {\n const headers = { Authorization: `Bearer ${auth.token}` };\n ws = await connectToWebsocket(wsUrl, { headers }, this.#diagnostics);\n }\n\n // Invalid auth method provided\n else {\n throw new ProviderValidationError('Auth method not available', {\n check: 'auth.type',\n details: {\n auth: auth.type,\n },\n });\n }\n\n this.#reportInfo('established websocket connection');\n this.ws = ws;\n const { retryMessageOptions } = this.options;\n\n this.#reportInfo('creating dispatcher');\n this.dispatcher = createDispatcher(this.ws, retryMessageOptions, (message: string) =>\n this.#reportInfo(message)\n );\n this.#reportInfo('creating dispatcher');\n\n this.#reportInfo('initialize transfer');\n const transferID = await this.initTransfer();\n this.#reportInfo(`initialized transfer ${transferID}`);\n\n this.dispatcher.setTransferProperties({ id: transferID, kind: 'pull' });\n await this.dispatcher.dispatchTransferAction('bootstrap');\n }\n\n async close() {\n await this.dispatcher?.dispatchTransferAction('close');\n\n await new Promise<void>((resolve) => {\n const { ws } = this;\n\n if (!ws || ws.CLOSED) {\n resolve();\n return;\n }\n\n ws.on('close', () => resolve()).close();\n });\n }\n\n async getSchemas() {\n const schemas =\n await this.dispatcher?.dispatchTransferAction<Utils.String.Dict<Struct.Schema>>('getSchemas');\n\n return schemas ?? null;\n }\n\n async #startStep<T extends Client.TransferPullStep>(step: T) {\n try {\n return await this.dispatcher?.dispatchTransferStep({ action: 'start', step });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n }\n\n async #respond(uuid: string) {\n return new Promise((resolve, reject) => {\n this.ws?.send(JSON.stringify({ uuid }), (e) => {\n if (e) {\n reject(e);\n } else {\n resolve(e);\n }\n });\n });\n }\n\n async #endStep<T extends Client.TransferPullStep>(step: T) {\n try {\n await this.dispatcher?.dispatchTransferStep({ action: 'end', step });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n return null;\n }\n}\n\nexport const createRemoteStrapiSourceProvider = (options: IRemoteStrapiSourceProviderOptions) => {\n return new RemoteStrapiSourceProvider(options);\n};\n"],"names":["RemoteStrapiSourceProvider","createEntitiesReadStream","createLinksReadStream","createAssetsReadStream","stream","pass","PassThrough","objectMode","assets","resetTimeout","assetID","timeout","clearTimeout","setTimeout","status","destroy","Error","options","streamTimeout","on","payload","item","action","data","queue","writeAsync","push","Object","prototype","hasOwnProperty","call","asset","length","processQueue","end","id","currentStatus","includes","shift","closeAssetStream","writeChunkToStream","rawBuffer","chunk","Buffer","from","Promise","resolve","reject","e","toString","createConfigurationReadStream","getMetadata","metadata","dispatcher","dispatchTransferAction","assertValidProtocol","url","validProtocols","protocol","ProviderValidationError","check","details","initTransfer","query","dispatchCommand","command","res","transferID","ProviderTransferError","bootstrap","diagnostics","auth","ws","wsProtocol","wsUrl","host","trimTrailingSlash","pathname","TRANSFER_PATH","connectToWebsocket","undefined","type","headers","Authorization","token","retryMessageOptions","createDispatcher","message","setTransferProperties","kind","close","CLOSED","getSchemas","schemas","name","defaultOptions","write","error","stage","startResult","processID","listener","raw","parsed","JSON","parse","uuid","once","ended","castArray","report","createdAt","Date","origin","step","dispatchTransferStep","send","stringify","createRemoteStrapiSourceProvider"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../../../src/strapi/providers/remote-source/index.ts"],"sourcesContent":["import { createHash, type Hash } from 'crypto';\nimport { PassThrough, Readable, Writable } from 'stream';\nimport type { Struct, Utils } from '@strapi/types';\nimport { WebSocket } from 'ws';\nimport { castArray } from 'lodash/fp';\n\nimport type {\n IAsset,\n IMetadata,\n ISourceProvider,\n ISourceProviderTransferResults,\n MaybePromise,\n Protocol,\n ProviderType,\n StageTotalsEstimate,\n TransferStage,\n} from '../../../../types';\nimport type { IDiagnosticReporter } from '../../../utils/diagnostic';\nimport { Client, Server, Auth } from '../../../../types/remote/protocol';\nimport { ProviderTransferError, ProviderValidationError } from '../../../errors/providers';\nimport { TRANSFER_PATH } from '../../remote/constants';\nimport { decodeTransferAssetStreamItem } from '../../../utils/transfer-asset-chunk';\nimport { write } from '../../../utils/writable-async-write';\nimport { ILocalStrapiSourceProviderOptions } from '../local-source';\nimport {\n createDispatcher,\n connectToWebsocket,\n trimTrailingSlash,\n type RetryMessageOptions,\n} from '../utils';\n\n/**\n * Pull server answers `assets` step `start` only after `estimateAssetTotals` (DB stream; remote sizes from DB when complete, else HTTP like `createAssetsStream`).\n * That can exceed the default dispatcher wait (~30s between resends, a few minutes total). This message\n * uses a longer window so large libraries do not fail with `Request timed out` before totals are returned.\n */\nconst ASSETS_START_RETRY_OVERRIDES: Partial<RetryMessageOptions> = {\n retryMessageTimeout: 120_000,\n retryMessageMaxRetries: 30,\n};\n\nexport interface IRemoteStrapiSourceProviderOptions extends ILocalStrapiSourceProviderOptions {\n url: URL; // the url of the remote Strapi admin\n auth?: Auth.ITransferTokenAuth;\n retryMessageOptions?: {\n retryMessageTimeout: number; // milliseconds to wait for a response from a message\n retryMessageMaxRetries: number; // max number of retries for a message before aborting transfer\n };\n /** Max ms without forward progress on an asset (new remote chunk accepted or chunk fully handed to the asset stream). */\n streamTimeout?: number;\n /** Require per-asset checksum verification for transferred asset bytes. */\n verifyChecksums?: boolean;\n}\n\ntype QueueableAction = Protocol.Client.TransferAssetFlow &\n ({ action: 'stream' } | { action: 'end' });\n\nclass RemoteStrapiSourceProvider implements ISourceProvider {\n name = 'source::remote-strapi';\n\n type: ProviderType = 'source';\n\n options: IRemoteStrapiSourceProviderOptions;\n\n ws: WebSocket | null;\n\n dispatcher: ReturnType<typeof createDispatcher> | null;\n\n defaultOptions: Partial<IRemoteStrapiSourceProviderOptions> = {\n // Large files + JSON/WS backpressure can go minutes between *messages* while bytes still drain locally\n streamTimeout: 300_000,\n };\n\n constructor(options: IRemoteStrapiSourceProviderOptions) {\n this.options = {\n ...this.defaultOptions,\n ...options,\n };\n this.#checksumsEnabled = this.options.verifyChecksums === true;\n\n this.ws = null;\n this.dispatcher = null;\n }\n\n results?: ISourceProviderTransferResults | undefined;\n\n #diagnostics?: IDiagnosticReporter;\n\n #pullAssetStreamWireSampleLogged = false;\n\n #checksumsEnabled = false;\n\n /** Set from pull server `start` response for `assets` when present (for engine `getStageTotals`). */\n #cachedAssetsTotals?: StageTotalsEstimate;\n\n async #createStageReadStream(stage: Exclude<TransferStage, 'schemas'>) {\n if (stage === 'assets') {\n this.#cachedAssetsTotals = undefined;\n }\n\n const startResult = await this.#startStep(stage);\n\n if (startResult instanceof Error) {\n throw startResult;\n }\n\n const { id: processID, totals } = startResult as {\n id: string;\n totals?: StageTotalsEstimate;\n };\n\n if (stage === 'assets' && totals && (totals.totalBytes != null || totals.totalCount != null)) {\n this.#cachedAssetsTotals = totals;\n }\n\n // Default object-mode HWM (~16 chunks). Do not await `drain` on manual `push` while `pipe()`\n // is attached — drain/`readableLength` races reliably deadlock after a few 1MiB asset frames.\n // Backpressure for pull assets is enforced by the Writable below (`highWaterMark: 1`).\n const stream = new PassThrough({ objectMode: true });\n\n const listener = async (raw: Buffer) => {\n const parsed = JSON.parse(raw.toString());\n // If not a message related to our transfer process, ignore it\n if (!parsed.uuid || parsed?.data?.type !== 'transfer' || parsed?.data?.id !== processID) {\n this.ws?.once('message', listener);\n return;\n }\n\n const { uuid, data: message } = parsed;\n const { ended, error, data } = message;\n\n if (error) {\n await this.#respond(uuid);\n stream.destroy(error);\n return;\n }\n\n if (ended) {\n await this.#respond(uuid);\n await this.#endStep(stage);\n\n stream.end();\n return;\n }\n\n for (const item of castArray(data)) {\n stream.push(item as Parameters<PassThrough['push']>[0]);\n }\n\n this.ws?.once('message', listener);\n\n await this.#respond(uuid);\n };\n\n this.ws?.once('message', listener);\n\n return stream;\n }\n\n createEntitiesReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('entities');\n }\n\n createLinksReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('links');\n }\n\n async createAssetsReadStream(): Promise<Readable> {\n // Create the streams used to transfer the assets\n const stream = await this.#createStageReadStream('assets');\n const pass = new PassThrough({ objectMode: true });\n\n // Init the asset map\n const assets: {\n // TODO: could we include filename in this for improved logging?\n [assetID: string]: IAsset & {\n stream: PassThrough;\n queue: Array<QueueableAction>;\n status: 'ok' | 'closed' | 'errored';\n timeout?: NodeJS.Timeout;\n checksumHash?: Hash;\n };\n } = {};\n\n // Watch for stalled assets: no remote chunks and no completed writes to the asset stream for streamTimeout ms\n const resetTimeout = (assetID: string) => {\n if (!assets[assetID]) {\n return;\n }\n if (assets[assetID].timeout) {\n clearTimeout(assets[assetID].timeout);\n }\n assets[assetID].timeout = setTimeout(() => {\n if (!assets[assetID]) {\n return;\n }\n this.#reportInfo(`Asset ${assetID} transfer stalled, aborting.`);\n assets[assetID].status = 'errored';\n assets[assetID].stream.destroy(new Error(`Asset ${assetID} transfer timed out`));\n }, this.options.streamTimeout);\n };\n\n const clearStallTimeoutForAsset = (assetID: string) => {\n const entry = assets[assetID];\n if (entry?.timeout) {\n clearTimeout(entry.timeout);\n entry.timeout = undefined;\n }\n };\n\n const clearAllStallTimeouts = () => {\n for (const id of Object.keys(assets)) {\n clearStallTimeoutForAsset(id);\n }\n };\n\n /**\n * Serialize asset batch handling: `Readable.on('data', async …)` does not apply backpressure,\n * so we pipe through a Writable with highWaterMark 1 so only one batch is in flight.\n */\n const processAssetPayload = async (payload: Protocol.Client.TransferAssetFlow[]) => {\n for (const item of payload) {\n const { action, assetID } = item;\n\n if (action === 'start') {\n if (assets[assetID]) {\n throw new Error(`Asset ${assetID} already started`);\n }\n\n this.#reportInfo(`Asset ${assetID} starting`);\n assets[assetID] = {\n ...item.data,\n stream: new PassThrough(),\n status: 'ok',\n queue: [],\n ...(this.#checksumsEnabled ? { checksumHash: createHash('sha256') } : {}),\n };\n\n resetTimeout(assetID);\n\n await write(pass, assets[assetID]);\n } else if (action === 'stream' || action === 'end') {\n if (!assets[assetID]) {\n throw new Error(`No id matching ${assetID} for stream action`);\n }\n\n if (action === 'stream') {\n if (!this.#pullAssetStreamWireSampleLogged) {\n this.#pullAssetStreamWireSampleLogged = true;\n const { data } = item;\n // Same legacy shape `decodeTransferAssetStreamData` accepts after JSON.parse (proof, not frame-size guess).\n const legacyBufferJson =\n data &&\n typeof data === 'object' &&\n !Buffer.isBuffer(data) &&\n (data as { type?: string }).type === 'Buffer' &&\n (Array.isArray((data as { data?: unknown }).data) ||\n ArrayBuffer.isView((data as { data?: unknown }).data));\n if (legacyBufferJson) {\n this.#reportWarning(\n '[Data transfer][pull] Remote is using legacy Buffer JSON for asset chunks (each byte as a JSON number). That uses much more memory during JSON.parse than base64. Upgrade the remote Strapi to a version that sends base64 asset chunks, or out-of-memory errors may still happen on large files.'\n );\n }\n }\n resetTimeout(assetID);\n } else {\n clearTimeout(assets[assetID].timeout);\n }\n\n if (assets[assetID].status === 'closed') {\n throw new Error(`Asset ${assetID} is closed`);\n }\n\n assets[assetID].queue.push(item);\n }\n }\n\n for (const assetID in assets) {\n if (Object.prototype.hasOwnProperty.call(assets, assetID)) {\n const asset = assets[assetID];\n if (asset.queue?.length > 0) {\n await processQueue(assetID);\n }\n }\n }\n };\n\n const processor = new Writable({\n objectMode: true,\n highWaterMark: 1,\n write(payload: Protocol.Client.TransferAssetFlow[], _encoding, callback) {\n processAssetPayload(payload).then(\n () => {\n callback();\n },\n (err: Error) => {\n clearAllStallTimeouts();\n stream.destroy(err);\n callback(err);\n }\n );\n },\n final(callback) {\n pass.end();\n callback();\n },\n });\n\n processor.on('error', (err) => {\n clearAllStallTimeouts();\n pass.destroy(err);\n });\n\n stream.on('error', (err) => {\n clearAllStallTimeouts();\n processor.destroy(err);\n pass.destroy(err);\n });\n\n stream.once('end', () => {\n clearAllStallTimeouts();\n });\n\n stream.pipe(processor);\n\n /**\n * Start processing the queue for a given assetID\n *\n * Even though this is a loop that attempts to process the entire queue, it is safe to call this more than once\n * for the same asset id because the queue is shared globally, the items are shifted off, and immediately written\n */\n const processQueue = async (id: string) => {\n if (!assets[id]) {\n throw new Error(`Failed to write asset chunk for \"${id}\". Asset not found.`);\n }\n\n const asset = assets[id];\n const { status: currentStatus } = asset;\n\n if (['closed', 'errored'].includes(currentStatus)) {\n throw new Error(\n `Failed to write asset chunk for \"${id}\". The asset is currently \"${currentStatus}\"`\n );\n }\n\n while (asset.queue.length > 0) {\n const data = asset.queue.shift();\n\n if (!data) {\n throw new Error(`Invalid chunk found for ${id}`);\n }\n\n try {\n // if this is an end chunk, close the asset stream\n if (data.action === 'end') {\n this.#reportInfo(`Ending asset stream for ${id}`);\n await closeAssetStream(id, data.checksum);\n break; // Exit the loop after closing the stream\n }\n\n // Save the current chunk\n await writeChunkToStream(id, data);\n } catch (error) {\n if (!assets[id]) {\n throw new Error(`No id matching ${id} for writeAssetChunk`);\n }\n clearStallTimeoutForAsset(id);\n if (error instanceof Error) {\n throw error;\n }\n throw new Error(`Unexpected error while processing asset chunk for \"${id}\"`);\n }\n }\n };\n\n /**\n * Writes a chunk of data to the asset's stream.\n *\n * Only check if the targeted asset exists, no other validation is done.\n */\n const writeChunkToStream = async (id: string, item: QueueableAction) => {\n const asset = assets[id];\n\n if (!asset) {\n throw new Error(`Failed to write asset chunk for \"${id}\". Asset not found.`);\n }\n\n if (item.action !== 'stream') {\n throw new Error(`Expected stream queue item for \"${id}\"`);\n }\n const chunk = decodeTransferAssetStreamItem(item);\n asset.checksumHash?.update(chunk);\n\n await write(asset.stream, chunk);\n // Count slow draining as progress so backpressure on large chunks does not trip the stall timer\n resetTimeout(id);\n };\n\n /**\n * Closes the asset stream associated with the given ID.\n *\n * It deletes the stream for the asset upon successful closure.\n */\n const closeAssetStream = async (\n id: string,\n checksum?: { algorithm: 'sha256'; value: string }\n ) => {\n if (!assets[id]) {\n throw new Error(`Failed to close asset \"${id}\". Asset not found.`);\n }\n\n const asset = assets[id];\n // The queue processes stream chunks before `end`; the last `writeChunkToStream` calls\n // `resetTimeout` after the `end` chunk already cleared the timer — clear again before closing.\n clearStallTimeoutForAsset(id);\n\n if (this.#checksumsEnabled) {\n if (!checksum) {\n throw new ProviderTransferError(\n `Asset ${id} is missing checksum in transfer end payload`\n );\n }\n if (checksum.algorithm !== 'sha256') {\n throw new ProviderTransferError(\n `Asset ${id} checksum algorithm \"${checksum.algorithm}\" is not supported`\n );\n }\n const actual = asset.checksumHash?.digest('hex');\n if (!actual || actual !== checksum.value) {\n throw new ProviderTransferError(\n `Checksum mismatch for asset \"${id}\" (expected ${checksum.value}, got ${actual ?? 'none'})`\n );\n }\n }\n asset.status = 'closed';\n\n await new Promise<void>((resolve, reject) => {\n const { stream } = asset;\n\n stream\n .on('close', () => {\n delete assets[id];\n resolve();\n })\n .on('error', (e) => {\n delete assets[id];\n reject(new Error(`Failed to close asset \"${id}\". Asset stream error: ${e.toString()}`));\n })\n .end();\n });\n };\n\n return pass;\n }\n\n createConfigurationReadStream(): MaybePromise<Readable> {\n return this.#createStageReadStream('configuration');\n }\n\n async getMetadata(): Promise<IMetadata | null> {\n const metadata = await this.dispatcher?.dispatchTransferAction<IMetadata>('getMetadata');\n\n return metadata ?? null;\n }\n\n assertValidProtocol(url: URL) {\n const validProtocols = ['https:', 'http:'];\n\n if (!validProtocols.includes(url.protocol)) {\n throw new ProviderValidationError(`Invalid protocol \"${url.protocol}\"`, {\n check: 'url',\n details: {\n protocol: url.protocol,\n validProtocols,\n },\n });\n }\n }\n\n async initTransfer(): Promise<string> {\n const wantsChecksums = this.options.verifyChecksums === true;\n const query = this.dispatcher?.dispatchCommand({\n command: 'init',\n ...(wantsChecksums ? { params: { transfer: 'pull', checksums: true } } : {}),\n });\n\n const res = (await query) as\n | (Server.Payload<Server.InitMessage> & { checksums?: boolean })\n | null;\n\n if (!res?.transferID) {\n throw new ProviderTransferError('Init failed, invalid response from the server');\n }\n this.#checksumsEnabled = wantsChecksums && res.checksums === true;\n if (wantsChecksums && res.checksums !== true) {\n this.#reportWarning(\n '[Data transfer][pull] Checksums were requested but the remote does not support checksum negotiation; continuing without checksum validation.'\n );\n }\n\n return res.transferID;\n }\n\n #reportInfo(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'remote-source-provider',\n },\n kind: 'info',\n });\n }\n\n /** Reports a warning diagnostic (`kind: 'warning'`). Consumers (e.g. CLI) choose log levels and routing. */\n #reportWarning(message: string) {\n this.#diagnostics?.report({\n details: {\n createdAt: new Date(),\n message,\n origin: 'remote-source-provider',\n },\n kind: 'warning',\n });\n }\n\n async bootstrap(diagnostics?: IDiagnosticReporter): Promise<void> {\n this.#diagnostics = diagnostics;\n const { url, auth } = this.options;\n let ws: WebSocket;\n this.assertValidProtocol(url);\n const wsProtocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n const wsUrl = `${wsProtocol}//${url.host}${trimTrailingSlash(\n url.pathname\n )}${TRANSFER_PATH}/pull`;\n\n this.#pullAssetStreamWireSampleLogged = false;\n\n this.#reportInfo('establishing websocket connection');\n // No auth defined, trying public access for transfer\n if (!auth) {\n ws = await connectToWebsocket(wsUrl, undefined, this.#diagnostics);\n }\n\n // Common token auth, this should be the main auth method\n else if (auth.type === 'token') {\n const headers = { Authorization: `Bearer ${auth.token}` };\n ws = await connectToWebsocket(wsUrl, { headers }, this.#diagnostics);\n }\n\n // Invalid auth method provided\n else {\n throw new ProviderValidationError('Auth method not available', {\n check: 'auth.type',\n details: {\n auth: auth.type,\n },\n });\n }\n\n this.#reportInfo('established websocket connection');\n this.ws = ws;\n const { retryMessageOptions } = this.options;\n\n this.#reportInfo('creating dispatcher');\n this.dispatcher = createDispatcher(this.ws, retryMessageOptions, (message: string) =>\n this.#reportInfo(message)\n );\n this.#reportInfo('created dispatcher');\n\n this.#reportInfo('initialize transfer');\n const transferID = await this.initTransfer();\n this.#reportInfo(`initialized transfer ${transferID}`);\n\n this.dispatcher.setTransferProperties({ id: transferID, kind: 'pull' });\n await this.dispatcher.dispatchTransferAction('bootstrap');\n }\n\n async close() {\n await this.dispatcher?.dispatchTransferAction('close');\n\n await new Promise<void>((resolve) => {\n const { ws } = this;\n\n if (!ws || ws.CLOSED) {\n resolve();\n return;\n }\n\n ws.on('close', () => resolve()).close();\n });\n }\n\n async getSchemas() {\n const schemas =\n await this.dispatcher?.dispatchTransferAction<Utils.String.Dict<Struct.Schema>>('getSchemas');\n\n return schemas ?? null;\n }\n\n async getStageTotals(stage: TransferStage): Promise<StageTotalsEstimate | null> {\n if (stage !== 'assets') {\n return null;\n }\n const cached = this.#cachedAssetsTotals;\n return cached ?? null;\n }\n\n async #startStep<T extends Client.TransferPullStep>(step: T) {\n try {\n return await this.dispatcher?.dispatchTransferStep(\n { action: 'start', step },\n step === 'assets' ? { retryOverrides: ASSETS_START_RETRY_OVERRIDES } : undefined\n );\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n }\n\n async #respond(uuid: string) {\n return new Promise((resolve, reject) => {\n this.ws?.send(JSON.stringify({ uuid }), (e) => {\n if (e) {\n reject(e);\n } else {\n resolve(e);\n }\n });\n });\n }\n\n async #endStep<T extends Client.TransferPullStep>(step: T) {\n try {\n await this.dispatcher?.dispatchTransferStep({ action: 'end', step });\n } catch (e) {\n if (e instanceof Error) {\n return e;\n }\n\n if (typeof e === 'string') {\n return new ProviderTransferError(e);\n }\n\n return new ProviderTransferError('Unexpected error');\n }\n\n return null;\n }\n}\n\nexport const createRemoteStrapiSourceProvider = (options: IRemoteStrapiSourceProviderOptions) => {\n return new RemoteStrapiSourceProvider(options);\n};\n"],"names":["ASSETS_START_RETRY_OVERRIDES","retryMessageTimeout","retryMessageMaxRetries","RemoteStrapiSourceProvider","createEntitiesReadStream","createLinksReadStream","createAssetsReadStream","stream","pass","PassThrough","objectMode","assets","resetTimeout","assetID","timeout","clearTimeout","setTimeout","status","destroy","Error","options","streamTimeout","clearStallTimeoutForAsset","entry","undefined","clearAllStallTimeouts","id","Object","keys","processAssetPayload","payload","item","action","data","queue","checksumHash","createHash","write","legacyBufferJson","Buffer","isBuffer","type","Array","isArray","ArrayBuffer","isView","push","prototype","hasOwnProperty","call","asset","length","processQueue","processor","Writable","highWaterMark","_encoding","callback","then","err","final","end","on","once","pipe","currentStatus","includes","shift","closeAssetStream","checksum","writeChunkToStream","error","chunk","decodeTransferAssetStreamItem","update","ProviderTransferError","algorithm","actual","digest","value","Promise","resolve","reject","e","toString","createConfigurationReadStream","getMetadata","metadata","dispatcher","dispatchTransferAction","assertValidProtocol","url","validProtocols","protocol","ProviderValidationError","check","details","initTransfer","wantsChecksums","verifyChecksums","query","dispatchCommand","command","params","transfer","checksums","res","transferID","bootstrap","diagnostics","auth","ws","wsProtocol","wsUrl","host","trimTrailingSlash","pathname","TRANSFER_PATH","connectToWebsocket","headers","Authorization","token","retryMessageOptions","createDispatcher","message","setTransferProperties","kind","close","CLOSED","getSchemas","schemas","getStageTotals","stage","cached","name","defaultOptions","startResult","processID","totals","totalBytes","totalCount","listener","raw","parsed","JSON","parse","uuid","ended","castArray","report","createdAt","Date","origin","step","dispatchTransferStep","retryOverrides","send","stringify","createRemoteStrapiSourceProvider"],"mappings":"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"}
|
|
@@ -7,14 +7,17 @@ interface IDispatcherState {
|
|
|
7
7
|
id: string;
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
+
export interface RetryMessageOptions {
|
|
11
|
+
retryMessageMaxRetries: number;
|
|
12
|
+
retryMessageTimeout: number;
|
|
13
|
+
}
|
|
10
14
|
interface IDispatchOptions {
|
|
11
15
|
attachTransfer?: boolean;
|
|
16
|
+
/** Merged onto the dispatcher's default `retryMessageOptions` for this message only. */
|
|
17
|
+
retryOverrides?: Partial<RetryMessageOptions>;
|
|
12
18
|
}
|
|
13
19
|
type Dispatch<T> = Omit<T, 'transferID' | 'uuid'>;
|
|
14
|
-
export declare const createDispatcher: (ws: WebSocket, retryMessageOptions?: {
|
|
15
|
-
retryMessageMaxRetries: number;
|
|
16
|
-
retryMessageTimeout: number;
|
|
17
|
-
}, reportInfo?: (message: string) => void) => {
|
|
20
|
+
export declare const createDispatcher: (ws: WebSocket, retryMessageOptions?: RetryMessageOptions, reportInfo?: (message: string) => void) => {
|
|
18
21
|
readonly transferID: string | undefined;
|
|
19
22
|
readonly transferKind: any;
|
|
20
23
|
setTransferProperties: (properties: Exclude<IDispatcherState['transfer'], undefined>) => void;
|
|
@@ -25,12 +28,12 @@ export declare const createDispatcher: (ws: WebSocket, retryMessageOptions?: {
|
|
|
25
28
|
params?: Client.GetCommandParams<U_1> | undefined;
|
|
26
29
|
})) => Promise<null>;
|
|
27
30
|
dispatchTransferAction: <T>(action: Client.Action['action']) => Promise<T | null>;
|
|
28
|
-
dispatchTransferStep: <T_1, A extends "end" | "
|
|
31
|
+
dispatchTransferStep: <T_1, A extends "end" | "stream" | "start" = "end" | "stream" | "start", S extends "entities" | "links" | "assets" | "configuration" = "entities" | "links" | "assets" | "configuration">(payload: {
|
|
29
32
|
step: S;
|
|
30
33
|
action: A;
|
|
31
34
|
} & (A extends 'stream' ? {
|
|
32
35
|
data: Client.GetTransferPushStreamData<S>;
|
|
33
|
-
} : unknown)) => Promise<T_1 | null>;
|
|
36
|
+
} : unknown), dispatchOptions?: Omit<IDispatchOptions, 'attachTransfer'>) => Promise<T_1 | null>;
|
|
34
37
|
};
|
|
35
38
|
type WebsocketParams = ConstructorParameters<typeof WebSocket>;
|
|
36
39
|
type Address = WebsocketParams[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/strapi/providers/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,SAAS,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,gCAAgC,CAAC;AASrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/strapi/providers/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,SAAS,EAAE,MAAM,IAAI,CAAC;AAExC,OAAO,KAAK,EAAE,MAAM,EAAU,MAAM,gCAAgC,CAAC;AASrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAG7D,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,YAAY,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED,MAAM,WAAW,mBAAmB;IAClC,sBAAsB,EAAE,MAAM,CAAC;IAC/B,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,UAAU,gBAAgB;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,wFAAwF;IACxF,cAAc,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC/C;AAED,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;AAElD,eAAO,MAAM,gBAAgB,OACvB,SAAS,wBACQ,mBAAmB,eAI3B,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;;;wCAwIxB,QAAQ,gBAAgB,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,KAC3D,IAAI;sEAjII,gBAAgB,KACxB,QAAQ,CAAC,GAAG,IAAI,CAAC;;;;;;wCAkG6B,OAAO,MAAM,CAAC,QAAQ,CAAC;6NAW7D;QACP,IAAI,EAAE,CAAC,CAAC;QACR,MAAM,EAAE,CAAC,CAAC;KACX,GAAG,CAAC,CAAC,SAAS,QAAQ,GAAG;QAAE,IAAI,EAAE,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,oBAChE,KAAK,gBAAgB,EAAE,gBAAgB,CAAC;CAmC7D,CAAC;AAEF,KAAK,eAAe,GAAG,qBAAqB,CAAC,OAAO,SAAS,CAAC,CAAC;AAC/D,KAAK,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAClC,KAAK,OAAO,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAElC,eAAO,MAAM,kBAAkB,YACpB,OAAO,YACN,OAAO,gBACH,mBAAmB,KAChC,QAAQ,SAAS,CA0DnB,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,KAAG,MAEjD,CAAC;AAEF,eAAO,MAAM,IAAI,OAAQ,MAAM,kBAI9B,CAAC;AAEF,eAAO,MAAM,SAAS,SAAgB,MAAM,OAAO,YAAY,MAAM,KAAG,QAAQ,IAAI,CAMnF,CAAC"}
|