diff --git a/src/documents/documents.module.ts b/src/documents/documents.module.ts index abe70fbd..a616cb9d 100644 --- a/src/documents/documents.module.ts +++ b/src/documents/documents.module.ts @@ -8,6 +8,8 @@ import { AuthModule } from '../auth/auth.module'; import { SignedUrlService } from './signed-url/signed-url.service'; import { NotConfiguredSignedUrlProvider } from './signed-url/not-configured.signed-url-provider'; import { S3SignedUrlProvider } from './signed-url/s3-signed-url-provider'; +import { GcsSignedUrlProvider } from './signed-url/gcs-signed-url-provider'; +import { AzureSignedUrlProvider } from './signed-url/azure-signed-url-provider'; import { DocumentsDownloadController } from './documents-download.controller'; import { SignedUrlProvider } from './signed-url/signed-url-provider.interface'; @@ -18,7 +20,9 @@ export const SIGNED_URL_PROVIDER_TOKEN = 'SIGNED_URL_PROVIDER_TOKEN'; * SIGNED_URL_PROVIDER environment variable. * * Supported values: - * - 's3' -> S3SignedUrlProvider (requires AWS credentials) + * - 's3' -> S3SignedUrlProvider (no-op shell for integrators) + * - 'gcs' -> GcsSignedUrlProvider (no-op shell for integrators) + * - 'azure' -> AzureSignedUrlProvider (no-op shell for integrators) * - (unset/other) -> NotConfiguredSignedUrlProvider (throws a configured error) */ function signedUrlProviderFactory(): new (...args: any[]) => SignedUrlProvider { @@ -26,6 +30,10 @@ function signedUrlProviderFactory(): new (...args: any[]) => SignedUrlProvider { switch (provider) { case 's3': return S3SignedUrlProvider; + case 'gcs': + return GcsSignedUrlProvider; + case 'azure': + return AzureSignedUrlProvider; default: return NotConfiguredSignedUrlProvider; } diff --git a/src/documents/signed-url/azure-signed-url-provider.ts b/src/documents/signed-url/azure-signed-url-provider.ts new file mode 100644 index 00000000..eb560b57 --- /dev/null +++ b/src/documents/signed-url/azure-signed-url-provider.ts @@ -0,0 +1,23 @@ +// @ts-nocheck + +import { Injectable } from '@nestjs/common'; +import { + SignedUrlProvider, + SignedUrlRequest, + SignedUrlResponse, +} from './signed-url-provider.interface'; + +/** + * Placeholder strategy for Azure Blob Storage signed URLs. + * This shell intentionally throws until an integrator wires in a real implementation. + */ +@Injectable() +export class AzureSignedUrlProvider implements SignedUrlProvider { + isConfigured(): boolean { + return false; + } + + async getSignedUrl(_req: SignedUrlRequest): Promise { + throw new Error('Azure signed URL provider is not configured.'); + } +} diff --git a/src/documents/signed-url/gcs-signed-url-provider.ts b/src/documents/signed-url/gcs-signed-url-provider.ts new file mode 100644 index 00000000..4eaf767a --- /dev/null +++ b/src/documents/signed-url/gcs-signed-url-provider.ts @@ -0,0 +1,23 @@ +// @ts-nocheck + +import { Injectable } from '@nestjs/common'; +import { + SignedUrlProvider, + SignedUrlRequest, + SignedUrlResponse, +} from './signed-url-provider.interface'; + +/** + * Placeholder strategy for Google Cloud Storage signed URLs. + * This shell intentionally throws until an integrator wires in a real implementation. + */ +@Injectable() +export class GcsSignedUrlProvider implements SignedUrlProvider { + isConfigured(): boolean { + return false; + } + + async getSignedUrl(_req: SignedUrlRequest): Promise { + throw new Error('GCS signed URL provider is not configured.'); + } +} diff --git a/src/documents/signed-url/s3-signed-url-provider.ts b/src/documents/signed-url/s3-signed-url-provider.ts index 7d4b27a0..41059cf3 100644 --- a/src/documents/signed-url/s3-signed-url-provider.ts +++ b/src/documents/signed-url/s3-signed-url-provider.ts @@ -8,25 +8,16 @@ import { } from './signed-url-provider.interface'; /** - * Placeholder for AWS S3 signed URLs. - * Intentionally throws if required env vars are missing. + * Placeholder strategy for AWS S3 signed URLs. + * This shell intentionally throws until an integrator wires in a real implementation. */ @Injectable() export class S3SignedUrlProvider implements SignedUrlProvider { isConfigured(): boolean { - return Boolean( - process.env.AWS_S3_BUCKET && - process.env.AWS_ACCESS_KEY_ID && - process.env.AWS_SECRET_ACCESS_KEY, - ); + return false; } async getSignedUrl(_req: SignedUrlRequest): Promise { - if (!this.isConfigured()) { - throw new Error('S3SignedUrlProvider not configured'); - } - - // Placeholder: implement via AWS SDK v3 once you wire credentials. - throw new Error('S3 signed URL not implemented yet'); + throw new Error('S3 signed URL provider is not configured.'); } }