UNPKG

azion

Version:

Azion Packages for Edge Computing.

712 lines (513 loc) 18.5 kB
# Azion Edge Storage Client Azion Edge Storage Client provides a simple interface to interact with the Azion Edge Storage API, allowing you to manage buckets and objects. This client is configurable and supports both debug mode and environment variable-based configuration. ## Table of Contents - [Installation](#installation) - [Environment Variables](#environment-variables) - [Debug Mode](#debug-mode) - [Usage](#usage) - [Using Environment Variables](#using-environment-variables) - [Direct Method Calls](#direct-method-calls) - [Client Configuration](#client-configuration) - [API Examples](#api-examples) - [Create Bucket](#create-bucket) - [Delete Bucket](#delete-bucket) - [Get Buckets](#get-buckets) - [Get Bucket by Name](#get-bucket-by-name) - [Update Bucket](#update-bucket) - [Create Object](#create-object) - [Get Object by Key](#get-object-by-key) - [Get Objects](#get-objects) - [Update Object](#update-object) - [Delete Object](#delete-object) - [API Reference](#api-reference) - [`createBucket`](#createbucket) - [`deleteBucket`](#deletebucket) - [`getBuckets`](#getbuckets) - [`getBucket`](#getbucket) - [`updateBucket`](#updatebucket) - [`createObject`](#createobject) - [`getObjectByKey`](#getobjectbykey) - [`getObjects`](#getobjects) - [`updateObject`](#updateobject) - [`deleteObject`](#deleteobject) - [`createClient`](#createclient) - [Types](#types) - [`ClientConfig`](#clientconfig) - [`StorageClient`](#storageclient) - [`AzionStorageResponse`](#azionbucketresponse) - [`Bucket`](#bucket) - [`BucketObject`](#bucketobject) - [`DeletedBucket`](#deletedbucket) - [`DeletedBucketObject`](#deletedbucketobject) - [Contributing](#contributing) ## Installation Install the package using npm or yarn: ```sh npm install azion ``` or ```sh yarn add azion ``` ## Environment Variables You can configure the client using the following environment variables: - `AZION_TOKEN`: Your Azion API token. - `AZION_DEBUG`: Enable debug mode (true/false). Example `.env` file: ```sh AZION_TOKEN=your-api-token AZION_DEBUG=true ``` ## Debug Mode Debug mode provides detailed logging of the API requests and responses. You can enable debug mode by setting the `AZION_DEBUG` environment variable to `true` or by passing `true` as the `debug` parameter in the methods. ## Usage ### Using Environment Variables You can use the environment variables to configure the client without passing the token and debug parameters directly. ### Direct Method Calls You can use the provided wrapper methods to perform storage operations directly. ### Client Configuration You can create a client instance with specific configurations. ### API Examples #### Create Bucket **JavaScript:** ```javascript import { createBucket } from 'azion/storage'; const { data, error } = await createBucket({ name: 'my-new-bucket', edge_access: 'public' }); if (data) { console.log(`Bucket created with name: ${data.name}`); } else { console.error('Failed to create bucket', error); } ``` **TypeScript:** ```typescript import { createBucket } from 'azion/storage'; import type { AzionStorageResponse, AzionBucket } from 'azion/storage'; const { data, error }: AzionStorageResponse<AzionBucket> = await createBucket({ name: 'my-new-bucket', edge_access: 'public', }); if (data) { console.log(`Bucket created with name: ${data.name}`); } else { console.error('Failed to create bucket', error); } ``` #### Delete Bucket **JavaScript:** ```javascript import { deleteBucket } from 'azion/storage'; const { data, error } = await deleteBucket({ name: 'my-bucket' }); if (data) { console.log(`Bucket ${data.name} deleted successfully`); } else { console.error('Failed to delete bucket', error); } ``` **TypeScript:** ```typescript import { deleteBucket, AzionDeletedBucket, AzionStorageResponse } from 'azion/storage'; const { data, error }: AzionStorageResponse<AzionDeletedBucket> = await deleteBucket({ name: 'my-bucket' }); if (data) { console.log(`Bucket ${data.name} deleted successfully`); } else { console.error('Failed to delete bucket', error); } ``` #### Get Buckets **JavaScript:** ```javascript import { getBuckets } from 'azion/storage'; const { data: buckets, error } = await getBuckets({ params: { page: 1, page_size: 10 } }); if (buckets) { console.log(`Retrieved ${buckets.count} buckets`); } else { console.error('Failed to retrieve buckets', error); } ``` **TypeScript:** ```typescript import { getBuckets, AzionStorageResponse, AzionBucketCollection } from 'azion/storage'; const { data: buckets, error }: AzionStorageResponse<AzionBucketCollection> = await getBuckets({ params: { page: 1, page_size: 10 }, }); if (buckets) { console.log(`Retrieved ${buckets.count} buckets`); } else { console.error('Failed to retrieve buckets', error); } ``` #### Get Bucket by Name **JavaScript:** ```javascript import { getBucket } from 'azion/storage'; const { data: bucket, error } = await getBucket({ name: 'my-bucket' }); if (bucket) { console.log(`Retrieved bucket: ${bucket.name}`); } else { console.error('Bucket not found', error); } ``` **TypeScript:** ```typescript import { getBucket, AzionBucket } from 'azion/storage'; const { data: bucket, error }: AzionStorageResponse<AzionBucket> = await getBucket({ name: 'my-bucket' }); if (bucket) { console.log(`Retrieved bucket: ${bucket.name}`); } else { console.error('Bucket not found', error); } ``` #### Update Bucket **JavaScript:** ```javascript import { updateBucket } from 'azion/storage'; const { data: updatedBucket, error } = await updateBucket({ name: 'my-bucket', edge_access: 'private' }); if (updatedBucket) { console.log(`Bucket updated: ${updatedBucket.name}`); } else { console.error('Failed to update bucket', error); } ``` **TypeScript:** ```typescript import { updateBucket, AzionBucket, AzionStorageResponse } from 'azion/storage'; const { data: updatedBucket, error }: AzionStorageResponse<AzionBucket> | null = await updateBucket({ name: 'my-bucket', edge_access: 'private', }); if (updatedBucket) { console.log(`Bucket updated: ${updatedBucket.name}`); } else { console.error('Failed to update bucket', error); } ``` #### Create Object **JavaScript:** ```javascript import { createObject } from 'azion/storage'; const { data: newObject, error } = await createObject({ bucketName: 'my-bucket', key: 'new-file.txt', file: 'File content', }); if (newObject) { console.log(`Object created with key: ${newObject.key}`); console.log(`Object content: ${newObject.content}`); } else { console.error('Failed to create object', error); } ``` **TypeScript:** ```typescript import { createObject, AzionBucketObject, AzionStorageResponse } from 'azion/storage'; const { data: newObject, error }: AzionStorageResponse<AzionBucketObject> = await createObject({ bucketName: 'my-bucket', key: 'new-file.txt', file: 'File content', }); if (newObject) { console.log(`Object created with key: ${newObject.key}`); console.log(`Object content: ${newObject.content}`); } else { console.error('Failed to create object', error); } ``` #### Get Object by Key **JavaScript:** ```javascript import { getObjectByKey } from 'azion/storage'; const { data: object, error } = await getObjectByKey({ bucketName: 'my-bucket', key: 'file.txt' }); if (object) { console.log(`Retrieved object: ${object.key}`); } else { console.error('Object not found', error); } ``` **TypeScript:** ```typescript import { getObjectByKey, AzionBucketObject, AzionStorageResponse } from 'azion/storage'; const { data: object, error }: AzionStorageResponse<AzionBucketObject> = await getObjectByKey({ bucketName: 'my-bucket', key: 'file.txt', }); if (object) { console.log(`Retrieved object: ${object.key}`); } else { console.error('Object not found', error); } ``` #### Get Objects **JavaScript:** ```javascript import { getObjects } from 'azion/storage'; const { data: objectsResult, error } = await getObjects({ bucketName: 'my-bucket' }); if (objectsResult) { console.log(`Retrieved ${objectsResult.count} objects from the bucket`); } else { console.error('Failed to retrieve objects', error); } ``` **TypeScript:** ```typescript import { getObjects, AzionBucketObject, AzionStorageResponse } from 'azion/storage'; const { data: objectResult, error }: AzionStorageResponse<AzionBucketObjects> = await getObjects({ bucketName: 'my-bucket', }); if (objectResult) { console.log(`Retrieved ${objectResult.count} objects from the bucket`); } else { console.error('Failed to retrieve objects', error); } ``` #### Update Object **JavaScript:** ```javascript import { updateObject } from 'azion/storage'; const { data: updatedObject, error } = await updateObject({ bucketName: 'my-bucket', key: 'file.txt', file: 'Updated content', }); if (updatedObject) { console.log(`Object updated: ${updatedObject.key}`); console.log(`New content: ${updatedObject.content}`); } else { console.error('Failed to update object', error); } ``` **TypeScript:** ```typescript import { updateObject, AzionBucketObject } from 'azion/storage'; const { data: updatedObject, error }: AzionStorageResponse<AzionBucketObject> = await updateObject({ bucketName: 'my-bucket', key: 'file.txt', file: 'Updated content', }); if (updatedObject) { console.log(`Object updated: ${updatedObject.key}`); console.log(`New content: ${updatedObject.content}`); } else { console.error('Failed to update object', error); } ``` #### Delete Object **JavaScript:** ```javascript import { deleteObject } from 'azion/storage'; const { data: result, error } = await deleteObject({ bucketName: 'my-bucket', key: 'file.txt' }); if (result) { console.log(`Object ${result.key} deleted successfully`); } else { console.error('Failed to delete object', error); } ``` **TypeScript:** ```typescript import { deleteObject, AzionDeletedBucketObject, AzionStorageResponse } from 'azion/storage'; const { data: result, error }: AzionStorageResponse<AzionDeletedBucketObject> = await deleteObject({ bucketName: 'my-bucket', key: 'file.txt', }); if (result) { console.log(`Object ${result.key} deleted successfully`); } else { console.error('Failed to delete object', error); } ``` ### Using Client **JavaScript:** ```javascript import { createClient } from 'azion/storage'; const client = createClient({ token: 'your-api-token', debug: true }); const { data, error } = await client.createBucket({ name: 'my-new-bucket', edge_access: 'public' }); if (data) { console.log(`Bucket created with name: ${data.name}`); } const { data: allBuckets } = await client.getBuckets(); if (allBuckets) { console.log(`Retrieved ${allBuckets.count} buckets`); } const { data: newObject } = await client.createObject({ bucketName: 'my-new-bucket', key: 'new-file.txt', file: 'File content', }); if (newObject) { console.log(`Object created with key: ${newObject.key}`); } const { data: updateResult } = await newObject.updateObject({ key: 'new-file.txt', file: 'Updated content' }); if (updateResult) { console.log(`Object updated with key: ${updateResult.key}`); } ``` **TypeScript:** ```typescript import { createClient, StorageClient, AzionStorageResponse, AzionBucket, AzionBucketObject, AzionBucketCollection, } from 'azion/storage'; const client: StorageClient = createClient({ token: 'your-api-token', debug: true }); const { data, error }: AzionStorageResponse<AzionBucket> = await client.createBucket({ name: 'my-new-bucket', edge_access: 'public', }); if (data) { console.log(`Bucket created with name: ${data.name}`); } const { data: allBuckets }: AzionStorageResponse<AzionBucketCollection> = await client.getBuckets(); if (allBuckets) { console.log(`Retrieved ${allBuckets.count} buckets`); } const { data: newObject }: AzionStorageResponse<AzionBucketObject> = await client.createObject({ bucketName: 'my-new-bucket', key: 'new-file.txt', file: 'File content', }); if (newObject) { console.log(`Object created with key: ${newObject.key}`); } const { data: updateResult }: AzionStorageResponse<AzionBucketObject> = await client.updateObject({ bucketName: 'my-new-bucket', key: 'new-file.txt', file: 'Updated content', }); if (updateResult) { console.log(`Object updated with key: ${updateResult.key}`); } ``` ## API Reference ### `createBucket` Creates a new bucket. **Parameters:** - `name: string` - Name of the new bucket. - `edge_access: string` - Edge access configuration for the bucket. - `options?: AzionClientOptions` - Optional parameters for the request. **Returns:** - `Promise<AzionStorageResponse<AzionBucket>>` - The created bucket object or error. ### `deleteBucket` Deletes a bucket by its name. **Parameters:** - `name: string` - Name of the bucket to delete. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionDeletedBucket>>` - Object confirming deletion or error. ### `getBuckets` Retrieves a list of buckets with optional filtering and pagination. **Parameters:** - `options?: AzionBucketCollectionOptions` - Optional parameters for filtering and pagination. - `page?: number` - Page number for pagination. - `page_size?: number` - Number of items per page. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionBucketCollection>>` - Array of bucket objects or error. ### `getBucket` Retrieves a bucket by its name. **Parameters:** - `name: string` - Name of the bucket to retrieve. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionBucket>>` - The retrieved bucket object or error if not found. ### `updateBucket` Updates an existing bucket. **Parameters:** - `name: string` - Name of the bucket to update. - `edge_access: string` - New edge access configuration for the bucket. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionBucket>>` - The updated bucket object or error if update failed. ### `createObject` Creates a new object in a specific bucket. **Parameters:** - `bucketName: string` - Name of the bucket to create the object in. - `objectKey: string` - Key (name) of the object to create. - `file: string` - Content of the file to upload. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionBucketObject | null>` - The created object or null if creation failed. ### `getObjectByKey` Retrieves an object from a specific bucket by its key. **Parameters:** - `bucketName: string` - Name of the bucket containing the object. - `objectKey: string` - Key of the object to retrieve. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionBucketObject | null>` - The retrieved object or null if not found. ### `getObjects` Retrieves a list of objects in a specific bucket. **Parameters:** - `bucketName: string` - Name of the bucket to retrieve objects from. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionBucketObjects>>` - Array of bucket objects or error. ### `updateObject` Updates an existing object in a specific bucket. **Parameters:** - `bucketName: string` - Name of the bucket containing the object. - `objectKey: string` - Key of the object to update. - `file: string` - New content of the file. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionBucketObject>>` - The updated object or error if update failed. ### `deleteObject` Deletes an object from a specific bucket. **Parameters:** - `bucketName: string` - Name of the bucket containing the object. - `objectKey: string` - Key of the object to delete. - `debug?: boolean` - Enable debug mode for detailed logging. **Returns:** - `Promise<AzionStorageResponse<AzionDeletedBucketObject>>` - Confirmation of deletion or error if deletion failed. ### `createClient` Creates a Storage client with methods to interact with Azion Edge Storage. **Parameters:** - `config?: Partial<{ token: string; debug: boolean }>` - Configuration options for the Storage client. **Returns:** - `StorageClient` - An object with methods to interact with Storage. ## Types ### `ClientConfig` Configuration options for the Storage client. - `token?: string` - Your Azion API token. - `debug?: boolean` - Enable debug mode for detailed logging. ### `StorageClient` An object with methods to interact with Storage. - `getBuckets: (options?: BucketCollectionOptions) => Promise<AzionStorageResponse<AzionBucketCollection>>` - `createBucket: (name: string, edge_access: string) => Promise<AzionStorageResponse<AzionBucket>>` - `updateBucket: (name: string, edge_access: string) => Promise<AzionStorageResponse<AzionBucket>>` - `deleteBucket: (name: string) => Promise<AzionStorageResponse<AzionDeletedBucket>>` - `getBucket: (name: string) => Promise<AzionStorageResponse<AzionBucket>>` ### `AzionStorageResponse<T>` The response object from a bucket operation. - `data?: T` - The data generic object. - `error?: { message: string; operation: string;}` ### `AzionBucket` The bucket object. - `name: string` - `edge_access?: string` - `state?: 'executed' | 'pending'` - `getObjects?: () => Promise<AzionStorageResponse<AzionBucketObjects>>` - `getObjectByKey?: (objectKey: string) => Promise<AzionStorageResponse<AzionBucketObject>>` - `createObject?: (objectKey: string, file: string) => Promise<AzionStorageResponse<AzionBucketObject>>` - `updateObject?: (objectKey: string, file: string) => Promise<AzionStorageResponse<AzionBucketObject>>` - `deleteObject?: (objectKey: string) => Promise<AzionStorageResponse<AzionDeletedBucketObject>>` ### `AzionBucketObject` The bucket object. - `key: string` - `state?: 'executed' | 'pending'` - `size?: number` - `last_modified?: string` - `content_type?: string` - `content?: string` ### `AzionDeletedBucket` The response object from a delete bucket request. - `name: string` - `state: 'executed' | 'pending'` ### `AzionDeletedBucketObject` The response object from a delete object request. - `key: string` - `state: 'executed' | 'pending'` ## Contributing Feel free to submit issues or pull requests to improve the functionality or documentation.