0.3.0 • Published 6 months ago

@shuto-img/api v0.3.0

Weekly downloads
-
License
-
Repository
-
Last release
6 months ago

@shuto-img/api

A TypeScript/JavaScript client for interacting with the Shuto API, including URL signing capabilities.

Installation

npm install @shuto-img/api

Usage

Basic Setup

import { ShutoClient, ShutoURLSigner } from '@shuto-img/api';

// Initialize the client with signer configuration
const client = new ShutoClient(
  {
    baseUrl: 'https://api.shuto.example.com',
    apiKey: 'your-api-key', // Required only for list endpoint
  },
  {
    keys: [
      {
        id: 'key1',
        secret: 'your-secret-key',
      },
    ],
    validityWindow: 3600, // 1 hour in seconds
  }
);

// Or initialize the URL signer separately if needed
const signer = new ShutoURLSigner({
  keys: [
    {
      id: 'key1',
      secret: 'your-secret-key',
    },
  ],
  validityWindow: 3600, // 1 hour in seconds
});

Image Processing

// Generate a signed URL for image processing
const imageUrl = await client.getImageUrl({
  path: 'folder/image.jpg', // Path relative to your storage root
  w: 800,
  h: 600,
  fit: 'crop',
  fm: 'webp',
  q: 80,
});

File Downloads

// Generate a signed URL for file download
const downloadUrl = await client.getDownloadUrl({
  path: 'folder/document.pdf',
});

Listing Contents

// List contents of a directory (requires API key)
const files = await client.listContents('folder/path', {
  filter: 'jpg', // Optional filter for file paths
});

// The returned files will have the following structure:
interface File {
  path: string; // File path from the API
  fullPath: string; // Combined path, ready for use with getImageUrl
  size: number;
  mimeType: string;
  isDir: boolean;
  // For image files only:
  width?: number;
  height?: number;
}

Manual URL Signing

// Generate a signed URL manually
const signedUrl = await signer.generateSignedURL('/v2/image/folder/image.jpg', {
  endpoint: 'image',
  params: {
    w: 800,
    h: 600,
  },
});

// Validate a signed URL
const isValid = await signer.validateSignedURL(signedUrl);

API Reference

ShutoClient

The main client for interacting with the Shuto API.

Configuration

interface ShutoConfig {
  baseUrl: string;
  apiKey?: string; // Required only for list endpoint
}

interface SignerConfig {
  keys: SigningKey[];
  validityWindow?: number; // in seconds, 0 means indefinite
  defaultKeyId?: string; // defaults to first key if not specified
}

interface SigningKey {
  id: string;
  secret: string;
}

interface ListContentsOptions {
  filter?: string | RegExp; // Filter files by path
}

interface ImageParams {
  path: string; // Path to the image, relative to storage root
  w?: number; // Width
  h?: number; // Height
  fit?: 'clip' | 'crop' | 'fill'; // Resize mode
  fm?: 'jpg' | 'jpeg' | 'png' | 'webp'; // Output format
  q?: number; // Quality (1-100)
  dpr?: number; // Device pixel ratio
  blur?: number; // Blur amount
  dl?: boolean; // Force download
  excludeBaseUrl?: boolean; // Exclude baseUrl from the returned URL
}

Error Handling

All methods may throw errors with the following structure:

interface ErrorResponse {
  code: string;
  error: string;
  details?: string;
}

License

MIT

0.3.0

6 months ago

0.2.2

7 months ago

0.2.1

7 months ago

0.2.0

7 months ago

0.1.3

7 months ago

0.1.2

7 months ago

0.1.1

7 months ago

0.1.0

7 months ago