@lens-chain/storage-client
Version:
The easiest way to store data on Lens Grove.
1 lines • 54.4 kB
Source Map (JSON)
{"version":3,"sources":["../src/builders.ts","../src/environments.ts","../src/errors.ts","../src/AuthorizationService.ts","../src/types.ts","../src/utils.ts","../src/StorageClient.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type {\n EvmAddress,\n GenericAcl,\n ImmutableAcl,\n LensAccountAcl,\n WalletAddressAcl,\n} from './types';\n\n/**\n * This ACL template restricts access to any given Wallet Address.\n *\n * @param address - The Wallet Address that can edit/delete the resource.\n * @param chainId - The Chain ID that the resource is bound to. See supported chains.\n */\nexport function walletOnly(\n address: EvmAddress,\n chainId: number,\n): WalletAddressAcl {\n return { template: 'wallet_address', walletAddress: address, chainId };\n}\n\n/**\n * This ACL template restricts access to any given Lens Account.\n *\n * @param account - The Lens Account that can edit/delete the resource.\n * @param chainId - The Lens Chain ID that the resource is bound to.\n */\nexport function lensAccountOnly(\n account: EvmAddress,\n chainId: number,\n): LensAccountAcl {\n return { template: 'lens_account', chainId, lensAccount: account };\n}\n\n/**\n * This ACL declare the resource as immutable.\n *\n * It requires to specify the chain ID that the resource is bound to.\n */\nexport function immutable(chainId: number): ImmutableAcl {\n return { template: 'immutable', chainId };\n}\n\n/**\n * This ACL template restricts access to any given address that satisfies the contract call evaluation.\n *\n * @param chainId - The Chain ID that the resource is bound to. See supported chains.\n * @returns A builder to create a Generic ACL template.\n */\nexport function genericAcl(chainId: number): GenericAclTemplateBuilder {\n return new GenericAclTemplateBuilder(chainId);\n}\n\nclass GenericAclTemplateBuilder {\n private acl: Partial<GenericAcl> = { template: 'generic_acl' };\n\n constructor(chainId: number) {\n this.acl.chainId = chainId;\n }\n\n reset(): void {\n this.acl = { template: 'generic_acl' };\n }\n\n withContractAddress(contractAddress: string): this {\n this.acl.contractAddress = contractAddress;\n return this;\n }\n\n withFunctionSig(functionSig: string): this {\n this.acl.functionSig = functionSig;\n return this;\n }\n\n withParams(params: string[]): this {\n this.acl.params = params;\n return this;\n }\n\n build(): GenericAcl {\n if (!this.isValid(this.acl)) {\n throw new Error('GenericAclTemplate is missing required fields');\n }\n return this.acl as GenericAcl;\n }\n\n private isValid(acl: Partial<GenericAcl>): acl is GenericAcl {\n return !!(\n acl.template === 'generic_acl' &&\n acl.contractAddress &&\n acl.functionSig &&\n acl.params &&\n acl.chainId\n );\n }\n}\n","/**\n * The environment configuration type.\n */\nexport type EnvironmentConfig = {\n name: string;\n backend: string;\n defaultChainId: number;\n cachingTimeout: number;\n propagationTimeout: number;\n statusPollingInterval: number;\n};\n\n/**\n * The production environment configuration.\n */\nexport const production: EnvironmentConfig = {\n name: 'production',\n backend: 'https://api.grove.storage',\n defaultChainId: 232,\n cachingTimeout: 5000,\n propagationTimeout: 10000,\n statusPollingInterval: 500,\n};\n\n/**\n * @internal\n */\nexport const staging: EnvironmentConfig = {\n name: 'staging',\n backend: 'https://api.staging.grove.storage',\n defaultChainId: 37111,\n cachingTimeout: 10000,\n propagationTimeout: 20000,\n statusPollingInterval: 500,\n};\n\n/**\n * @internal\n */\nexport const local: EnvironmentConfig = {\n name: 'local',\n backend: 'http://localhost:30371110',\n defaultChainId: 37111,\n cachingTimeout: 0, // no caching\n propagationTimeout: 30000,\n statusPollingInterval: 500,\n};\n","class BaseError extends Error {\n static async fromResponse(response: Response) {\n try {\n const { message } = await response.clone().json();\n\n // biome-ignore lint/complexity/noThisInStatic: need this to create the correct error type\n return new this(message);\n } catch (_) {\n // biome-ignore lint/complexity/noThisInStatic: need this to create the correct error type\n return new this(await response.text());\n }\n }\n\n static from(args: unknown) {\n if (args instanceof Error) {\n const message = BaseError.formatMessage(args);\n // biome-ignore lint/complexity/noThisInStatic: need this to create the correct error type\n return new this(message, { cause: args });\n }\n // biome-ignore lint/complexity/noThisInStatic: need this to create the correct error type\n return new this(String(args));\n }\n\n private static formatMessage(cause: Error): string {\n const messages: string[] = [];\n let currentError: unknown = cause;\n\n while (currentError instanceof Error) {\n messages.push(currentError.message);\n currentError = currentError.cause;\n }\n\n return messages.join(' due to ');\n }\n}\n\nexport class AuthorizationError extends BaseError {\n name = 'AuthorizationError' as const;\n\n private constructor(message: string) {\n super(message);\n }\n}\n\nexport class StorageClientError extends BaseError {\n name = 'StorageClientError' as const;\n\n private constructor(message: string) {\n super(message);\n }\n}\n\n/**\n * An error that occurs when a task violates a logical condition that is assumed to be true at all times.\n */\nexport class InvariantError extends Error {\n name = 'InvariantError' as const;\n}\n","import type { EnvironmentConfig } from './environments';\nimport { AuthorizationError } from './errors';\nimport type { Signer } from './types';\n\nexport type Authorization = {\n challengeId: string;\n secret: string;\n};\n\ntype Challenge = {\n message: string;\n secret_random: string;\n};\n\ntype SignedChallenge = Challenge & {\n signature: string;\n};\n\ntype SignedChallengeResponse = {\n challenge_cid: string;\n};\n\nexport class AuthorizationService {\n constructor(private readonly env: EnvironmentConfig) {}\n\n async authorize(\n action: 'delete' | 'edit',\n storageKey: string,\n signer: Signer,\n ): Promise<Authorization> {\n const challenge = await this.requestChallenge(action, storageKey);\n\n const signature = await signer.signMessage({\n message: challenge.message,\n });\n\n const { challenge_cid } = await this.submitSignedChallenge({\n ...challenge,\n signature,\n });\n\n return {\n challengeId: challenge_cid,\n secret: challenge.secret_random,\n };\n }\n\n private async requestChallenge(\n action: 'delete' | 'edit',\n storageKey: string,\n ): Promise<Challenge> {\n const response = await fetch(`${this.env.backend}/challenge/new`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n storage_key: storageKey,\n action: action,\n }),\n });\n\n if (!response.ok) {\n throw await AuthorizationError.fromResponse(response);\n }\n\n return response.json();\n }\n\n private async submitSignedChallenge(\n challenge: SignedChallenge,\n ): Promise<SignedChallengeResponse> {\n const response = await fetch(`${this.env.backend}/challenge/sign`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(challenge),\n });\n\n if (!response.ok) {\n throw await AuthorizationError.fromResponse(response);\n }\n\n return response.json();\n }\n}\n","import type { StorageClient } from './StorageClient';\n\nexport type EvmAddress = `0x${string}`;\n\nexport type GenericAcl = {\n template: 'generic_acl';\n chainId: number;\n contractAddress: string;\n functionSig: string;\n // biome-ignore lint/suspicious/noExplicitAny: keep it simple\n params: any[];\n};\n\nexport type ImmutableAcl = {\n template: 'immutable';\n chainId: number;\n};\n\nexport type LensAccountAcl = {\n template: 'lens_account';\n lensAccount: EvmAddress;\n chainId: number;\n};\n\nexport type WalletAddressAcl = {\n template: 'wallet_address';\n walletAddress: EvmAddress;\n chainId: number;\n};\n\nexport type AclConfig =\n | GenericAcl\n | ImmutableAcl\n | LensAccountAcl\n | WalletAddressAcl;\n\n/**\n * The marker used to identify the address of the signer attempting\n * to update or delete a resource.\n */\nexport const RECOVERED_ADDRESS_PARAM_MARKER = '<recovered_address>';\n\nexport interface Signer {\n signMessage({ message }: { message: string }): Promise<string>;\n}\n\nexport type AccessOptions = {\n /**\n * The ACL configuration to use for the resource.\n */\n acl: AclConfig;\n};\n\nexport type UploadFileOptions = AccessOptions;\n\nexport type UploadJsonOptions = UploadFileOptions & {\n /**\n * The name of the file.\n *\n * @defaultValue `data.json`\n */\n name?: string;\n};\n\n/**\n * A factory function that, given the list of {@link Resource},\n * creates a JSON serializable object that will be used as the\n * directory index file.\n */\nexport type CreateIndexContent = (files: Resource[]) => unknown;\n\nexport type UploadFolderOptions = AccessOptions & {\n /**\n * Whether accession the resource URI should serve an folder indexing response.\n * - If a {@link CreateIndexContent} function is provided, it will be called with the list of files in the folder. The returned file will be used as the directory index file.\n * - If a `File` is provided, the file content will be used as the directory index file.\n * - If `true`, it will server the default directory indexing response.\n * - If `false`, it will server the folder's manifest file.\n */\n index?: CreateIndexContent | File | boolean;\n};\n\nexport type EditFileOptions = AccessOptions;\n\nexport type Resource = {\n /**\n * The `lens://…` URI of the resource.\n */\n uri: string;\n\n /**\n * The storage key of the resource.\n */\n storageKey: string;\n\n /**\n * The gateway URL of this resource.\n */\n gatewayUrl: string;\n};\n\nexport type UploadFolderResponse = {\n files: Resource[];\n folder: Resource;\n};\n\nabstract class UploadResponse {\n constructor(\n private readonly resource: Resource,\n private readonly client: StorageClient,\n ) {}\n /**\n * Wait until the resource is fully propagated to the underlying storage infrastructure.\n *\n * Edit and delete operations are only allowed after the resource if fully propagated.\n *\n * @throws a {@link StorageClientError} if the operation fails or times out.\n */\n async waitForPropagation(): Promise<void> {\n return this.client.waitUntilStatus(\n this.resource.storageKey,\n ['done'],\n this.client.env.propagationTimeout,\n );\n }\n}\n\nexport class FileUploadResponse extends UploadResponse {\n /**\n * The `lens://…` URI of the file.\n */\n public uri: string;\n\n /**\n * The storage key of the file.\n */\n public storageKey: string;\n\n /**\n * The gateway URL of this file.\n */\n public gatewayUrl: string;\n\n constructor(resource: Resource, client: StorageClient) {\n super(resource, client);\n this.uri = resource.uri;\n this.storageKey = resource.storageKey;\n this.gatewayUrl = resource.gatewayUrl;\n }\n}\n\nexport type DeleteResponse = {\n /**\n * Whether the deletion was successful.\n */\n success: boolean;\n};\n\n/**\n * @internal\n */\nexport type Status =\n | 'available'\n | 'dirty'\n | 'done'\n | 'error_delete'\n | 'error_edit'\n | 'error_upload'\n | 'idle'\n | 'new'\n | 'pending'\n | 'unauthorized';\n\n/**\n * @internal\n */\nexport type StatusResponse = {\n /**\n * The storage key of the resource.\n */\n storageKey: string;\n /**\n * The current status.\n */\n status: Status;\n /**\n * A percentage value between 0-100 indicating the progress of the resource's persistence.\n *\n * This is not linear and may experience jumps.\n */\n progress: number;\n};\n","import type { EnvironmentConfig } from './environments';\nimport { InvariantError } from './errors';\nimport type {\n AclConfig,\n CreateIndexContent,\n Resource,\n Status,\n StatusResponse,\n} from './types';\n\n/**\n * Asserts that the given condition is truthy\n * @internal\n *\n * @param condition - Either truthy or falsy value\n * @param message - An error message\n */\nexport function invariant(\n condition: unknown,\n message: string,\n): asserts condition {\n if (!condition) {\n throw new InvariantError(message);\n }\n}\n\n/**\n * @internal\n */\nexport function never(message = 'Unexpected call to never()'): never {\n throw new InvariantError(message);\n}\n\n/**\n * @internal\n */\nexport function delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * @internal\n */\nexport type MultipartEntry = {\n name: string;\n file: File;\n};\n\n/**\n * @internal\n */\nexport type MultipartFormDataStream = {\n boundary: string;\n stream: ReadableStream<Uint8Array>;\n};\n\nasync function* multipartStream(\n entries: readonly MultipartEntry[],\n boundary: string,\n) {\n for (const { name, file } of entries) {\n yield `--${boundary}\\r\\n`;\n\n yield `Content-Disposition: form-data; name=\"${name}\"; filename=\"${file.name}\"\\r\\n`;\n yield `Content-Type: ${file.type}\\r\\n\\r\\n`;\n\n const reader = file.stream().getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n }\n\n yield '\\r\\n';\n }\n\n yield `--${boundary}--\\r\\n`;\n}\n\nfunction createMultipartStream(\n entries: readonly MultipartEntry[],\n): MultipartFormDataStream {\n const boundary = `----WebKitFormBoundary${Math.random().toString(36).substring(2)}`;\n\n return {\n stream: new ReadableStream({\n async start(controller) {\n for await (const chunk of multipartStream(entries, boundary)) {\n if (typeof chunk === 'string') {\n controller.enqueue(new TextEncoder().encode(chunk));\n } else {\n controller.enqueue(chunk); // Enqueue Uint8Array chunks directly\n }\n }\n controller.close();\n },\n }),\n boundary,\n };\n}\n\nasync function detectStreamSupport(): Promise<boolean> {\n let duplexAccessed = false;\n\n const testStream = new ReadableStream({\n start(controller) {\n controller.enqueue(new Uint8Array([0])); // Minimal stream chunk\n controller.close();\n },\n });\n\n const request = new Request('data:text/plain;charset=utf-8,42', {\n body: testStream,\n method: 'POST',\n // @ts-ignore\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n });\n\n try {\n const hasContentType = request.headers.has('Content-Type');\n\n // If fails to handle fetch(Request), it's likely not a native implementation of\n // Fetch API, so it's not supported.\n await fetch(request.clone());\n const body = await request.text();\n\n return duplexAccessed && !hasContentType && body === '\\x00'; // 0 byte as character\n } catch (_) {\n return false;\n }\n}\n\nfunction createFormData(entries: readonly MultipartEntry[]): FormData {\n const formData = new FormData();\n\n for (const { name, file } of entries) {\n formData.append(name, file, file.name);\n }\n\n return formData;\n}\n\nfunction computeMultipartSize(\n entries: readonly MultipartEntry[],\n boundary: string,\n): number {\n let size = 0;\n const encoder = new TextEncoder();\n\n for (const { name, file } of entries) {\n // Each part starts with the boundary\n size += encoder.encode(`--${boundary}\\r\\n`).length;\n\n // Content-Disposition header\n size += encoder.encode(\n `Content-Disposition: form-data; name=\"${name}\"; filename=\"${file.name}\"\\r\\n`,\n ).length;\n\n // Content-Type header\n size += encoder.encode(`Content-Type: ${file.type}\\r\\n\\r\\n`).length;\n\n // File content size\n size += file.size;\n\n // CRLF after file content\n size += encoder.encode('\\r\\n').length;\n }\n\n // Final boundary\n size += encoder.encode(`--${boundary}--\\r\\n`).length;\n\n return size;\n}\n\n/**\n * Creates a multipart/form-data {@link RequestInit} object from a list of entries.\n *\n * @internal\n */\nexport async function createMultipartRequestInit(\n method: 'POST' | 'PUT',\n entries: readonly MultipartEntry[],\n): Promise<RequestInit> {\n if (await detectStreamSupport()) {\n const { stream, boundary } = createMultipartStream(entries);\n\n return {\n method,\n headers: {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`,\n 'Content-Length': computeMultipartSize(entries, boundary).toString(),\n },\n body: stream,\n // @ts-ignore\n duplex: 'half', // Required for streaming request body in some browsers\n };\n }\n\n // Fallback to FormData for browsers without ReadableStream support as Fetch body\n const formData = createFormData(entries);\n\n return {\n method,\n body: formData,\n };\n}\n\n/**\n * The Lens URI scheme.\n */\nexport const LENS_SCHEME = 'lens';\n\nconst LENS_URI_SUFFIX = `${LENS_SCHEME}://`;\n\n/**\n * @internal\n */\nexport function extractStorageKey(storageKeyOrUri: string): string {\n if (storageKeyOrUri.startsWith(LENS_URI_SUFFIX)) {\n return storageKeyOrUri.slice(LENS_URI_SUFFIX.length);\n }\n return storageKeyOrUri;\n}\n\n/**\n * @internal\n */\nexport function resourceFrom(\n storageKey: string,\n env: EnvironmentConfig,\n): Resource {\n return {\n storageKey,\n gatewayUrl: `${env.backend}/${storageKey}`,\n uri: `${LENS_SCHEME}://${storageKey}`,\n };\n}\n\n/**\n * @internal\n */\nexport function statusResponseFrom(\n data: Record<string, unknown>,\n): StatusResponse {\n return {\n status: data.status as Status,\n storageKey: data.storage_key as string,\n progress: data.progress as number,\n };\n}\n\nfunction createAclTemplateContent(acl: AclConfig): Record<string, unknown> {\n switch (acl.template) {\n case 'generic_acl':\n return {\n template: acl.template,\n contract_address: acl.contractAddress,\n chain_id: acl.chainId,\n network_type: 'evm',\n function_sig: acl.functionSig,\n params: acl.params,\n };\n case 'lens_account':\n return {\n template: acl.template,\n lens_account: acl.lensAccount,\n chain_id: acl.chainId,\n };\n case 'wallet_address':\n return {\n template: acl.template,\n wallet_address: acl.walletAddress,\n chain_id: acl.chainId,\n };\n case 'immutable':\n return {\n template: acl.template,\n chain_id: acl.chainId,\n };\n\n default:\n never(`Unknown ACL template: ${acl}`);\n }\n}\n\nfunction createAclEntry(template: AclConfig): MultipartEntry {\n const name = 'lens-acl.json';\n const content = createAclTemplateContent(template);\n\n return {\n name,\n file: new File([JSON.stringify(content)], name, {\n type: 'application/json',\n }),\n };\n}\n\nfunction createDefaultIndexContent(\n files: readonly Resource[],\n): Record<string, unknown> {\n return {\n files: files.map((file) => file.storageKey),\n };\n}\n\nfunction createIndexFile(content: unknown): File {\n return new File([JSON.stringify(content)], 'index.json', {\n type: 'application/json',\n });\n}\n\n/**\n * @internal\n */\nexport class MultipartEntriesBuilder {\n private idx = 0;\n private entries: MultipartEntry[] = [];\n\n private constructor(private readonly allocations: readonly Resource[]) {}\n\n static from(allocations: readonly Resource[]): MultipartEntriesBuilder {\n return new MultipartEntriesBuilder(allocations);\n }\n\n withFile(file: File): MultipartEntriesBuilder {\n this.entries.push({\n name:\n this.allocations[this.idx++]?.storageKey ??\n never('Unexpected file, no storage key available'),\n file,\n });\n return this;\n }\n\n withFiles(files: readonly File[]): MultipartEntriesBuilder {\n for (const file of files) {\n this.withFile(file);\n }\n return this;\n }\n\n withAclTemplate(template: AclConfig): MultipartEntriesBuilder {\n this.entries.push(createAclEntry(template));\n return this;\n }\n\n withIndexFile(\n index: CreateIndexContent | File | true,\n ): MultipartEntriesBuilder {\n const file =\n index instanceof File\n ? index\n : createIndexFile(\n index === true\n ? createDefaultIndexContent(this.allocations)\n : index.call(null, this.allocations.slice()), // shallow copy\n );\n\n invariant(\n file.name === 'index.json',\n \"Index file must be named 'index.json'\",\n );\n\n return this.withFile(file);\n }\n\n build(): ReadonlyArray<MultipartEntry> {\n return this.entries;\n }\n}\n","import {\n type Authorization,\n AuthorizationService,\n} from './AuthorizationService';\nimport { immutable } from './builders';\nimport { type EnvironmentConfig, production } from './environments';\nimport { AuthorizationError, StorageClientError } from './errors';\nimport {\n type AclConfig,\n type DeleteResponse,\n type EditFileOptions,\n FileUploadResponse,\n type ImmutableAcl,\n type Resource,\n type Signer,\n type Status,\n type StatusResponse,\n type UploadFileOptions,\n type UploadFolderOptions,\n type UploadFolderResponse,\n type UploadJsonOptions,\n} from './types';\nimport {\n createMultipartRequestInit,\n delay,\n extractStorageKey,\n invariant,\n MultipartEntriesBuilder,\n type MultipartEntry,\n never,\n resourceFrom,\n statusResponseFrom,\n} from './utils';\n\nexport class StorageClient {\n private readonly authorization: AuthorizationService;\n\n private constructor(public readonly env: EnvironmentConfig) {\n this.authorization = new AuthorizationService(env);\n }\n\n /**\n * Creates a new instance of the `Storage` client.\n *\n * @param env - the environment configuration\n * @returns The `Storage` client instance\n */\n static create(env: EnvironmentConfig = production): StorageClient {\n return new StorageClient(env);\n }\n\n /**\n * Uploads a file to the storage.\n *\n * @throws a {@link StorageClientError} if uploading the file fails\n * @param file - The file to upload\n * @param options - Any additional options for the upload\n * @returns The {@link FileUploadResponse} to the uploaded file\n */\n async uploadFile(\n file: File,\n options: UploadFileOptions,\n ): Promise<FileUploadResponse>;\n /**\n *\n * @deprecated use `uploadFile(file: File, options: UploadFileOptions): Promise<FileUploadResponse>` instead\n */\n async uploadFile(\n file: File,\n options?: UploadFileOptions,\n ): Promise<FileUploadResponse>;\n async uploadFile(\n file: File,\n { acl }: UploadFileOptions = { acl: immutable(this.env.defaultChainId) },\n ): Promise<FileUploadResponse> {\n const resource =\n acl.template === 'immutable'\n ? await this.uploadImmutableFile(file, acl)\n : await this.uploadMutableFile(file, acl);\n\n await this.waitUntilStatus(\n resource.storageKey,\n ['done', 'available'],\n this.env.cachingTimeout,\n );\n\n return new FileUploadResponse(resource, this);\n }\n\n /**\n * Uploads a JSON object to the storage.\n *\n * This is a convenience method that serializes the JSON object to a string before uploading it. The code is equivalent to:\n * ```ts\n * const file = new File([JSON.stringify(json)], 'data.json', { type: 'application/json' });\n *\n * const { uri } = await client.uploadFile(file);\n * ```\n *\n * @throws a {@link StorageClientError} if uploading the JSON fails\n * @param json - The JSON object to upload\n * @param options - Upload options including the ACL configuration\n * @returns The {@link FileUploadResponse} to the uploaded JSON\n */\n async uploadAsJson(\n json: unknown,\n options: UploadJsonOptions,\n ): Promise<FileUploadResponse>;\n /**\n * @deprecated use `uploadAsJson(json: unknown, options: UploadJsonOptions): Promise<FileUploadResponse>` instead\n */\n async uploadAsJson(\n json: unknown,\n options?: UploadJsonOptions,\n ): Promise<FileUploadResponse>;\n async uploadAsJson(\n json: unknown,\n options: UploadJsonOptions = { acl: immutable(this.env.defaultChainId) },\n ): Promise<FileUploadResponse> {\n const file = new File([JSON.stringify(json)], options.name ?? 'data.json', {\n type: 'application/json',\n });\n return this.uploadFile(file, options);\n }\n\n /**\n * Uploads a folder to the storage.\n *\n * @throws a {@link StorageClientError} if uploading the folder fails\n * @param files - The files to upload\n * @param options - Upload options including the ACL configuration\n * @returns The {@link UploadFolderResponse} to the uploaded folder\n */\n async uploadFolder(\n files: FileList | File[],\n options: UploadFolderOptions,\n ): Promise<UploadFolderResponse>;\n /**\n * @deprecated use `uploadFolder(files: FileList | File[], options: UploadFolderOptions): Promise<UploadFolderResponse>` instead\n */\n async uploadFolder(\n files: FileList | File[],\n options?: UploadFolderOptions,\n ): Promise<UploadFolderResponse>;\n async uploadFolder(\n files: FileList | File[],\n options: UploadFolderOptions = { acl: immutable(this.env.defaultChainId) },\n ): Promise<UploadFolderResponse> {\n const withIndexFile = 'index' in options && !!options.index;\n const [folderResource, ...fileResources] = await this.allocateStorage(\n files.length + (withIndexFile ? 2 : 1),\n );\n\n const builder = MultipartEntriesBuilder.from(fileResources).withFiles(\n Array.from(files),\n );\n\n if (options.index) {\n builder.withIndexFile(options.index);\n }\n\n builder.withAclTemplate(options.acl);\n\n const entries = builder.build();\n const response = await this.upload(folderResource.storageKey, entries);\n\n if (!response.ok) {\n throw await StorageClientError.fromResponse(response);\n }\n\n await this.waitUntilStatus(\n // biome-ignore lint/style/noNonNullAssertion: we know the folder has at least one file\n withIndexFile ? folderResource.storageKey : fileResources[0]!.storageKey,\n ['done', 'available'],\n this.env.cachingTimeout,\n );\n\n return {\n folder: folderResource,\n files: fileResources,\n };\n }\n\n /**\n * Given an URI or storage key, resolves it to a URL.\n *\n * @param storageKeyOrUri - The `lens://…` URI or storage key\n * @returns The URL to the resource\n */\n resolve(storageKeyOrUri: string): string {\n const storageKey = extractStorageKey(storageKeyOrUri);\n\n return `${this.env.backend}/${storageKey}`;\n }\n\n /**\n * Deletes a resource from the storage.\n *\n * @throws a {@link AuthorizationError} if not authorized to delete the resource\n * @param storageKeyOrUri - The `lens://…` URI or storage key\n * @param signer - The signer to use for the deletion\n * @returns The deletion result.\n */\n async delete(\n storageKeyOrUri: string,\n signer: Signer,\n ): Promise<DeleteResponse> {\n const storageKey = extractStorageKey(storageKeyOrUri);\n const authorization = await this.authorization.authorize(\n 'delete',\n storageKey,\n signer,\n );\n\n const response = await fetch(\n `${this.env.backend}/${storageKey}?challenge_cid=${authorization.challengeId}&secret_random=${authorization.secret}`,\n {\n method: 'DELETE',\n },\n );\n return {\n success: response.ok,\n };\n }\n\n /**\n * Updates a JSON object in the storage.\n *\n * @throws a {@link StorageClientError} if editing the file fails\n * @throws a {@link AuthorizationError} if not authorized to edit the file\n * @param storageKeyOrUri - The `lens://…` URI or storage key\n * @param json - The JSON object to upload\n * @param signer - The signer to use for the edit\n * @param options - Upload options including the ACL configuration\n * @returns The {@link FileUploadResponse} to the uploaded JSON\n */\n async updateJson(\n storageKeyOrUri: string,\n json: unknown,\n signer: Signer,\n options: UploadJsonOptions,\n ): Promise<FileUploadResponse> {\n const file = new File([JSON.stringify(json)], options.name ?? 'data.json', {\n type: 'application/json',\n });\n return this.editFile(storageKeyOrUri, file, signer, options);\n }\n\n /**\n * Edits a file in the storage.\n *\n * @throws a {@link StorageClientError} if editing the file fails\n * @throws a {@link AuthorizationError} if not authorized to edit the file\n * @param storageKeyOrUri - The `lens://…` URI or storage key\n * @param newFile - The file to replace the existing file with\n * @param signer - The signer to use for the edit\n * @param options - Upload options including the ACL configuration\n */\n async editFile(\n storageKeyOrUri: string,\n newFile: File,\n signer: Signer,\n options: EditFileOptions,\n ): Promise<FileUploadResponse>;\n /**\n * @deprecated use `editFile(storageKeyOrUri: string, newFile: File, signer: Signer, options: EditFileOptions): Promise<FileUploadResponse>` instead.\n */\n async editFile(\n storageKeyOrUri: string,\n newFile: File,\n signer: Signer,\n options?: EditFileOptions,\n ): Promise<FileUploadResponse>;\n async editFile(\n storageKeyOrUri: string,\n newFile: File,\n signer: Signer,\n options: EditFileOptions = { acl: immutable(this.env.defaultChainId) },\n ): Promise<FileUploadResponse> {\n const storageKey = extractStorageKey(storageKeyOrUri);\n const authorization = await this.authorization.authorize(\n 'edit',\n storageKey,\n signer,\n );\n\n const resource = resourceFrom(storageKey, this.env);\n const builder = MultipartEntriesBuilder.from([resource])\n .withFile(newFile)\n .withAclTemplate(options.acl);\n\n const entries = builder.build();\n const response = await this.update(storageKey, authorization, entries);\n\n if (!response.ok) {\n throw await StorageClientError.fromResponse(response);\n }\n\n return new FileUploadResponse(resource, this);\n }\n\n /**\n * @internal\n */\n async status(storageKeyOrUri: string): Promise<StatusResponse> {\n const storageKey = extractStorageKey(storageKeyOrUri);\n const response = await fetch(`${this.env.backend}/status/${storageKey}`);\n\n if (!response.ok) {\n throw await StorageClientError