feat(06-02): add sftp entry to registry, index, and rclone-conf
- Add sftp entry to BACKEND_REGISTRY with host, user, pass, key_pem fields - Remove placeholder NOTE comment (sftp entry now present) - Add sftp, onedrive, gcs, b2 to BACKEND_SCHEMAS in index.ts - Add sftp, onedrive, gcs (google cloud storage), b2 to RCLONE_TYPE_MAP - All 55 registry and rclone-conf tests pass; zero TypeScript errors
This commit is contained in:
@@ -11,6 +11,10 @@ const RCLONE_TYPE_MAP: Record<string, string> = {
|
|||||||
azureblob: 'azureblob',
|
azureblob: 'azureblob',
|
||||||
s3: 's3',
|
s3: 's3',
|
||||||
's3-compatible': 's3',
|
's3-compatible': 's3',
|
||||||
|
onedrive: 'onedrive',
|
||||||
|
sftp: 'sftp',
|
||||||
|
gcs: 'google cloud storage',
|
||||||
|
b2: 'b2',
|
||||||
};
|
};
|
||||||
|
|
||||||
export function buildRcloneConf(state: WizardState): string {
|
export function buildRcloneConf(state: WizardState): string {
|
||||||
|
|||||||
@@ -21,5 +21,9 @@ export const BACKEND_SCHEMAS = {
|
|||||||
azureblob: buildZodSchema('azureblob'),
|
azureblob: buildZodSchema('azureblob'),
|
||||||
s3: buildZodSchema('s3'),
|
s3: buildZodSchema('s3'),
|
||||||
's3-compatible': buildZodSchema('s3-compatible'),
|
's3-compatible': buildZodSchema('s3-compatible'),
|
||||||
|
onedrive: buildZodSchema('onedrive'),
|
||||||
|
sftp: buildZodSchema('sftp'),
|
||||||
|
gcs: buildZodSchema('gcs'),
|
||||||
|
b2: buildZodSchema('b2'),
|
||||||
} as const;
|
} as const;
|
||||||
|
|
||||||
|
|||||||
+35
-3
@@ -16,9 +16,6 @@ export interface FieldDef {
|
|||||||
options?: { value: string; label: string }[]; // for inputType: 'select'
|
options?: { value: string; label: string }[]; // for inputType: 'select'
|
||||||
}
|
}
|
||||||
|
|
||||||
// NOTE: 'sftp' entry is intentionally missing — Plan 02 (06-02-PLAN.md) adds it.
|
|
||||||
// The type cast below suppresses the incomplete-record error until that plan runs.
|
|
||||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
||||||
export const BACKEND_REGISTRY = {
|
export const BACKEND_REGISTRY = {
|
||||||
azureblob: {
|
azureblob: {
|
||||||
displayName: 'Azure Blob Storage',
|
displayName: 'Azure Blob Storage',
|
||||||
@@ -180,6 +177,41 @@ export const BACKEND_REGISTRY = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
sftp: {
|
||||||
|
displayName: 'SFTP',
|
||||||
|
description: 'SSH File Transfer Protocol',
|
||||||
|
fields: [
|
||||||
|
{
|
||||||
|
key: 'host',
|
||||||
|
label: 'Host',
|
||||||
|
inputType: 'text',
|
||||||
|
required: true,
|
||||||
|
placeholder: 'sftp.example.com',
|
||||||
|
helpText: 'The SSH server hostname or IP address',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'user',
|
||||||
|
label: 'Username',
|
||||||
|
inputType: 'text',
|
||||||
|
required: true,
|
||||||
|
placeholder: 'admin',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'pass',
|
||||||
|
label: 'Password',
|
||||||
|
inputType: 'password',
|
||||||
|
required: false,
|
||||||
|
helpText: 'SFTP password. Note: rclone may require the password to be obscured using `rclone obscure <password>`. If authentication fails, use the obscured value instead of the plain password.',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
key: 'key_pem',
|
||||||
|
label: 'Private Key (PEM)',
|
||||||
|
inputType: 'password',
|
||||||
|
required: false,
|
||||||
|
helpText: 'Paste your private key in PEM format (-----BEGIN ... PRIVATE KEY-----)',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
},
|
||||||
b2: {
|
b2: {
|
||||||
displayName: 'Backblaze B2',
|
displayName: 'Backblaze B2',
|
||||||
description: 'Backblaze B2 Cloud Storage',
|
description: 'Backblaze B2 Cloud Storage',
|
||||||
|
|||||||
Reference in New Issue
Block a user