@xen-orchestra/fs 4.6.3 → 4.6.4

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/abstract.js CHANGED
@@ -36,7 +36,31 @@ const DEFAULT_MAX_PARALLEL_OPERATIONS = 10;
36
36
  const ENCRYPTION_DESC_FILENAME = 'encryption.json';
37
37
  const ENCRYPTION_METADATA_FILENAME = 'metadata.json';
38
38
  const WITH_LIMIT = ['closeFile', 'copy', 'getInfo', 'getSizeOnDisk', 'list', 'mkdir', 'openFile', 'outputFile', 'read', 'readFile', 'rename', 'rmdir', 'truncate', 'unlink', 'write', 'writeFile'];
39
- const WITH_RETRY = ['_closeFile', '_copy', '_getInfo', '_getSize', '_list', '_mkdir', '_openFile', '_outputFile', '_read', '_readFile', '_rename', '_rmdir', '_truncate', '_unlink', '_write', '_writeFile'];
39
+ const WITH_RETRY = {
40
+ _closeFile: {},
41
+ _copy: {},
42
+ _getInfo: {},
43
+ _getSize: {},
44
+ _list: {},
45
+ _mkdir: {},
46
+ _openFile: {},
47
+ _read: {},
48
+ _readFile: {},
49
+ _rename: {},
50
+ _rmdir: {},
51
+ _truncate: {},
52
+ _unlink: {},
53
+ _write: {},
54
+ _writeFile: {
55
+ updateArguments(error, [file, data, options]) {
56
+ options = options ?? {};
57
+ if (options.flags === 'wx' && error.code !== 'EEXIST') {
58
+ options.flags = 'w';
59
+ }
60
+ return [file, data, options];
61
+ }
62
+ }
63
+ };
40
64
  const WITH_TIMEOUT = ['_closeFile', '_createReadStream', '_getInfo', '_getSize', '_list', '_rename', '_copy', '_rmdir', '_closeFile', '_openFile', '_createOutputStream'];
41
65
  const ignoreEnoent = error => {
42
66
  if (error == null || error.code !== 'ENOENT') {
@@ -117,7 +141,7 @@ let RemoteHandlerAbstract = exports.default = (_dec = (0, _decoratorSynchronized
117
141
  this[functionName] = (0, _utils.withTimeout)(this[functionName], DEFAULT_TIMEOUT);
118
142
  }
119
143
  });
120
- this._withRetry.forEach(functionName => {
144
+ Object.entries(this._withRetry).forEach(([functionName, retryOpts]) => {
121
145
  if (this[functionName] !== undefined) {
122
146
  this[functionName] = _promiseToolbox.pRetry.wrap(this[functionName], {
123
147
  delays: [100, 200, 500, 1000, 2000],
@@ -129,8 +153,16 @@ let RemoteHandlerAbstract = exports.default = (_dec = (0, _decoratorSynchronized
129
153
  attemptNumber: this.attemptNumber,
130
154
  delay: this.delay,
131
155
  error,
132
- file: (_this$arguments = this.arguments) === null || _this$arguments === void 0 ? void 0 : _this$arguments[0]
156
+ file: (_this$arguments = this.arguments) === null || _this$arguments === void 0 ? void 0 : _this$arguments[0],
157
+ retryOpts
133
158
  });
159
+ if (retryOpts.updateArguments) {
160
+ warn('updating arguments ', {
161
+ method: functionName,
162
+ attemptNumber: this.attemptNumber
163
+ });
164
+ this.arguments = retryOpts.updateArguments(error, this.arguments);
165
+ }
134
166
  }
135
167
  });
136
168
  }
@@ -1 +1 @@
1
- {"version":3,"file":"abstract.js","names":["_assert","_interopRequireDefault","require","_getStream","_asyncEach","_coalesceCalls","_log","_promiseToolbox","_limitConcurrencyDecorator","_xoRemoteParser","_stream","_crypto","_decoratorSynchronized","_utils","_path","_checksum","_encryptor","_dec","_dec2","_class","e","__esModule","default","_applyDecoratedDescriptor","i","r","n","l","a","Object","keys","forEach","enumerable","configurable","initializer","writable","slice","reverse","reduce","value","call","defineProperty","info","warn","createLogger","checksumFile","file","computeRate","hrtime","size","seconds","DEFAULT_TIMEOUT","DEFAULT_MAX_PARALLEL_OPERATIONS","ENCRYPTION_DESC_FILENAME","ENCRYPTION_METADATA_FILENAME","WITH_LIMIT","WITH_RETRY","WITH_TIMEOUT","ignoreEnoent","error","code","noop","Function","prototype","PrefixWrapper","prefix","constructor","handler","_handler","type","list","dir","opts","entries","_resolve","prependDir","length","entry","rename","oldPath","newPath","path","normalizePath","RemoteHandlerAbstract","exports","synchronized","rawEncryptor","encryptor","#encryptor","undefined","Error","remote","options","url","_remote","parse","highWaterMark","_highWaterMark","timeout","_timeout","withLimit","_withLimit","withTimeout","_withTimeout","withRetry","_withRetry","applySafeGuards","conditionRetry","#conditionRetry","includes","#applySafeGuards","sharedLimit","limitConcurrency","maxParallelOperations","_forget","coalesceCalls","_sync","functionName","pRetry","wrap","delays","when","err","onRetry","_this$arguments","method","attemptNumber","delay","arguments","addPrefix","createReadStream","checksum","ignoreMissingChecksum","end","start","assert","strictEqual","isEncrypted","stream","_createReadStream","fromEvent","_readFile","flags","validChecksumOfReadStream","String","trim","decryptStream","maxStreamLength","getSizeOnDisk","_getSize","outputStream","input","dirMode","streamLength","validator","checksumStream","encryptStream","createChecksumStream","pipeline","_outputStream","_outputFile","forget","getInfo","_getInfo","getSize","__list","filter","ignoreMissing","virtualDir","_list","lock","dispose","_lock","mktree","mode","_mktree","outputFile","data","encryptedData","encryptData","read","buffer","position","_read","__readFile","decryptData","#rename","createTree","p","_rename","Promise","all","dirname","__rename","__copy","_copy","rmdir","_rmdir","catch","rmtree","_rmtree","sync","checkMetadata","canWriteMetadata","#canWriteMetadata","startsWith","createMetadata","#createMetadata","encryptionAlgorithm","encryptionKey","DEFAULT_ENCRYPTION_ALGORITHM","_getEncryptor","_writeFile","JSON","stringify","algorithm","__writeFile","randomUUID","#checkMetadata","json","test","SIZE","testFileName","Date","now","fromCallback","randomBytes","step","writeStart","process","writeDuration","readStart","readDuration","equals","success","writeRate","readRate","ignoreErrors","_unlink","truncate","len","_truncate","__unlink","write","_write","__closeFile","fd","_closeFile","__mkdir","_mkdir","__openFile","_openFile","useVhdDirectory","_createOutputStream","_createWriteStream","resolve","tmpPath","basename","output","then","getStream","files","asyncEach","rmTreeError","concurrency","isPath","_writeFd","id","_this$encryptor","UNENCRYPTED_ALGORITHM","getOwnPropertyDescriptor","proto","getOwnPropertyNames","publicName","hasOwn","createPrefixWrapperMethods","pPw","pRha","hasOwnProperty","name","descriptor","apply"],"sources":["../src/abstract.js"],"sourcesContent":["import assert from 'assert'\nimport getStream from 'get-stream'\nimport { asyncEach } from '@vates/async-each'\nimport { coalesceCalls } from '@vates/coalesce-calls'\nimport { createLogger } from '@xen-orchestra/log'\nimport { fromCallback, fromEvent, ignoreErrors, pRetry } from 'promise-toolbox'\nimport { limitConcurrency } from 'limit-concurrency-decorator'\nimport { parse } from 'xo-remote-parser'\nimport { pipeline } from 'stream'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { synchronized } from 'decorator-synchronized'\n\nimport { withTimeout } from './utils'\nimport { basename, dirname, normalize as normalizePath } from './path'\nimport { createChecksumStream, validChecksumOfReadStream } from './checksum'\nimport { DEFAULT_ENCRYPTION_ALGORITHM, UNENCRYPTED_ALGORITHM, _getEncryptor } from './_encryptor'\n\nconst { info, warn } = createLogger('xo:fs:abstract')\n\nconst checksumFile = file => file + '.checksum'\nconst computeRate = (hrtime, size) => {\n const seconds = hrtime[0] + hrtime[1] / 1e9\n return size / seconds\n}\n\nconst DEFAULT_TIMEOUT = 12e5 // 20 min\nconst DEFAULT_MAX_PARALLEL_OPERATIONS = 10\n\nconst ENCRYPTION_DESC_FILENAME = 'encryption.json'\nconst ENCRYPTION_METADATA_FILENAME = 'metadata.json'\n\nconst WITH_LIMIT = [\n 'closeFile',\n 'copy',\n 'getInfo',\n 'getSizeOnDisk',\n 'list',\n 'mkdir',\n 'openFile',\n 'outputFile',\n 'read',\n 'readFile',\n 'rename',\n 'rmdir',\n 'truncate',\n 'unlink',\n 'write',\n 'writeFile',\n]\n\nconst WITH_RETRY = [\n '_closeFile',\n '_copy',\n '_getInfo',\n '_getSize',\n '_list',\n '_mkdir',\n '_openFile',\n '_outputFile',\n '_read',\n '_readFile',\n '_rename',\n '_rmdir',\n '_truncate',\n '_unlink',\n '_write',\n '_writeFile',\n]\n\nconst WITH_TIMEOUT = [\n '_closeFile',\n '_createReadStream',\n '_getInfo',\n '_getSize',\n '_list',\n '_rename',\n '_copy',\n '_rmdir',\n '_closeFile',\n '_openFile',\n '_createOutputStream',\n]\n\nconst ignoreEnoent = error => {\n if (error == null || error.code !== 'ENOENT') {\n throw error\n }\n}\n\nconst noop = Function.prototype\n\nclass PrefixWrapper {\n #prefix\n\n constructor(handler, prefix) {\n this.#prefix = prefix\n\n // cannot be a private field because used by methods dynamically added\n // outside of the class\n this._handler = handler\n }\n\n get type() {\n return this._handler.type\n }\n\n // necessary to remove the prefix from the path with `prependDir` option\n async list(dir, opts) {\n const entries = await this._handler.list(this._resolve(dir), opts)\n if (opts != null && opts.prependDir) {\n const n = this.#prefix.length\n entries.forEach((entry, i, entries) => {\n entries[i] = entry.slice(n)\n })\n }\n return entries\n }\n\n rename(oldPath, newPath) {\n return this._handler.rename(this._resolve(oldPath), this._resolve(newPath))\n }\n\n // cannot be a private method because used by methods dynamically added\n // outside of the class\n _resolve(path) {\n return this.#prefix + normalizePath(path)\n }\n}\n\nexport default class RemoteHandlerAbstract {\n #rawEncryptor\n\n get #encryptor() {\n if (this.#rawEncryptor === undefined) {\n throw new Error(`Can't access to encryptor before remote synchronization`)\n }\n return this.#rawEncryptor\n }\n\n constructor(remote, options = {}) {\n if (remote.url === 'test://') {\n this._remote = remote\n } else {\n this._remote = { ...remote, ...parse(remote.url) }\n if (this._remote.type !== this.type) {\n throw new Error('Incorrect remote type')\n }\n }\n ;({\n highWaterMark: this._highWaterMark,\n timeout: this._timeout = DEFAULT_TIMEOUT,\n withLimit: this._withLimit = WITH_LIMIT,\n withTimeout: this._withTimeout = WITH_TIMEOUT,\n withRetry: this._withRetry = WITH_RETRY,\n } = options)\n\n this.#applySafeGuards(options)\n }\n\n #conditionRetry(error) {\n return !['EEXIST', 'EISDIR', 'ENOTEMPTY', 'ENOENT', 'ENOTDIR', 'SystemInUse', 'ERR_ASSERTION'].includes(error?.code)\n }\n\n #applySafeGuards(options) {\n const sharedLimit = limitConcurrency(options.maxParallelOperations ?? DEFAULT_MAX_PARALLEL_OPERATIONS)\n\n this._forget = coalesceCalls(this._forget)\n this._sync = coalesceCalls(this._sync)\n\n this._withLimit.forEach(functionName => {\n if (this[functionName] !== undefined) {\n this[functionName] = sharedLimit(this[functionName])\n }\n })\n\n this._withTimeout.forEach(functionName => {\n if (this[functionName] !== undefined) {\n this[functionName] = withTimeout(this[functionName], DEFAULT_TIMEOUT)\n }\n })\n\n this._withRetry.forEach(functionName => {\n if (this[functionName] !== undefined) {\n // adding the retry on the top level method won't\n // cover when _functionName are called internally\n this[functionName] = pRetry.wrap(this[functionName], {\n delays: [100, 200, 500, 1000, 2000],\n // these errors should not change on retry\n when: err => this.#conditionRetry(err),\n onRetry(error) {\n warn('retrying method on fs ', {\n method: functionName,\n attemptNumber: this.attemptNumber,\n delay: this.delay,\n error,\n file: this.arguments?.[0],\n })\n },\n })\n }\n })\n }\n\n // Public members\n //\n // Should not be called directly because:\n // - some concurrency limits may be applied which may lead to deadlocks\n // - some preprocessing may be applied on parameters that should not be done multiple times (e.g. prefixing paths)\n\n get type() {\n throw new Error('Not implemented')\n }\n\n addPrefix(prefix) {\n prefix = normalizePath(prefix)\n return prefix === '/' ? this : new PrefixWrapper(this, prefix)\n }\n\n async createReadStream(file, { checksum = false, ignoreMissingChecksum = false, ...options } = {}) {\n if (options.end !== undefined || options.start !== undefined) {\n assert.strictEqual(this.isEncrypted, false, `Can't read part of a file when encryption is active ${file}`)\n }\n if (typeof file === 'string') {\n file = normalizePath(file)\n }\n\n let stream = await this._createReadStream(file, { ...options, highWaterMark: this._highWaterMark })\n // detect early errors\n await fromEvent(stream, 'readable')\n\n if (checksum) {\n try {\n const path = typeof file === 'string' ? file : file.path\n const checksum = await this._readFile(checksumFile(path), { flags: 'r' })\n\n const { length } = stream\n stream = validChecksumOfReadStream(stream, String(checksum).trim())\n stream.length = length\n } catch (error) {\n if (!(ignoreMissingChecksum && error.code === 'ENOENT')) {\n throw error\n }\n }\n }\n\n if (this.isEncrypted) {\n stream = this.#encryptor.decryptStream(stream)\n }\n\n // try to add the length prop if missing and not a range stream\n if (stream.length === undefined && options.end === undefined && options.start === undefined) {\n try {\n if (this.isEncrypted) {\n stream.maxStreamLength = await this.getSizeOnDisk(file)\n } else {\n stream.length = await this._getSize(file)\n }\n } catch (error) {\n // ignore errors\n }\n }\n\n return stream\n }\n\n /**\n * write a stream to a file using a temporary file\n *\n * @param {string} path\n * @param {ReadableStream} input\n * @param {object} [options]\n * @param {boolean} [options.checksum]\n * @param {number} [options.dirMode]\n * @param {(this: RemoteHandlerAbstract, path: string) => Promise<undefined>} [options.validator] Function that will be called before the data is commited to the remote, if it fails, file should not exist\n */\n async outputStream(path, input, { checksum = true, dirMode, maxStreamLength, streamLength, validator } = {}) {\n path = normalizePath(path)\n let checksumStream\n\n input = this.#encryptor.encryptStream(input)\n if (checksum) {\n checksumStream = createChecksumStream()\n pipeline(input, checksumStream, noop)\n input = checksumStream\n }\n await this._outputStream(path, input, {\n dirMode,\n maxStreamLength,\n streamLength,\n validator,\n })\n if (checksum) {\n // using _outputFile means the checksum will NOT be encrypted\n // it is by design to allow checking of encrypted files without the key\n await this._outputFile(checksumFile(path), await checksumStream.checksum, { dirMode, flags: 'wx' })\n }\n }\n\n // Free the resources possibly dedicated to put the remote at work, when it\n // is no longer needed\n //\n // FIXME: Some handlers are implemented based on system-wide mechanisms (such\n // as mount), forgetting them might breaking other processes using the same\n // remote.\n @synchronized()\n async forget() {\n await this._forget()\n }\n\n async getInfo() {\n return this._getInfo()\n }\n\n // returns the real size occupied by an unencrypted file\n // encrypted files have metadata and padding that blur the real size\n async getSize(file) {\n assert.strictEqual(this.isEncrypted, false, `Can't compute size of an encrypted file ${file}`)\n return this.getSizeOnDisk(file)\n }\n\n async getSizeOnDisk(file) {\n return this._getSize(typeof file === 'string' ? normalizePath(file) : file)\n }\n\n async __list(dir, { filter, ignoreMissing = false, prependDir = false } = {}) {\n try {\n const virtualDir = normalizePath(dir)\n dir = normalizePath(dir)\n\n let entries = await this._list(dir)\n if (filter !== undefined) {\n entries = entries.filter(filter)\n }\n\n if (prependDir) {\n entries.forEach((entry, i) => {\n entries[i] = virtualDir + '/' + entry\n })\n }\n\n return entries\n } catch (error) {\n if (ignoreMissing && error?.code === 'ENOENT') {\n return []\n }\n throw error\n }\n }\n\n async lock(path) {\n path = normalizePath(path)\n return { dispose: await this._lock(path) }\n }\n\n async mktree(dir, { mode } = {}) {\n await this._mktree(normalizePath(dir), { mode })\n }\n\n async outputFile(file, data, { dirMode, flags = 'wx' } = {}) {\n const encryptedData = this.#encryptor.encryptData(data)\n await this._outputFile(normalizePath(file), encryptedData, { dirMode, flags })\n }\n\n async read(file, buffer, position) {\n assert.strictEqual(this.isEncrypted, false, `Can't read part of an encrypted file ${file}`)\n return this._read(typeof file === 'string' ? normalizePath(file) : file, buffer, position)\n }\n\n async __readFile(file, { flags = 'r' } = {}) {\n const data = await this._readFile(normalizePath(file), { flags })\n return this.#encryptor.decryptData(data)\n }\n\n async #rename(oldPath, newPath, { checksum }, createTree = true) {\n try {\n let p = this._rename(oldPath, newPath)\n if (checksum) {\n p = Promise.all([p, this._rename(checksumFile(oldPath), checksumFile(newPath))])\n }\n await p\n } catch (error) {\n // ENOENT can be a missing target directory OR a missing source\n if (error.code === 'ENOENT' && createTree) {\n await this._mktree(dirname(newPath))\n return this.#rename(oldPath, newPath, { checksum }, false)\n }\n throw error\n }\n }\n\n __rename(oldPath, newPath, { checksum = false } = {}) {\n return this.#rename(normalizePath(oldPath), normalizePath(newPath), { checksum })\n }\n\n async __copy(oldPath, newPath, { checksum = false } = {}) {\n oldPath = normalizePath(oldPath)\n newPath = normalizePath(newPath)\n\n let p = this._copy(oldPath, newPath)\n if (checksum) {\n p = Promise.all([p, this._copy(checksumFile(oldPath), checksumFile(newPath))])\n }\n return p\n }\n\n async rmdir(dir) {\n await this._rmdir(normalizePath(dir)).catch(ignoreEnoent)\n }\n\n async rmtree(dir) {\n await this._rmtree(normalizePath(dir))\n }\n\n // Asks the handler to sync the state of the effective remote with its\n // metadata\n //\n // This method MUST ALWAYS be called before using the handler.\n @synchronized()\n async sync() {\n await this._sync()\n try {\n await this.#checkMetadata()\n } catch (error) {\n await this._forget()\n throw error\n }\n }\n\n async #canWriteMetadata() {\n const list = await this.__list('/', {\n filter: e => !e.startsWith('.') && e !== ENCRYPTION_DESC_FILENAME && e !== ENCRYPTION_METADATA_FILENAME,\n })\n return list.length === 0\n }\n\n async #createMetadata() {\n const encryptionAlgorithm = this._remote.encryptionKey === undefined ? 'none' : DEFAULT_ENCRYPTION_ALGORITHM\n this.#rawEncryptor = _getEncryptor(encryptionAlgorithm, this._remote.encryptionKey)\n\n await Promise.all([\n this._writeFile(normalizePath(ENCRYPTION_DESC_FILENAME), JSON.stringify({ algorithm: encryptionAlgorithm }), {\n flags: 'w',\n }), // not encrypted\n this.__writeFile(ENCRYPTION_METADATA_FILENAME, `{\"random\":\"${randomUUID()}\"}`, { flags: 'w' }), // encrypted\n ])\n }\n\n async #checkMetadata() {\n let encryptionAlgorithm = 'none'\n let data\n try {\n // this file is not encrypted\n data = await this._readFile(normalizePath(ENCRYPTION_DESC_FILENAME))\n const json = JSON.parse(data)\n encryptionAlgorithm = json.algorithm\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n encryptionAlgorithm = this._remote.encryptionKey === undefined ? 'none' : DEFAULT_ENCRYPTION_ALGORITHM\n }\n\n try {\n this.#rawEncryptor = _getEncryptor(encryptionAlgorithm, this._remote.encryptionKey)\n // this file is encrypted\n const data = await this.__readFile(ENCRYPTION_METADATA_FILENAME)\n JSON.parse(data)\n } catch (error) {\n // can be enoent, bad algorithm, or broken json ( bad key or algorithm)\n if (encryptionAlgorithm !== 'none') {\n if (await this.#canWriteMetadata()) {\n // any other error , but on empty remote => update with remote settings\n\n info('will update metadata of this remote')\n return this.#createMetadata()\n } else {\n // to add a new encrypted fs remote, the remote directory must be empty; otherwise, metadata.json is not created\n if (error.code === 'ENOENT' && error.path.includes('metadata.json')) {\n throw new Error('Remote directory must be empty.')\n }\n\n warn(\n `The encryptionKey settings of this remote does not match the key used to create it. You won't be able to read any data from this remote`,\n { error }\n )\n // will probably send a ERR_OSSL_EVP_BAD_DECRYPT if key is incorrect\n throw error\n }\n }\n }\n }\n\n async test() {\n const SIZE = 1024 * 1024 * 10\n const testFileName = normalizePath(`${Date.now()}.test`)\n const data = await fromCallback(randomBytes, SIZE)\n let step = 'write'\n try {\n const writeStart = process.hrtime()\n await this._outputFile(testFileName, data, { flags: 'wx' })\n const writeDuration = process.hrtime(writeStart)\n\n step = 'read'\n const readStart = process.hrtime()\n const read = await this._readFile(testFileName, { flags: 'r' })\n const readDuration = process.hrtime(readStart)\n\n if (!data.equals(read)) {\n throw new Error('output and input did not match')\n }\n return {\n success: true,\n writeRate: computeRate(writeDuration, SIZE),\n readRate: computeRate(readDuration, SIZE),\n }\n } catch (error) {\n warn(`error while testing the remote at step ${step}`, { error })\n return {\n success: false,\n step,\n file: testFileName,\n error,\n }\n } finally {\n ignoreErrors.call(this._unlink(testFileName))\n }\n }\n\n async truncate(file, len) {\n await this._truncate(file, len)\n }\n\n async __unlink(file, { checksum = true } = {}) {\n file = normalizePath(file)\n\n if (checksum) {\n ignoreErrors.call(this._unlink(checksumFile(file)))\n }\n\n await this._unlink(file).catch(ignoreEnoent)\n }\n\n async write(file, buffer, position) {\n assert.strictEqual(this.isEncrypted, false, `Can't write part of a file with encryption ${file}`)\n await this._write(typeof file === 'string' ? normalizePath(file) : file, buffer, position)\n }\n\n async __writeFile(file, data, { flags = 'wx' } = {}) {\n const encryptedData = this.#encryptor.encryptData(data)\n await this._writeFile(normalizePath(file), encryptedData, { flags })\n }\n\n // Methods that can be called by private methods to avoid parallel limit on public methods\n\n async __closeFile(fd) {\n await this._closeFile(fd.fd)\n }\n\n async __mkdir(dir, { mode } = {}) {\n dir = normalizePath(dir)\n\n try {\n await this._mkdir(dir, { mode })\n } catch (error) {\n if (error == null || error.code !== 'EEXIST') {\n throw error\n }\n\n // this operation will throw if it's not already a directory\n await this._list(dir)\n }\n }\n\n async __openFile(path, flags) {\n path = normalizePath(path)\n\n return {\n fd: await this._openFile(path, flags),\n path,\n }\n }\n\n // Methods that can be implemented by inheriting classes\n\n useVhdDirectory() {\n return this._remote.useVhdDirectory ?? false\n }\n\n async _closeFile(fd) {\n throw new Error('Not implemented')\n }\n\n async _createOutputStream(file, { dirMode, ...options } = {}) {\n try {\n return await this._createWriteStream(file, { ...options, highWaterMark: this._highWaterMark })\n } catch (error) {\n if (typeof file !== 'string' || error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(file), { mode: dirMode })\n return this._createOutputStream(file, options)\n }\n\n async _createReadStream(file, options) {\n throw new Error('Not implemented')\n }\n\n // createWriteStream takes highWaterMark as option even if it's not documented.\n // Source: https://stackoverflow.com/questions/55026306/how-to-set-writeable-highwatermark\n async _createWriteStream(file, options) {\n throw new Error('Not implemented')\n }\n\n // called to finalize the remote\n async _forget() {}\n\n async _getInfo() {\n return {}\n }\n\n async _lock(path) {\n return () => Promise.resolve()\n }\n\n async _getSize(file) {\n throw new Error('Not implemented')\n }\n\n async _list(dir) {\n throw new Error('Not implemented')\n }\n\n async _mkdir(dir) {\n throw new Error('Not implemented')\n }\n\n async _mktree(dir, { mode } = {}) {\n try {\n return await this.__mkdir(dir, { mode })\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(dir), { mode })\n return this._mktree(dir, { mode })\n }\n\n async _openFile(path, flags) {\n throw new Error('Not implemented')\n }\n\n async _outputFile(file, data, { dirMode, flags }) {\n try {\n return await this._writeFile(file, data, { flags })\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(file), { mode: dirMode })\n return this._outputFile(file, data, { flags })\n }\n\n async _outputStream(path, input, { dirMode, validator }) {\n const tmpPath = `${dirname(path)}/.${Date.now()}.${basename(path)}`\n const output = await this._createOutputStream(tmpPath, {\n dirMode,\n flags: 'wx',\n })\n try {\n await fromCallback(pipeline, input, output)\n if (validator !== undefined) {\n await validator.call(this, tmpPath)\n }\n await this.__rename(tmpPath, path)\n } catch (error) {\n await this.__unlink(tmpPath)\n throw error\n }\n }\n\n _read(file, buffer, position) {\n throw new Error('Not implemented')\n }\n\n _readFile(file, options) {\n return this._createReadStream(file, { ...options, highWaterMark: this._highWaterMark }).then(getStream.buffer)\n }\n\n async _rename(oldPath, newPath) {\n throw new Error('Not implemented')\n }\n async _copy(oldPath, newPath) {\n throw new Error('Not implemented')\n }\n\n async _rmdir(dir) {\n throw new Error('Not implemented')\n }\n\n async _rmtree(dir) {\n try {\n return await this._rmdir(dir)\n } catch (error) {\n if (error.code !== 'ENOTEMPTY') {\n throw error\n }\n }\n\n const files = await this._list(dir)\n await asyncEach(\n files,\n file =>\n this._unlink(`${dir}/${file}`).catch(error => {\n // Unlink dir behavior is not consistent across platforms\n // https://github.com/nodejs/node-v0.x-archive/issues/5791\n if (error.code === 'EISDIR' || error.code === 'EPERM') {\n return this._rmtree(`${dir}/${file}`).catch(rmTreeError => {\n if (rmTreeError.code === 'ENOTDIR') {\n // this was really a EPERM error, maybe with immutable backups\n throw error\n }\n throw rmTreeError\n })\n }\n throw error\n }),\n // real unlink concurrency will be 2**max directory depth\n { concurrency: 2 }\n )\n return this._rmtree(dir)\n }\n\n // called to initialize the remote\n async _sync() {}\n\n async _unlink(file) {\n throw new Error('Not implemented')\n }\n\n async _write(file, buffer, position) {\n const isPath = typeof file === 'string'\n if (isPath) {\n file = await this.__openFile(file, 'r+')\n }\n try {\n return await this._writeFd(file, buffer, position)\n } finally {\n if (isPath) {\n await this.__closeFile(file)\n }\n }\n }\n\n async _writeFd(fd, buffer, position) {\n throw new Error('Not implemented')\n }\n\n async _writeFile(file, data, options) {\n throw new Error('Not implemented')\n }\n\n get isEncrypted() {\n return this.#encryptor.id !== 'NULL_ENCRYPTOR'\n }\n\n get encryptionAlgorithm() {\n return this.#encryptor?.algorithm ?? UNENCRYPTED_ALGORITHM\n }\n}\n\n// from implementation methods, which names start with `__`, create public\n// accessors on which external behaviors can be added (e.g. concurrency limits, path rewriting)\n{\n const proto = RemoteHandlerAbstract.prototype\n for (const method of Object.getOwnPropertyNames(proto)) {\n if (method.startsWith('__')) {\n const publicName = method.slice(2)\n\n assert(!Object.hasOwn(proto, publicName))\n\n Object.defineProperty(proto, publicName, Object.getOwnPropertyDescriptor(proto, method))\n }\n }\n}\n\nfunction createPrefixWrapperMethods() {\n const pPw = PrefixWrapper.prototype\n const pRha = RemoteHandlerAbstract.prototype\n\n const {\n defineProperty,\n getOwnPropertyDescriptor,\n prototype: { hasOwnProperty },\n } = Object\n\n Object.getOwnPropertyNames(pRha).forEach(name => {\n let descriptor, value\n if (\n hasOwnProperty.call(pPw, name) ||\n name[0] === '_' ||\n typeof (value = (descriptor = getOwnPropertyDescriptor(pRha, name)).value) !== 'function'\n ) {\n return\n }\n\n descriptor.value = function () {\n let path\n if (arguments.length !== 0 && typeof (path = arguments[0]) === 'string') {\n arguments[0] = this._resolve(path)\n }\n return value.apply(this._handler, arguments)\n }\n\n defineProperty(pPw, name, descriptor)\n })\n}\ncreatePrefixWrapperMethods()\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"abstract.js","names":["_assert","_interopRequireDefault","require","_getStream","_asyncEach","_coalesceCalls","_log","_promiseToolbox","_limitConcurrencyDecorator","_xoRemoteParser","_stream","_crypto","_decoratorSynchronized","_utils","_path","_checksum","_encryptor","_dec","_dec2","_class","e","__esModule","default","_applyDecoratedDescriptor","i","r","n","l","a","Object","keys","forEach","enumerable","configurable","initializer","writable","slice","reverse","reduce","value","call","defineProperty","info","warn","createLogger","checksumFile","file","computeRate","hrtime","size","seconds","DEFAULT_TIMEOUT","DEFAULT_MAX_PARALLEL_OPERATIONS","ENCRYPTION_DESC_FILENAME","ENCRYPTION_METADATA_FILENAME","WITH_LIMIT","WITH_RETRY","_closeFile","_copy","_getInfo","_getSize","_list","_mkdir","_openFile","_read","_readFile","_rename","_rmdir","_truncate","_unlink","_write","_writeFile","updateArguments","error","data","options","flags","code","WITH_TIMEOUT","ignoreEnoent","noop","Function","prototype","PrefixWrapper","prefix","constructor","handler","_handler","type","list","dir","opts","entries","_resolve","prependDir","length","entry","rename","oldPath","newPath","path","normalizePath","RemoteHandlerAbstract","exports","synchronized","rawEncryptor","encryptor","#encryptor","undefined","Error","remote","url","_remote","parse","highWaterMark","_highWaterMark","timeout","_timeout","withLimit","_withLimit","withTimeout","_withTimeout","withRetry","_withRetry","applySafeGuards","conditionRetry","#conditionRetry","includes","#applySafeGuards","sharedLimit","limitConcurrency","maxParallelOperations","_forget","coalesceCalls","_sync","functionName","retryOpts","pRetry","wrap","delays","when","err","onRetry","_this$arguments","method","attemptNumber","delay","arguments","addPrefix","createReadStream","checksum","ignoreMissingChecksum","end","start","assert","strictEqual","isEncrypted","stream","_createReadStream","fromEvent","validChecksumOfReadStream","String","trim","decryptStream","maxStreamLength","getSizeOnDisk","outputStream","input","dirMode","streamLength","validator","checksumStream","encryptStream","createChecksumStream","pipeline","_outputStream","_outputFile","forget","getInfo","getSize","__list","filter","ignoreMissing","virtualDir","lock","dispose","_lock","mktree","mode","_mktree","outputFile","encryptedData","encryptData","read","buffer","position","__readFile","decryptData","#rename","createTree","p","Promise","all","dirname","__rename","__copy","rmdir","catch","rmtree","_rmtree","sync","checkMetadata","canWriteMetadata","#canWriteMetadata","startsWith","createMetadata","#createMetadata","encryptionAlgorithm","encryptionKey","DEFAULT_ENCRYPTION_ALGORITHM","_getEncryptor","JSON","stringify","algorithm","__writeFile","randomUUID","#checkMetadata","json","test","SIZE","testFileName","Date","now","fromCallback","randomBytes","step","writeStart","process","writeDuration","readStart","readDuration","equals","success","writeRate","readRate","ignoreErrors","truncate","len","__unlink","write","__closeFile","fd","__mkdir","__openFile","useVhdDirectory","_createOutputStream","_createWriteStream","resolve","tmpPath","basename","output","then","getStream","files","asyncEach","rmTreeError","concurrency","isPath","_writeFd","id","_this$encryptor","UNENCRYPTED_ALGORITHM","getOwnPropertyDescriptor","proto","getOwnPropertyNames","publicName","hasOwn","createPrefixWrapperMethods","pPw","pRha","hasOwnProperty","name","descriptor","apply"],"sources":["../src/abstract.js"],"sourcesContent":["import assert from 'assert'\nimport getStream from 'get-stream'\nimport { asyncEach } from '@vates/async-each'\nimport { coalesceCalls } from '@vates/coalesce-calls'\nimport { createLogger } from '@xen-orchestra/log'\nimport { fromCallback, fromEvent, ignoreErrors, pRetry } from 'promise-toolbox'\nimport { limitConcurrency } from 'limit-concurrency-decorator'\nimport { parse } from 'xo-remote-parser'\nimport { pipeline } from 'stream'\nimport { randomBytes, randomUUID } from 'crypto'\nimport { synchronized } from 'decorator-synchronized'\n\nimport { withTimeout } from './utils'\nimport { basename, dirname, normalize as normalizePath } from './path'\nimport { createChecksumStream, validChecksumOfReadStream } from './checksum'\nimport { DEFAULT_ENCRYPTION_ALGORITHM, UNENCRYPTED_ALGORITHM, _getEncryptor } from './_encryptor'\n\nconst { info, warn } = createLogger('xo:fs:abstract')\n\nconst checksumFile = file => file + '.checksum'\nconst computeRate = (hrtime, size) => {\n const seconds = hrtime[0] + hrtime[1] / 1e9\n return size / seconds\n}\n\nconst DEFAULT_TIMEOUT = 12e5 // 20 min\nconst DEFAULT_MAX_PARALLEL_OPERATIONS = 10\n\nconst ENCRYPTION_DESC_FILENAME = 'encryption.json'\nconst ENCRYPTION_METADATA_FILENAME = 'metadata.json'\n\nconst WITH_LIMIT = [\n 'closeFile',\n 'copy',\n 'getInfo',\n 'getSizeOnDisk',\n 'list',\n 'mkdir',\n 'openFile',\n 'outputFile',\n 'read',\n 'readFile',\n 'rename',\n 'rmdir',\n 'truncate',\n 'unlink',\n 'write',\n 'writeFile',\n]\n\nconst WITH_RETRY = {\n _closeFile: {},\n _copy: {},\n _getInfo: {},\n _getSize: {},\n _list: {},\n _mkdir: {},\n _openFile: {},\n _read: {},\n _readFile: {},\n _rename: {},\n _rmdir: {},\n _truncate: {},\n _unlink: {},\n _write: {},\n _writeFile: {\n updateArguments(error, [file, data, options]) {\n options = options ?? {}\n if (options.flags === 'wx' && error.code !== 'EEXIST') {\n options.flags = 'w'\n }\n return [file, data, options]\n },\n },\n}\n\nconst WITH_TIMEOUT = [\n '_closeFile',\n '_createReadStream',\n '_getInfo',\n '_getSize',\n '_list',\n '_rename',\n '_copy',\n '_rmdir',\n '_closeFile',\n '_openFile',\n '_createOutputStream',\n]\n\nconst ignoreEnoent = error => {\n if (error == null || error.code !== 'ENOENT') {\n throw error\n }\n}\n\nconst noop = Function.prototype\n\nclass PrefixWrapper {\n #prefix\n\n constructor(handler, prefix) {\n this.#prefix = prefix\n\n // cannot be a private field because used by methods dynamically added\n // outside of the class\n this._handler = handler\n }\n\n get type() {\n return this._handler.type\n }\n\n // necessary to remove the prefix from the path with `prependDir` option\n async list(dir, opts) {\n const entries = await this._handler.list(this._resolve(dir), opts)\n if (opts != null && opts.prependDir) {\n const n = this.#prefix.length\n entries.forEach((entry, i, entries) => {\n entries[i] = entry.slice(n)\n })\n }\n return entries\n }\n\n rename(oldPath, newPath) {\n return this._handler.rename(this._resolve(oldPath), this._resolve(newPath))\n }\n\n // cannot be a private method because used by methods dynamically added\n // outside of the class\n _resolve(path) {\n return this.#prefix + normalizePath(path)\n }\n}\n\nexport default class RemoteHandlerAbstract {\n #rawEncryptor\n\n get #encryptor() {\n if (this.#rawEncryptor === undefined) {\n throw new Error(`Can't access to encryptor before remote synchronization`)\n }\n return this.#rawEncryptor\n }\n\n constructor(remote, options = {}) {\n if (remote.url === 'test://') {\n this._remote = remote\n } else {\n this._remote = { ...remote, ...parse(remote.url) }\n if (this._remote.type !== this.type) {\n throw new Error('Incorrect remote type')\n }\n }\n ;({\n highWaterMark: this._highWaterMark,\n timeout: this._timeout = DEFAULT_TIMEOUT,\n withLimit: this._withLimit = WITH_LIMIT,\n withTimeout: this._withTimeout = WITH_TIMEOUT,\n withRetry: this._withRetry = WITH_RETRY,\n } = options)\n\n this.#applySafeGuards(options)\n }\n\n #conditionRetry(error) {\n return !['EEXIST', 'EISDIR', 'ENOTEMPTY', 'ENOENT', 'ENOTDIR', 'SystemInUse', 'ERR_ASSERTION'].includes(error?.code)\n }\n\n #applySafeGuards(options) {\n const sharedLimit = limitConcurrency(options.maxParallelOperations ?? DEFAULT_MAX_PARALLEL_OPERATIONS)\n\n this._forget = coalesceCalls(this._forget)\n this._sync = coalesceCalls(this._sync)\n\n this._withLimit.forEach(functionName => {\n if (this[functionName] !== undefined) {\n this[functionName] = sharedLimit(this[functionName])\n }\n })\n\n this._withTimeout.forEach(functionName => {\n if (this[functionName] !== undefined) {\n this[functionName] = withTimeout(this[functionName], DEFAULT_TIMEOUT)\n }\n })\n\n Object.entries(this._withRetry).forEach(([functionName, retryOpts]) => {\n if (this[functionName] !== undefined) {\n // adding the retry on the top level method won't\n // cover when _functionName are called internally\n this[functionName] = pRetry.wrap(this[functionName], {\n delays: [100, 200, 500, 1000, 2000],\n // these errors should not change on retry\n when: err => this.#conditionRetry(err),\n onRetry(error) {\n warn('retrying method on fs ', {\n method: functionName,\n attemptNumber: this.attemptNumber,\n delay: this.delay,\n error,\n file: this.arguments?.[0],\n retryOpts,\n })\n if (retryOpts.updateArguments) {\n warn('updating arguments ', {\n method: functionName,\n attemptNumber: this.attemptNumber,\n })\n this.arguments = retryOpts.updateArguments(error, this.arguments)\n }\n },\n })\n }\n })\n }\n\n // Public members\n //\n // Should not be called directly because:\n // - some concurrency limits may be applied which may lead to deadlocks\n // - some preprocessing may be applied on parameters that should not be done multiple times (e.g. prefixing paths)\n\n get type() {\n throw new Error('Not implemented')\n }\n\n addPrefix(prefix) {\n prefix = normalizePath(prefix)\n return prefix === '/' ? this : new PrefixWrapper(this, prefix)\n }\n\n async createReadStream(file, { checksum = false, ignoreMissingChecksum = false, ...options } = {}) {\n if (options.end !== undefined || options.start !== undefined) {\n assert.strictEqual(this.isEncrypted, false, `Can't read part of a file when encryption is active ${file}`)\n }\n if (typeof file === 'string') {\n file = normalizePath(file)\n }\n\n let stream = await this._createReadStream(file, { ...options, highWaterMark: this._highWaterMark })\n // detect early errors\n await fromEvent(stream, 'readable')\n\n if (checksum) {\n try {\n const path = typeof file === 'string' ? file : file.path\n const checksum = await this._readFile(checksumFile(path), { flags: 'r' })\n\n const { length } = stream\n stream = validChecksumOfReadStream(stream, String(checksum).trim())\n stream.length = length\n } catch (error) {\n if (!(ignoreMissingChecksum && error.code === 'ENOENT')) {\n throw error\n }\n }\n }\n\n if (this.isEncrypted) {\n stream = this.#encryptor.decryptStream(stream)\n }\n\n // try to add the length prop if missing and not a range stream\n if (stream.length === undefined && options.end === undefined && options.start === undefined) {\n try {\n if (this.isEncrypted) {\n stream.maxStreamLength = await this.getSizeOnDisk(file)\n } else {\n stream.length = await this._getSize(file)\n }\n } catch (error) {\n // ignore errors\n }\n }\n\n return stream\n }\n\n /**\n * write a stream to a file using a temporary file\n *\n * @param {string} path\n * @param {ReadableStream} input\n * @param {object} [options]\n * @param {boolean} [options.checksum]\n * @param {number} [options.dirMode]\n * @param {(this: RemoteHandlerAbstract, path: string) => Promise<undefined>} [options.validator] Function that will be called before the data is commited to the remote, if it fails, file should not exist\n */\n async outputStream(path, input, { checksum = true, dirMode, maxStreamLength, streamLength, validator } = {}) {\n path = normalizePath(path)\n let checksumStream\n\n input = this.#encryptor.encryptStream(input)\n if (checksum) {\n checksumStream = createChecksumStream()\n pipeline(input, checksumStream, noop)\n input = checksumStream\n }\n await this._outputStream(path, input, {\n dirMode,\n maxStreamLength,\n streamLength,\n validator,\n })\n if (checksum) {\n // using _outputFile means the checksum will NOT be encrypted\n // it is by design to allow checking of encrypted files without the key\n await this._outputFile(checksumFile(path), await checksumStream.checksum, { dirMode, flags: 'wx' })\n }\n }\n\n // Free the resources possibly dedicated to put the remote at work, when it\n // is no longer needed\n //\n // FIXME: Some handlers are implemented based on system-wide mechanisms (such\n // as mount), forgetting them might breaking other processes using the same\n // remote.\n @synchronized()\n async forget() {\n await this._forget()\n }\n\n async getInfo() {\n return this._getInfo()\n }\n\n // returns the real size occupied by an unencrypted file\n // encrypted files have metadata and padding that blur the real size\n async getSize(file) {\n assert.strictEqual(this.isEncrypted, false, `Can't compute size of an encrypted file ${file}`)\n return this.getSizeOnDisk(file)\n }\n\n async getSizeOnDisk(file) {\n return this._getSize(typeof file === 'string' ? normalizePath(file) : file)\n }\n\n async __list(dir, { filter, ignoreMissing = false, prependDir = false } = {}) {\n try {\n const virtualDir = normalizePath(dir)\n dir = normalizePath(dir)\n\n let entries = await this._list(dir)\n if (filter !== undefined) {\n entries = entries.filter(filter)\n }\n\n if (prependDir) {\n entries.forEach((entry, i) => {\n entries[i] = virtualDir + '/' + entry\n })\n }\n\n return entries\n } catch (error) {\n if (ignoreMissing && error?.code === 'ENOENT') {\n return []\n }\n throw error\n }\n }\n\n async lock(path) {\n path = normalizePath(path)\n return { dispose: await this._lock(path) }\n }\n\n async mktree(dir, { mode } = {}) {\n await this._mktree(normalizePath(dir), { mode })\n }\n\n async outputFile(file, data, { dirMode, flags = 'wx' } = {}) {\n const encryptedData = this.#encryptor.encryptData(data)\n await this._outputFile(normalizePath(file), encryptedData, { dirMode, flags })\n }\n\n async read(file, buffer, position) {\n assert.strictEqual(this.isEncrypted, false, `Can't read part of an encrypted file ${file}`)\n return this._read(typeof file === 'string' ? normalizePath(file) : file, buffer, position)\n }\n\n async __readFile(file, { flags = 'r' } = {}) {\n const data = await this._readFile(normalizePath(file), { flags })\n return this.#encryptor.decryptData(data)\n }\n\n async #rename(oldPath, newPath, { checksum }, createTree = true) {\n try {\n let p = this._rename(oldPath, newPath)\n if (checksum) {\n p = Promise.all([p, this._rename(checksumFile(oldPath), checksumFile(newPath))])\n }\n await p\n } catch (error) {\n // ENOENT can be a missing target directory OR a missing source\n if (error.code === 'ENOENT' && createTree) {\n await this._mktree(dirname(newPath))\n return this.#rename(oldPath, newPath, { checksum }, false)\n }\n throw error\n }\n }\n\n __rename(oldPath, newPath, { checksum = false } = {}) {\n return this.#rename(normalizePath(oldPath), normalizePath(newPath), { checksum })\n }\n\n async __copy(oldPath, newPath, { checksum = false } = {}) {\n oldPath = normalizePath(oldPath)\n newPath = normalizePath(newPath)\n\n let p = this._copy(oldPath, newPath)\n if (checksum) {\n p = Promise.all([p, this._copy(checksumFile(oldPath), checksumFile(newPath))])\n }\n return p\n }\n\n async rmdir(dir) {\n await this._rmdir(normalizePath(dir)).catch(ignoreEnoent)\n }\n\n async rmtree(dir) {\n await this._rmtree(normalizePath(dir))\n }\n\n // Asks the handler to sync the state of the effective remote with its\n // metadata\n //\n // This method MUST ALWAYS be called before using the handler.\n @synchronized()\n async sync() {\n await this._sync()\n try {\n await this.#checkMetadata()\n } catch (error) {\n await this._forget()\n throw error\n }\n }\n\n async #canWriteMetadata() {\n const list = await this.__list('/', {\n filter: e => !e.startsWith('.') && e !== ENCRYPTION_DESC_FILENAME && e !== ENCRYPTION_METADATA_FILENAME,\n })\n return list.length === 0\n }\n\n async #createMetadata() {\n const encryptionAlgorithm = this._remote.encryptionKey === undefined ? 'none' : DEFAULT_ENCRYPTION_ALGORITHM\n this.#rawEncryptor = _getEncryptor(encryptionAlgorithm, this._remote.encryptionKey)\n\n await Promise.all([\n this._writeFile(normalizePath(ENCRYPTION_DESC_FILENAME), JSON.stringify({ algorithm: encryptionAlgorithm }), {\n flags: 'w',\n }), // not encrypted\n this.__writeFile(ENCRYPTION_METADATA_FILENAME, `{\"random\":\"${randomUUID()}\"}`, { flags: 'w' }), // encrypted\n ])\n }\n\n async #checkMetadata() {\n let encryptionAlgorithm = 'none'\n let data\n try {\n // this file is not encrypted\n data = await this._readFile(normalizePath(ENCRYPTION_DESC_FILENAME))\n const json = JSON.parse(data)\n encryptionAlgorithm = json.algorithm\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n encryptionAlgorithm = this._remote.encryptionKey === undefined ? 'none' : DEFAULT_ENCRYPTION_ALGORITHM\n }\n\n try {\n this.#rawEncryptor = _getEncryptor(encryptionAlgorithm, this._remote.encryptionKey)\n // this file is encrypted\n const data = await this.__readFile(ENCRYPTION_METADATA_FILENAME)\n JSON.parse(data)\n } catch (error) {\n // can be enoent, bad algorithm, or broken json ( bad key or algorithm)\n if (encryptionAlgorithm !== 'none') {\n if (await this.#canWriteMetadata()) {\n // any other error , but on empty remote => update with remote settings\n\n info('will update metadata of this remote')\n return this.#createMetadata()\n } else {\n // to add a new encrypted fs remote, the remote directory must be empty; otherwise, metadata.json is not created\n if (error.code === 'ENOENT' && error.path.includes('metadata.json')) {\n throw new Error('Remote directory must be empty.')\n }\n\n warn(\n `The encryptionKey settings of this remote does not match the key used to create it. You won't be able to read any data from this remote`,\n { error }\n )\n // will probably send a ERR_OSSL_EVP_BAD_DECRYPT if key is incorrect\n throw error\n }\n }\n }\n }\n\n async test() {\n const SIZE = 1024 * 1024 * 10\n const testFileName = normalizePath(`${Date.now()}.test`)\n const data = await fromCallback(randomBytes, SIZE)\n let step = 'write'\n try {\n const writeStart = process.hrtime()\n await this._outputFile(testFileName, data, { flags: 'wx' })\n const writeDuration = process.hrtime(writeStart)\n\n step = 'read'\n const readStart = process.hrtime()\n const read = await this._readFile(testFileName, { flags: 'r' })\n const readDuration = process.hrtime(readStart)\n\n if (!data.equals(read)) {\n throw new Error('output and input did not match')\n }\n return {\n success: true,\n writeRate: computeRate(writeDuration, SIZE),\n readRate: computeRate(readDuration, SIZE),\n }\n } catch (error) {\n warn(`error while testing the remote at step ${step}`, { error })\n return {\n success: false,\n step,\n file: testFileName,\n error,\n }\n } finally {\n ignoreErrors.call(this._unlink(testFileName))\n }\n }\n\n async truncate(file, len) {\n await this._truncate(file, len)\n }\n\n async __unlink(file, { checksum = true } = {}) {\n file = normalizePath(file)\n\n if (checksum) {\n ignoreErrors.call(this._unlink(checksumFile(file)))\n }\n\n await this._unlink(file).catch(ignoreEnoent)\n }\n\n async write(file, buffer, position) {\n assert.strictEqual(this.isEncrypted, false, `Can't write part of a file with encryption ${file}`)\n await this._write(typeof file === 'string' ? normalizePath(file) : file, buffer, position)\n }\n\n async __writeFile(file, data, { flags = 'wx' } = {}) {\n const encryptedData = this.#encryptor.encryptData(data)\n await this._writeFile(normalizePath(file), encryptedData, { flags })\n }\n\n // Methods that can be called by private methods to avoid parallel limit on public methods\n\n async __closeFile(fd) {\n await this._closeFile(fd.fd)\n }\n\n async __mkdir(dir, { mode } = {}) {\n dir = normalizePath(dir)\n\n try {\n await this._mkdir(dir, { mode })\n } catch (error) {\n if (error == null || error.code !== 'EEXIST') {\n throw error\n }\n\n // this operation will throw if it's not already a directory\n await this._list(dir)\n }\n }\n\n async __openFile(path, flags) {\n path = normalizePath(path)\n\n return {\n fd: await this._openFile(path, flags),\n path,\n }\n }\n\n // Methods that can be implemented by inheriting classes\n\n useVhdDirectory() {\n return this._remote.useVhdDirectory ?? false\n }\n\n async _closeFile(fd) {\n throw new Error('Not implemented')\n }\n\n async _createOutputStream(file, { dirMode, ...options } = {}) {\n try {\n return await this._createWriteStream(file, { ...options, highWaterMark: this._highWaterMark })\n } catch (error) {\n if (typeof file !== 'string' || error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(file), { mode: dirMode })\n return this._createOutputStream(file, options)\n }\n\n async _createReadStream(file, options) {\n throw new Error('Not implemented')\n }\n\n // createWriteStream takes highWaterMark as option even if it's not documented.\n // Source: https://stackoverflow.com/questions/55026306/how-to-set-writeable-highwatermark\n async _createWriteStream(file, options) {\n throw new Error('Not implemented')\n }\n\n // called to finalize the remote\n async _forget() {}\n\n async _getInfo() {\n return {}\n }\n\n async _lock(path) {\n return () => Promise.resolve()\n }\n\n async _getSize(file) {\n throw new Error('Not implemented')\n }\n\n async _list(dir) {\n throw new Error('Not implemented')\n }\n\n async _mkdir(dir) {\n throw new Error('Not implemented')\n }\n\n async _mktree(dir, { mode } = {}) {\n try {\n return await this.__mkdir(dir, { mode })\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(dir), { mode })\n return this._mktree(dir, { mode })\n }\n\n async _openFile(path, flags) {\n throw new Error('Not implemented')\n }\n\n async _outputFile(file, data, { dirMode, flags }) {\n try {\n return await this._writeFile(file, data, { flags })\n } catch (error) {\n if (error.code !== 'ENOENT') {\n throw error\n }\n }\n\n await this._mktree(dirname(file), { mode: dirMode })\n return this._outputFile(file, data, { flags })\n }\n\n async _outputStream(path, input, { dirMode, validator }) {\n const tmpPath = `${dirname(path)}/.${Date.now()}.${basename(path)}`\n const output = await this._createOutputStream(tmpPath, {\n dirMode,\n flags: 'wx',\n })\n try {\n await fromCallback(pipeline, input, output)\n if (validator !== undefined) {\n await validator.call(this, tmpPath)\n }\n await this.__rename(tmpPath, path)\n } catch (error) {\n await this.__unlink(tmpPath)\n throw error\n }\n }\n\n _read(file, buffer, position) {\n throw new Error('Not implemented')\n }\n\n _readFile(file, options) {\n return this._createReadStream(file, { ...options, highWaterMark: this._highWaterMark }).then(getStream.buffer)\n }\n\n async _rename(oldPath, newPath) {\n throw new Error('Not implemented')\n }\n async _copy(oldPath, newPath) {\n throw new Error('Not implemented')\n }\n\n async _rmdir(dir) {\n throw new Error('Not implemented')\n }\n\n async _rmtree(dir) {\n try {\n return await this._rmdir(dir)\n } catch (error) {\n if (error.code !== 'ENOTEMPTY') {\n throw error\n }\n }\n\n const files = await this._list(dir)\n await asyncEach(\n files,\n file =>\n this._unlink(`${dir}/${file}`).catch(error => {\n // Unlink dir behavior is not consistent across platforms\n // https://github.com/nodejs/node-v0.x-archive/issues/5791\n if (error.code === 'EISDIR' || error.code === 'EPERM') {\n return this._rmtree(`${dir}/${file}`).catch(rmTreeError => {\n if (rmTreeError.code === 'ENOTDIR') {\n // this was really a EPERM error, maybe with immutable backups\n throw error\n }\n throw rmTreeError\n })\n }\n throw error\n }),\n // real unlink concurrency will be 2**max directory depth\n { concurrency: 2 }\n )\n return this._rmtree(dir)\n }\n\n // called to initialize the remote\n async _sync() {}\n\n async _unlink(file) {\n throw new Error('Not implemented')\n }\n\n async _write(file, buffer, position) {\n const isPath = typeof file === 'string'\n if (isPath) {\n file = await this.__openFile(file, 'r+')\n }\n try {\n return await this._writeFd(file, buffer, position)\n } finally {\n if (isPath) {\n await this.__closeFile(file)\n }\n }\n }\n\n async _writeFd(fd, buffer, position) {\n throw new Error('Not implemented')\n }\n\n async _writeFile(file, data, options) {\n throw new Error('Not implemented')\n }\n\n get isEncrypted() {\n return this.#encryptor.id !== 'NULL_ENCRYPTOR'\n }\n\n get encryptionAlgorithm() {\n return this.#encryptor?.algorithm ?? UNENCRYPTED_ALGORITHM\n }\n}\n\n// from implementation methods, which names start with `__`, create public\n// accessors on which external behaviors can be added (e.g. concurrency limits, path rewriting)\n{\n const proto = RemoteHandlerAbstract.prototype\n for (const method of Object.getOwnPropertyNames(proto)) {\n if (method.startsWith('__')) {\n const publicName = method.slice(2)\n\n assert(!Object.hasOwn(proto, publicName))\n\n Object.defineProperty(proto, publicName, Object.getOwnPropertyDescriptor(proto, method))\n }\n }\n}\n\nfunction createPrefixWrapperMethods() {\n const pPw = PrefixWrapper.prototype\n const pRha = RemoteHandlerAbstract.prototype\n\n const {\n defineProperty,\n getOwnPropertyDescriptor,\n prototype: { hasOwnProperty },\n } = Object\n\n Object.getOwnPropertyNames(pRha).forEach(name => {\n let descriptor, value\n if (\n hasOwnProperty.call(pPw, name) ||\n name[0] === '_' ||\n typeof (value = (descriptor = getOwnPropertyDescriptor(pRha, name)).value) !== 'function'\n ) {\n return\n }\n\n descriptor.value = function () {\n let path\n if (arguments.length !== 0 && typeof (path = arguments[0]) === 'string') {\n arguments[0] = this._resolve(path)\n }\n return value.apply(this._handler, arguments)\n }\n\n defineProperty(pPw, name, descriptor)\n })\n}\ncreatePrefixWrapperMethods()\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "private": false,
3
3
  "name": "@xen-orchestra/fs",
4
- "version": "4.6.3",
4
+ "version": "4.6.4",
5
5
  "license": "AGPL-3.0-or-later",
6
6
  "description": "The File System for Xen Orchestra backups.",
7
7
  "homepage": "https://github.com/vatesfr/xen-orchestra/tree/master/@xen-orchestra/fs",
@@ -26,7 +26,7 @@
26
26
  "@aws-sdk/middleware-apply-body-checksum": "^3.58.0",
27
27
  "@aws-sdk/node-http-handler": "^3.54.0",
28
28
  "@azure/storage-blob": "^12.26.0",
29
- "@vates/async-each": "^1.0.0",
29
+ "@vates/async-each": "^1.0.1",
30
30
  "@vates/coalesce-calls": "^0.1.0",
31
31
  "@vates/decorate-with": "^2.1.0",
32
32
  "@vates/read-chunk": "^1.2.1",