diff --git a/packages/ditto/middleware/uploaderMiddleware.ts b/packages/ditto/middleware/uploaderMiddleware.ts index 6866b883..056106c1 100644 --- a/packages/ditto/middleware/uploaderMiddleware.ts +++ b/packages/ditto/middleware/uploaderMiddleware.ts @@ -2,44 +2,44 @@ import { BlossomUploader, NostrBuildUploader } from '@nostrify/nostrify/uploader import { safeFetch } from '@soapbox/safe-fetch'; import { AppMiddleware } from '@/app.ts'; -import { Conf } from '@/config.ts'; import { DenoUploader } from '@/uploaders/DenoUploader.ts'; import { IPFSUploader } from '@/uploaders/IPFSUploader.ts'; import { S3Uploader } from '@/uploaders/S3Uploader.ts'; /** Set an uploader for the user. */ export const uploaderMiddleware: AppMiddleware = async (c, next) => { - const signer = c.get('signer'); + const { signer, conf } = c.var; - switch (Conf.uploader) { + switch (conf.uploader) { case 's3': c.set( 'uploader', new S3Uploader({ - accessKey: Conf.s3.accessKey, - bucket: Conf.s3.bucket, - endPoint: Conf.s3.endPoint!, - pathStyle: Conf.s3.pathStyle, - port: Conf.s3.port, - region: Conf.s3.region!, - secretKey: Conf.s3.secretKey, - sessionToken: Conf.s3.sessionToken, - useSSL: Conf.s3.useSSL, + accessKey: conf.s3.accessKey, + bucket: conf.s3.bucket, + endPoint: conf.s3.endPoint!, + pathStyle: conf.s3.pathStyle, + port: conf.s3.port, + region: conf.s3.region!, + secretKey: conf.s3.secretKey, + sessionToken: conf.s3.sessionToken, + useSSL: conf.s3.useSSL, + baseUrl: conf.mediaDomain, }), ); break; case 'ipfs': - c.set('uploader', new IPFSUploader({ baseUrl: Conf.mediaDomain, apiUrl: Conf.ipfs.apiUrl, fetch: safeFetch })); + c.set('uploader', new IPFSUploader({ baseUrl: conf.mediaDomain, apiUrl: conf.ipfs.apiUrl, fetch: safeFetch })); break; case 'local': - c.set('uploader', new DenoUploader({ baseUrl: Conf.mediaDomain, dir: Conf.uploadsDir })); + c.set('uploader', new DenoUploader({ baseUrl: conf.mediaDomain, dir: conf.uploadsDir })); break; case 'nostrbuild': - c.set('uploader', new NostrBuildUploader({ endpoint: Conf.nostrbuildEndpoint, signer, fetch: safeFetch })); + c.set('uploader', new NostrBuildUploader({ endpoint: conf.nostrbuildEndpoint, signer, fetch: safeFetch })); break; case 'blossom': if (signer) { - c.set('uploader', new BlossomUploader({ servers: Conf.blossomServers, signer, fetch: safeFetch })); + c.set('uploader', new BlossomUploader({ servers: conf.blossomServers, signer, fetch: safeFetch })); } break; } diff --git a/packages/ditto/uploaders/S3Uploader.ts b/packages/ditto/uploaders/S3Uploader.ts index b74796ab..c0d776f8 100644 --- a/packages/ditto/uploaders/S3Uploader.ts +++ b/packages/ditto/uploaders/S3Uploader.ts @@ -6,8 +6,6 @@ import { crypto } from '@std/crypto'; import { encodeHex } from '@std/encoding/hex'; import { extensionsByType } from '@std/media-types'; -import { Conf } from '@/config.ts'; - export interface S3UploaderOpts { endPoint: string; region: string; @@ -18,13 +16,14 @@ export interface S3UploaderOpts { port?: number; sessionToken?: string; useSSL?: boolean; + baseUrl?: string; } /** S3-compatible uploader for AWS, Wasabi, DigitalOcean Spaces, and more. */ export class S3Uploader implements NUploader { private client: S3Client; - constructor(opts: S3UploaderOpts) { + constructor(private opts: S3UploaderOpts) { this.client = new S3Client(opts); } @@ -40,10 +39,10 @@ export class S3Uploader implements NUploader { }, }); - const { pathStyle, bucket } = Conf.s3; + const { pathStyle, bucket, baseUrl } = this.opts; const path = (pathStyle && bucket) ? join(bucket, filename) : filename; - const url = new URL(path, Conf.mediaDomain).toString(); + const url = new URL(path, baseUrl).toString(); return [ ['url', url],