Depends on: #7092 | Story: [PAY-768](https://linear.app/n8n/issue/PAY-768) This PR: - Generalizes the `IBinaryDataManager` interface. - Adjusts `Filesystem.ts` to satisfy the interface. - Sets up an S3 client stub to be filled in in the next PR. - Turns `BinaryDataManager` into an injectable service. - Adjusts the config schema and adds new validators. Note that the PR looks large but all the main changes are in `packages/core/src/binaryData`. Out of scope: - `BinaryDataManager` (now `BinaryDataService`) and `Filesystem.ts` (now `fs.client.ts`) were slightly refactored for maintainability, but fully overhauling them is **not** the focus of this PR, which is meant to clear the way for the S3 implementation. Future improvements for these two should include setting up a backwards-compatible dir structure that makes it easier to locate binary data files to delete, removing duplication, simplifying cloning methods, using integers for binary data size instead of `prettyBytes()`, writing tests for existing binary data logic, etc. --------- Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
26 lines
723 B
TypeScript
26 lines
723 B
TypeScript
import type { BinaryData } from './types';
|
|
|
|
/**
|
|
* Modes for storing binary data:
|
|
* - `default` (in memory)
|
|
* - `filesystem` (on disk)
|
|
* - `s3` (S3-compatible storage)
|
|
*/
|
|
export const BINARY_DATA_MODES = ['default', 'filesystem', 's3'] as const;
|
|
|
|
export function areValidModes(modes: string[]): modes is BinaryData.Mode[] {
|
|
return modes.every((m) => BINARY_DATA_MODES.includes(m as BinaryData.Mode));
|
|
}
|
|
|
|
export class InvalidBinaryDataModeError extends Error {
|
|
constructor() {
|
|
super(`Invalid binary data mode. Valid modes: ${BINARY_DATA_MODES.join(', ')}`);
|
|
}
|
|
}
|
|
|
|
export class InvalidBinaryDataManagerError extends Error {
|
|
constructor(mode: string) {
|
|
super('No binary data manager found for mode: ' + mode);
|
|
}
|
|
}
|