=============== LIBRARY RULES =============== From library maintainers: - Use @uploadcare/upload-client for Upload API operations and @uploadcare/rest-client for authenticated file, group, webhook, conversion, and add-on operations. - Use UploadClient with a public key for uploads; never expose a REST API secret key in browser code. - Prefer UploadcareAuthSchema signature-based REST authentication over UploadcareSimpleAuthSchema for production. - Use @uploadcare/signed-uploads on the server to generate secureSignature and secureExpire for signed upload flows. - Import only from documented package entrypoints, not from internal src paths. - Prefer package-specific exports for shared helpers; use @uploadcare/api-client-utils directly only when the utility package is an explicit dependency. - Use @uploadcare/image-shrink only in browser-like environments with Blob, Image, and canvas APIs. - Use @uploadcare/cname-prefix when deriving CNAME-prefixed CDN bases from a public key and CDN base. ### Install the SDK Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Install the package using npm. ```bash npm install @uploadcare/upload-client ``` -------------------------------- ### Install the package Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/cname-prefix/README.md Install the library using npm. ```bash npm install @uploadcare/cname-prefix ``` -------------------------------- ### Install @uploadcare/signed-uploads Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/signed-uploads/README.md Install the library using npm. ```bash npm install @uploadcare/signed-uploads ``` -------------------------------- ### Start mock server Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Manually starts the mock server for testing purposes. ```bash npm run mock:start ``` -------------------------------- ### Install @uploadcare/image-shrink Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/image-shrink/README.md Install the image shrink library using npm. ```bash npm install @uploadcare/image-shrink ``` -------------------------------- ### Install Uploadcare REST Client Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Install the @uploadcare/rest-client package using npm. ```bash npm install @uploadcare/rest-client ``` -------------------------------- ### multipartStart(size, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Starts a multipart upload process. ```APIDOC ## multipartStart(size, options) ### Description Initializes a multipart upload. ### Parameters - **size** (number) - Required - The total size of the file. - **options** (MultipartStartOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with upload details. ``` -------------------------------- ### Backend Signature Creation Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Example of a backend endpoint using `createSignature` to sign a request string. This should be implemented on your server. ```javascript import { createSignature } from '@uploadcare/rest-client'; app.get('/sign-request', async (req, res) => { const signature = await createSignature('YOUR_SECREY_KEY', req.query.signString); res.send(signature); }) ``` -------------------------------- ### Simple Authentication Example Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Demonstrates how to authenticate requests using the Uploadcare.Simple method. This method is not recommended for production, especially on the client-side, as it exposes the secret key. ```typescript import { listOfFiles, UploadcareSimpleAuthSchema } from '@uploadcare/rest-client'; const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY', }); const result = await listOfFiles({}, { authSchema: uploadcareSimpleAuthSchema }) ``` -------------------------------- ### Paginate List of Files with Async Generator Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Use the `paginate` helper with an async generator to iterate over paginated results from `listOfFiles`. Requires authentication setup. ```typescript import { listOfFiles, paginate } from '@uploadcare/rest-client' const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY', }); const paginatedListOfFiles = paginate(listOfFiles) const pages = paginatedListOfFiles({}, { authSchema: uploadcareSimpleAuthSchema }) for await (const page of pages) { console.log(page) } ``` -------------------------------- ### Paginate List of Files with Paginator Class Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Utilize the `Paginator` class to manually control pagination for `listOfFiles`, allowing forward and backward navigation through pages. Requires authentication setup. ```typescript import { listOfFiles, Paginator } from '@uploadcare/rest-client' const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY', }); const paginator = new Paginator(listOfFiles, {}, { authSchema: uploadcareSimpleAuthSchema }) while(paginator.hasNextPage()) { const page = await paginator.next() console.log(page) } while(paginator.hasPrevPage()) { const page = await paginator.prev() console.log(page) } console.log(paginator.getCurrentPage()) ``` -------------------------------- ### Run tests with Jest Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Executes tests using the Jest test runner, typically after starting the mock server. ```bash npm run test:jest ``` -------------------------------- ### Poll Conversion API Job Status Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Use `conversionJobPoller` to monitor the status of conversion jobs. It provides callbacks for job start and status updates, and supports abortion via `AbortController`. Requires authentication. ```typescript import { conversionJobPoller, ConversionType, UploadcareSimpleAuthSchema } from '@uploadcare/rest-client' const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY' }) const abortController = new AbortController() // abortController.abort() const jobs = await conversionJobPoller( { type: ConversionType.VIDEO, // type: ConversionType.DOCUMENT, onRun: response => console.log(response), // called when job is started onStatus: response => console.log(response), // called on every job status request paths: [':uuid/video/-/size/x720/', ':uuid/video/-/size/x360/'], store: false, pollOptions: { signal: abortController.signal } }, { authSchema: uploadcareSimpleAuthSchema } ) const results = Promise.allSettled(jobs) console.log(results) ``` -------------------------------- ### Initialize UploadClient Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Create an instance of UploadClient with your project's public key. ```javascript import { UploadClient } from '@uploadcare/upload-client' const client = new UploadClient({ publicKey: 'YOUR_PUBLIC_KEY' }) ``` -------------------------------- ### Run default tests Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Executes the test suite using the default mock server configuration. ```bash npm run test ``` -------------------------------- ### Run production tests Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Executes the test suite against the production environment. ```bash npm run test:production ``` -------------------------------- ### Generate prefixed CDN base URLs Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/cname-prefix/README.md Use the async or sync functions to generate a prefixed CDN base. The async variant requires a secure context, while the sync variant works in any environment. ```typescript import { getPrefixedCdnBaseAsync, getPrefixedCdnBaseSync } from '@uploadcare/cname-prefix' await getPrefixedCdnBaseAsync('demopublickey', 'https://ucarecd.net') // 'https://1s4oyld5dc.ucarecd.net' getPrefixedCdnBaseSync('demopublickey', 'https://ucarecd.net') // 'https://1s4oyld5dc.ucarecd.net' ``` -------------------------------- ### group(uuids, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Creates a group of files. ```APIDOC ## group(uuids, options) ### Description Creates a file group from a list of UUIDs. ### Parameters - **uuids** (Uuid[]) - Required - Array of file UUIDs. - **options** (GroupOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the group information. ``` -------------------------------- ### fromUrl(sourceUrl, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Uploads a file from a remote URL. ```APIDOC ## fromUrl(sourceUrl, options) ### Description Initiates an upload from a remote source URL. ### Parameters - **sourceUrl** (Url) - Required - The URL of the file to upload. - **options** (FromUrlOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the upload token. ``` -------------------------------- ### Import individual methods Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Import specific upload methods directly without using the UploadClient wrapper. ```javascript import { uploadFile, uploadFromUrl, uploadDirect, uploadFromUploaded, uploadMultipart, uploadFileGroup } from '@uploadcare/upload-client' ``` -------------------------------- ### Perform a base file upload Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Uses the base method to upload a file with progress tracking and cancellation support. ```javascript import { base } from '@uploadcare/upload-client' const onProgress = ({ isComputable, value }) => console.log(isComputable, value) const abortController = new AbortController() base(fileData, { onProgress, signal: abortController.signal }) // fileData must be `Blob` or `File` or `Buffer` .then((data) => console.log(data.file)) .catch((error) => { if (error.isCancel) { console.log(`File uploading was canceled.`) } }) // Also you can cancel upload: abortController.abort() ``` -------------------------------- ### base(file, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Uploads a file to Uploadcare. ```APIDOC ## base(file, options) ### Description Uploads a file (Blob, File, Buffer, or ReactNativeAsset) to Uploadcare. ### Parameters - **file** (Blob | File | Buffer | ReactNativeAsset) - Required - The file data to upload. - **options** (BaseOptions) - Required - Configuration options including onProgress and signal. ### Returns - **Promise** - A promise that resolves with the file information. ``` -------------------------------- ### info(uuid, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Retrieves information about a file by its UUID. ```APIDOC ## info(uuid, options) ### Description Fetches file details using the file UUID. ### Parameters - **uuid** (Uuid) - Required - The unique identifier of the file. - **options** (InfoOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the file metadata. ``` -------------------------------- ### Configure strings.xml for React Native Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Define the blob provider authority in your strings.xml file. ```xml MY_REACT_NATIVE_APP_NAME com.detox.blob ``` -------------------------------- ### Upload files using High-Level API Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Upload files from various sources including binary data, URLs, or existing UUIDs. ```javascript client.uploadFile(fileData).then((file) => console.log(file.uuid)) ``` ```javascript const fileURL = 'https://example.com/file.jpg' client.uploadFile(fileURL).then((file) => console.log(file.uuid)) ``` ```javascript const fileUUID = 'edfdf045-34c0-4087-bbdd-e3834921f890' client.uploadFile(fileUUID).then((file) => console.log(file.uuid)) ``` -------------------------------- ### groupInfo(id, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Retrieves information about a file group. ```APIDOC ## groupInfo(id, options) ### Description Fetches details about a specific file group. ### Parameters - **id** (GroupId) - Required - The group ID. - **options** (GroupInfoOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the group metadata. ``` -------------------------------- ### Shrink Image with @uploadcare/image-shrink Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/image-shrink/README.md Import and use the shrinkFile function to compress a blob to a specified size and quality. The function returns a Promise that resolves with the shrunk image as a Blob. ```typescript import { shrinkFile } from '@uploadcare/image-shrink' const shrinkedBlob = shrinkImage(blob, { size: number, quality?: number }) ``` -------------------------------- ### Define Custom User Agent Types Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Defines the structure for custom user agent options and the function signature for generating a custom user agent string. ```typescript type CustomUserAgentOptions = { publicKey: string libraryName: string libraryVersion: string languageName: string integration?: string } type CustomUserAgentFn = (options: CustomUserAgentOptions) => string ``` -------------------------------- ### fromUrlStatus(token, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Checks the status of a remote URL upload. ```APIDOC ## fromUrlStatus(token, options) ### Description Checks the status of an upload initiated via fromUrl. ### Parameters - **token** (Token) - Required - The token returned by fromUrl. - **options** (FromUrlStatusOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the current status. ``` -------------------------------- ### multipartComplete(uuid, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Completes a multipart upload. ```APIDOC ## multipartComplete(uuid, options) ### Description Finalizes the multipart upload process. ### Parameters - **uuid** (Uuid) - Required - The UUID of the upload. - **options** (MultipartCompleteOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the final file information. ``` -------------------------------- ### Low-level API method signatures Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Type definitions for the available low-level API methods. ```typescript base( file: Blob | File | Buffer | ReactNativeAsset, options: BaseOptions ): Promise ``` ```typescript info(uuid: Uuid, options: InfoOptions): Promise ``` ```typescript fromUrl(sourceUrl: Url, options: FromUrlOptions): Promise ``` ```typescript fromUrlStatus( token: Token, options: FromUrlStatusOptions ): Promise ``` ```typescript group(uuids: Uuid[], options: GroupOptions): Promise ``` ```typescript groupInfo(id: GroupId, options: GroupInfoOptions): Promise ``` ```typescript multipartStart( size: number, options: MultipartStartOptions ): Promise ``` ```typescript multipartUpload( part: Buffer | Blob | File, url: MultipartPart, options: MultipartUploadOptions ): Promise ``` ```typescript multipartComplete( uuid: Uuid, options: MultipartCompleteOptions ): Promise ``` -------------------------------- ### Track upload progress Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Monitor the upload progress using the onProgress callback. ```javascript const fileUUID = 'edfdf045-34c0-4087-bbdd-e3834921f890' const onProgress = ({ isComputable, value }) => { console.log(isComputable, value) } client .uploadFile(fileUUID, { onProgress }) .then((file) => console.log(file.uuid)) ``` -------------------------------- ### multipartUpload(part, url, options) Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Uploads a specific part of a file. ```APIDOC ## multipartUpload(part, url, options) ### Description Uploads a single chunk of a file. ### Parameters - **part** (Buffer | Blob | File) - Required - The file chunk data. - **url** (MultipartPart) - Required - The upload URL for the part. - **options** (MultipartUploadOptions) - Required - Configuration options. ### Returns - **Promise** - A promise that resolves with the upload result. ``` -------------------------------- ### Upload Blob in React Native Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Fetch a file as a blob and upload it using the upload client. ```ts const uri = 'URI_TO_FILE' const blob = await fetch(uri).then((res) => res.blob()) uploadFile(blob, { publicKey: 'YOUR_PUBLIC_KEY', fileName: 'file.txt', contentType: 'text/plain' }) ``` -------------------------------- ### Manage Concurrent Uploads with Queue Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Use the Queue helper to limit simultaneous upload requests and prevent network congestion. ```typescript import { Queue, uploadFile } from '@uploadcare/upload-client' // Create a queue with a limit of 10 concurrent requests. const queue = new Queue(10) // Create an array containing 50 files. const files = [ ...Array(50) .fill(0) .map((_, idx) => Buffer.from(`content-${idx}`)) ] const promises = files.map((file, idx) => { const fileName = `file-${idx}.txt` return queue .add(() => uploadFile(file, { publicKey: 'YOUR_PUBLIC_KEY', contentType: 'plain/text', fileName }) ) .then((fileInfo) => console.log( `"File "${fileName}" has been successfully uploaded! You can access it at the following URL: "${fileInfo.cdnUrl}"` ) ) }) await Promise.all(promises) console.log('Files have been successfully uploaded') ``` -------------------------------- ### Generate Signature by Lifetime Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/signed-uploads/README.md Generate a secure signature using a relative lifetime in milliseconds. The resulting `secureExpire` is in seconds. ```typescript import { generateSecureSignature } from '@uploadcare/signed-uploads' // by the lifetime in milliseconds const { secureSignature, secureExpire } = generateSecureSignature('YOUR_SECRET_KEY', { lifetime: 60 * 30 * 1000 // expire in 30 minutes }) ``` -------------------------------- ### Configure AndroidManifest for React Native Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Add the BlobProvider to your AndroidManifest.xml to support blob uploads in React Native. ```xml ``` -------------------------------- ### Upload ReactNativeAsset Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Upload a file using the ReactNativeAsset object structure. ```ts const asset = { uri: 'URI_TO_FILE', name: 'file.txt', type: 'text/plain' } uploadFile(asset, { publicKey: 'YOUR_PUBLIC_KEY' }) ``` -------------------------------- ### Custom Signature Resolver Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Implement a custom signature resolver for client-side authentication to avoid exposing the secret key. This requires a backend endpoint to generate the signature. ```typescript import { UploadcareAuthSchema } from '@uploadcare/rest-client'; new UploadcareAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', signatureResolver: async (signString) => { /** * You need to make HTTPS request to your backend endpoint, * which should sign the `signString` using secret key. */ const response = await fetch(`/sign-request?signString=${encodeURIComponent(signString)}`); const signature = await response.text(); return signature; } }) ``` -------------------------------- ### UploadClient interface definition Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Reference for the available methods in the UploadClient class. ```typescript interface UploadClient { updateSettings(newSettings: Settings = {}): void getSettings(): Settings base( file: Blob | File | Buffer | ReactNativeAsset, options: BaseOptions ): Promise info(uuid: Uuid, options: InfoOptions): Promise fromUrl(sourceUrl: Url, options: FromUrlOptions): Promise fromUrlStatus( token: Token, options: FromUrlStatusOptions ): Promise group(uuids: Uuid[], options: GroupOptions): Promise groupInfo(id: GroupId, options: GroupInfoOptions): Promise multipartStart( size: number, options: MultipartStartOptions ): Promise multipartUpload( part: Buffer | Blob, url: MultipartPart, options: MultipartUploadOptions ): Promise multipartComplete( uuid: Uuid, options: MultipartCompleteOptions ): Promise uploadFile( data: Blob | File | Buffer | ReactNativeAsset | Url | Uuid, options: FileFromOptions ): Promise uploadFileGroup( data: (Blob | File | Buffer | ReactNativeAsset)[] | Url[] | Uuid[], options: FileFromOptions & GroupFromOptions ): Promise } ``` -------------------------------- ### Generate Signature by Expiration Date Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/signed-uploads/README.md Generate a secure signature using a specific expiration date. The resulting `secureExpire` is in seconds. ```typescript import { generateSecureSignature } from '@uploadcare/signed-uploads' // by the expiration date const { secureSignature, secureExpire } = generateSecureSignature('YOUR_SECRET_KEY', { expire: new Date("2099-01-01") // expire on 2099-01-01 }) ``` -------------------------------- ### Generate Signature by Expiration Timestamp Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/signed-uploads/README.md Generate a secure signature using an absolute expiration timestamp in milliseconds. The resulting `secureExpire` is in seconds. ```typescript import { generateSecureSignature } from '@uploadcare/signed-uploads' // by the expiration timestamp in milliseconds since the epoch const { secureSignature, secureExpire } = generateSecureSignature('YOUR_SECRET_KEY', { expire: Date.now() + 60 * 30 * 1000 // expire in 30 minutes }) ``` -------------------------------- ### Uploadcare Authentication Schema Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Instantiate the UploadcareAuthSchema for signature-based authentication. This is suitable for Node.js environments. ```typescript import { UploadcareAuthSchema } from '@uploadcare/rest-client'; new UploadcareAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY', }) ``` -------------------------------- ### Define Metadata Type Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Defines the structure for file metadata, which consists of key-value pairs where values are strings. ```typescript type Metadata = { [key: string]: string } ``` -------------------------------- ### Cancel file upload Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md Use AbortController to cancel an ongoing upload request. ```javascript const fileUUID = 'edfdf045-34c0-4087-bbdd-e3834921f890' const abortController = new AbortController() client .uploadFile(fileUUID, { signal: abortController.signal }) .then((file) => console.log(file.uuid)) .catch((error) => { if (error.isCancel) { console.log(`File uploading was canceled.`) } }) // Cancel uploading abortController.abort() ``` -------------------------------- ### Poll Addons API Job Status Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/rest-client/README.md Use `addonJobPoller` to monitor the status of Addons API jobs. It supports various addons, provides callbacks for job events, and can be aborted. Requires authentication and specific addon parameters. ```typescript import { addonJobPoller, AddonName, UploadcareSimpleAuthSchema } from '@uploadcare/rest-client' const uploadcareSimpleAuthSchema = new UploadcareSimpleAuthSchema({ publicKey: 'YOUR_PUBLIC_KEY', secretKey: 'YOUR_SECRET_KEY' }) const abortController = new AbortController() // abortController.abort() const result = await addonJobPoller( { addonName: AddonName.UC_CLAMAV_VIRUS_SCAN, // addonName: AddonName.AWS_REKOGNITION_DETECT_LABELS, // addonName: AddonName.REMOVE_BG, onRun: response => console.log(response), // called when job is started onStatus: response => console.log(response), // called on every job status request target: ':uuid', params: { purge_infected: false }, pollOptions: { signal: abortController.signal } }, testSettings ) console.log(result) ``` -------------------------------- ### Define ReactNativeAsset Type Source: https://github.com/uploadcare/uploadcare-js-api-clients/blob/master/packages/upload-client/README.md The structure required for passing assets to the upload client in React Native. ```ts type ReactNativeAsset = { uri: string type: string name?: string } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.