@web-lite/storage

TypeScript client for Weblite S3 Storage

Usage no npm install needed!

<script type="module">
  import webLiteStorage from 'https://cdn.skypack.dev/@web-lite/storage';
</script>

README

Weblite Storage Client

TypeScript client for Weblite S3 Storage

API

declare const upload: (file: File, { name, type, meta, compression, onProgress, }?: { 
  name?: string; // default: file.name
  type?: 'file' | 'voice' | 'image' | 'infer'; // default: `file`
  meta?: Record<string, unknown>; // use it carefully!
  compression?: CompressorOptions; // applied only if `type` = `image`, will be passed to compressorjs
  onUploadSubmit?: (fileId: string) => void, // called when the upload is submitted in the queue
  onUploadStart?: (fileId: string) => void, // called when the upload is started
  onProgress?: (fileId: string, { sent, total }: {
    sent: number;
    total: number;
  }) => void;
}) => Promise<{
  fileId: string;
  fileName: string;
  size: number;
  type: 'file' | 'voice' | 'image';
  contentType: string;
  createdAt: Date;
}>

/*
returns `true` if successfully canceled
returns `false` if:
 - file has been completely uploaded
 - file has been already canceled
 - fileId is not valid
*/
declare const cancelUpload: (fileId: string) => boolean

// returns direct download link
declare const getDirectLink: (fileId: string) => string

declare const getInfo: (fileId: string) => Promise<{
  fileName: string;
  size: number;
  contentType: string;
  meta: Record<string, unknown>;
  directLink: string;
}>

declare const config: (values: {
  fileServiceUrl?: string
  s3Url?: string
  authToken?: string
}) => void

Usage

import * as storage from '@web-lite/storage'

storage.config({ authToken: 'yourAuthToken' })

const uploadImage = async (image: File): Promise<void> => {
  const { fileId } = await storage.upload(image, {
    type: 'image',
    compression: { quality: 0.5 },
  })

  const info = await storage.getInfo(fileId)
  console.log(info)
} 

const image = selectImage()
uploadImage(image)