diff --git a/.changeset/strong-dolphins-perform.md b/.changeset/strong-dolphins-perform.md new file mode 100644 index 00000000000..c2307d012b5 --- /dev/null +++ b/.changeset/strong-dolphins-perform.md @@ -0,0 +1,6 @@ +--- +"@thirdweb-dev/solana": patch +"@thirdweb-dev/storage": patch +--- + +Update API for instantiating storage diff --git a/packages/solana/src/sdk.ts b/packages/solana/src/sdk.ts index c67093cd665..9e395f2ba53 100644 --- a/packages/solana/src/sdk.ts +++ b/packages/solana/src/sdk.ts @@ -63,9 +63,9 @@ export class ThirdwebSDK { constructor( connection: Connection, - storage: ThirdwebStorage = new ThirdwebStorage( - new IpfsUploader({ uploadWithGatewayUrl: true }), - ), + storage: ThirdwebStorage = new ThirdwebStorage({ + uploader: new IpfsUploader({ uploadWithGatewayUrl: true }), + }), ) { this.connection = connection; this.storage = storage; diff --git a/packages/storage/src/core/downloaders/storage-downloader.ts b/packages/storage/src/core/downloaders/storage-downloader.ts index 6f97cdc749b..e644736957f 100644 --- a/packages/storage/src/core/downloaders/storage-downloader.ts +++ b/packages/storage/src/core/downloaders/storage-downloader.ts @@ -1,4 +1,3 @@ -import { prepareGatewayUrls } from "../../common/urls"; import { replaceSchemeWithGatewayUrl } from "../../common/utils"; import { GatewayUrls, IStorageDownloader } from "../../types"; import fetch from "cross-fetch"; @@ -10,7 +9,7 @@ import fetch from "cross-fetch"; * ```jsx * // Can instantiate the downloader with the default gateway URLs * const downloader = new StorageDownloader(); - * const storage = new ThirdwebStorage(undefined, downloader); + * const storage = new ThirdwebStorage({ downloader }); * ``` * * @public diff --git a/packages/storage/src/core/storage.ts b/packages/storage/src/core/storage.ts index a65b883ccd5..0b7ec7d06bd 100644 --- a/packages/storage/src/core/storage.ts +++ b/packages/storage/src/core/storage.ts @@ -14,6 +14,7 @@ import { IStorageDownloader, IStorageUploader, Json, + ThirdwebStorageOptions, UploadOptions, } from "../types"; import { StorageDownloader } from "./downloaders/storage-downloader"; @@ -42,7 +43,7 @@ import { IpfsUploader } from "./uploaders/ipfs-uploader"; * }; * const downloader = new StorageDownloader(); * const uploader = new IpfsUploader(); - * const storage = new ThirdwebStorage(uploader, downloader, gatewayUrls) + * const storage = new ThirdwebStorage({ uploader, downloader, gatewayUrls }) * ``` * * @public @@ -52,14 +53,10 @@ export class ThirdwebStorage { private downloader: IStorageDownloader; public gatewayUrls: GatewayUrls; - constructor( - uploader: IStorageUploader = new IpfsUploader(), - downloader: IStorageDownloader = new StorageDownloader(), - gatewayUrls?: GatewayUrls, - ) { - this.uploader = uploader; - this.downloader = downloader; - this.gatewayUrls = prepareGatewayUrls(gatewayUrls); + constructor(options?: ThirdwebStorageOptions) { + this.uploader = options?.uploader || new IpfsUploader(); + this.downloader = options?.downloader || new StorageDownloader(); + this.gatewayUrls = prepareGatewayUrls(options?.gatewayUrls); } /** diff --git a/packages/storage/src/core/uploaders/ipfs-uploader.ts b/packages/storage/src/core/uploaders/ipfs-uploader.ts index 7a8607575b6..96190252a45 100644 --- a/packages/storage/src/core/uploaders/ipfs-uploader.ts +++ b/packages/storage/src/core/uploaders/ipfs-uploader.ts @@ -25,14 +25,15 @@ import FormData from "form-data"; * ```jsx * // Can instantiate the uploader with default configuration * const uploader = new StorageUploader(); - * const storage = new ThirdwebStorage(uploader); + * const storage = new ThirdwebStorage({ uploader }); * * // Or optionally, can pass configuration * const options = { * // Upload objects with resolvable URLs * uploadWithGatewayUrl: true, * } - * const storage = new ThirdwebStorage(options); + * const uploader = new StorageUploader(options); + * const storage = new ThirdwebStorage({ uploader }); * ``` * * @public diff --git a/packages/storage/src/types/index.ts b/packages/storage/src/types/index.ts index 41a7cb79d12..57ea20adcde 100644 --- a/packages/storage/src/types/index.ts +++ b/packages/storage/src/types/index.ts @@ -1,3 +1,12 @@ +import { GatewayUrls, IStorageDownloader } from "./download"; +import { IStorageUploader, UploadOptions } from "./upload"; + +export type ThirdwebStorageOptions = { + uploader?: IStorageUploader; + downloader?: IStorageDownloader; + gatewayUrls?: GatewayUrls; +}; + export * from "./upload"; export * from "./download"; export * from "./data"; diff --git a/packages/storage/test/ipfs.test.ts b/packages/storage/test/ipfs.test.ts index d7df49f1d45..f1d6fb1416d 100644 --- a/packages/storage/test/ipfs.test.ts +++ b/packages/storage/test/ipfs.test.ts @@ -200,9 +200,9 @@ describe("IPFS", async () => { }); it("Should upload without directory if specified on class", async () => { - const solanaStorage = new ThirdwebStorage( - new IpfsUploader({ uploadWithGatewayUrl: true }), - ); + const solanaStorage = new ThirdwebStorage({ + uploader: new IpfsUploader({ uploadWithGatewayUrl: true }), + }); const uri = await solanaStorage.upload( {