UNPKG

koneksi-ts-sdk

Version:

A JS/TS SDK for interacting with Koneksi API services

676 lines (510 loc) 15 kB
# Koneksi TypeScript SDK A comprehensive TypeScript SDK for interacting with the Koneksi API. This SDK provides a clean and intuitive interface for managing directories, files, health monitoring, and peer operations in the Koneksi platform. ## Features - 🗂️ **Directory Management** - Create, read, update, delete, rename, and move directories - 📁 **File Operations** - Upload, download, read, update, delete, rename, move files - 🔐 **File Access Control** - Set public, private, password, or email-based access - 🔗 **Temporary Links** - Generate temporary access tokens and preview links - 🏥 **Health Monitoring** - Check API service health status - 👥 **Peer Management** - Fetch available peers - 👤 **Profile Access** - Retrieve current user profile and settings - 📊 **Dashboard Metrics** - Collect usage and resource metrics - 🔒 **Encryption Support** - Upload and download encrypted files with passphrases - 🌐 **Multi-Environment Support** - Local, staging, UAT, and production environments - 📝 **Full TypeScript Support** - Complete type definitions and IntelliSense ## Installation ```bash npm install koneksi-ts-sdk ``` ## Quick Start ```typescript import KoneksiSDK from "koneksi-ts-sdk"; // Initialize the SDK const sdk = new KoneksiSDK({ environment: "uat", // "local", "staging", "uat", "production" // optional, defaults to uat client_id: "your_client_id", client_secret: "your_client_secret", }); // Check API health const health = await sdk.health.check(); // Create a directory const directory = await sdk.directory.create({ name: "My Documents", directory_id: "parent_directory_id", // optional }); // Upload a file const uploadResult = await sdk.file.upload({ file: "important_file.pdf", // File object, Buffer, or string path directory_id: directory.id, passphrase: "MySecret123!", // optional for encryption }); // Download a file const fileBuffer = await sdk.file.download({ fileId: uploadResult.file_id, passphrase: "MySecret123!", // required for encrypted files }); ``` ## Configuration The SDK supports multiple environments with different API endpoints: ```typescript const sdk = new KoneksiSDK({ environment: "uat", // "local", "staging", "uat", "production". Optional, defaults to uat client_id: "your_client_id", client_secret: "your_client_secret", }); ``` ## API Reference ### Directory Operations The `sdk.directory` object provides methods for managing directories. #### Create Directory Creates a new directory in the specified parent directory. ```typescript const directory = await sdk.directory.create({ name: "Directory Name", directory_id: "parent_directory_id", // optional, defaults to root }); ``` #### Read Directory Retrieves directory details including files and subdirectories. ```typescript const directoryData = await sdk.directory.read("directory_id"); // Returns: DirectoryReadResponse // { // directory: Directory, // files: FileInDirectory[], // subdirectories: Subdirectory[] // } ``` #### Update Directory Updates directory properties (name and/or parent directory). ```typescript const message = await sdk.directory.update("directory_id", { name: "New Name", directory_id: "new_parent_directory_id", // optional }); // Returns: Success message string ``` #### Delete Directory Deletes a directory and all its contents. ```typescript const message = await sdk.directory.delete("directory_id"); // Returns: Success message string ``` #### Rename Directory Renames a directory with a new name. ```typescript const message = await sdk.directory.rename({ directoryId: "directory_id", name: "New Directory Name", }); // Returns: Success message string ``` #### Move Directory Moves a directory to a new parent directory. ```typescript const message = await sdk.directory.move({ directoryId: "directory_id", parentDirectoryId: "new_parent_directory_id", }); // Returns: Success message string ``` ### File Operations The `sdk.file` object provides comprehensive file management capabilities. #### Upload File Uploads a file to a directory with optional encryption. ```typescript // Browser environment - using File object const uploadResult = await sdk.file.upload({ file: fileInput.files[0], // File object directory_id: "target_directory_id", // optional passphrase: "MySecret123!", // optional for encryption }); // Node.js environment - using file path const uploadResult = await sdk.file.upload({ file: "/path/to/file.txt", // string file path directory_id: "target_directory_id", passphrase: "MySecret123!", // required for encryption in Node.js }); // Using Buffer const uploadResult = await sdk.file.upload({ file: Buffer.from("file content"), directory_id: "target_directory_id", }); // Returns: UploadFileResponse // { // content_type: string, // directory_id: string, // file_id: string, // hash: string, // name: string, // size: number // } ``` #### Read File Retrieves file details and metadata. ```typescript const file = await sdk.file.read({ fileId: "file_id", includeChunks: false, // optional, default: false }); // Returns: FileData // { // id: string; // content_type: string; // directory_id: string; // hash: string; // name: string; // size: number; // is_shared: boolean; // is_encrypted: boolean; // access: string; // recipients: string[]; // created_at: string; // updated_at: string; // } ``` #### Update File Updates file properties. ```typescript const message = await sdk.file.update("file_id", { name: "New File Name", directory_id: "new_directory_id", // optional }); // Returns: Success message string ``` #### Delete File Deletes a file permanently. ```typescript const message = await sdk.file.delete("file_id"); // Returns: Success message string ``` #### Download File (Authenticated) Downloads a file using authenticated access (for private or encrypted files). ```typescript const fileBuffer = await sdk.file.download({ fileId: "file_id", passphrase: "MySecret123!", // required for encrypted files }); // Returns: Buffer containing file content ``` #### Rename File Renames a file with a new name. ```typescript const message = await sdk.file.rename({ fileId: "file_id", name: "new_file_name.txt", }); // Returns: Success message string ``` #### Move File Moves a file to a different directory. ```typescript const message = await sdk.file.move({ fileId: "file_id", directory_id: "target_directory_id", }); // Returns: Success message string ``` #### Set File Access Configures file access permissions. ```typescript // Set to public access await sdk.file.setAccess({ fileId: "file_id", access: "public", }); // Set to private access await sdk.file.setAccess({ fileId: "file_id", access: "private", }); // Set password protection await sdk.file.setAccess({ fileId: "file_id", access: "password", value: "1234567890", }); // Set email-based access await sdk.file.setAccess({ fileId: "file_id", access: "email", value: ["user1@example.com", "user2@example.com"], // existing Koneksi accounts }); // Returns: Success message string ``` #### Generate Temporary Token Creates a temporary access token for a file. ```typescript const token = await sdk.file.generateTemporaryToken({ fileId: "file_id", expiresIn: 3600, // optional, default: 24 hours (in seconds) }); // Returns: GenerateTemporaryTokenResponse // { // duration: "1h0m0s", // file_key: "file_1234567890_abc123..." // } ``` #### Get Preview Link Gets a permanent preview link for a file. ```typescript const preview = await sdk.file.getPreviewLink({ fileId: "file_id", }); // Returns: GetPreviewLinkResponse // { // previewUrl: "https://app-staging.koneksi.co.kr/preview/file_1234567890" // } ``` #### Create Temporary Link Creates a temporary preview link with an expiration time. ```typescript const tempLink = await sdk.file.createTemporaryLink({ fileId: "file_id", expiresIn: 3600, // optional, default: 24 hours (in seconds) }); // Returns: CreateTemporaryLinkResponse // { // temporaryPreviewUrl: "https://app-staging.koneksi.co.kr/preview/file_1234567890?token=abc123...", // duration: "1h0m0s", // file_key: "file_1234567890_abc123..." // } ``` #### Read File Access (Public) Gets file access information using the public endpoint. ```typescript const accessInfo = await sdk.file.publicRead({ fileId: "file_id", }); // Returns: ReadFileAccessResponse // { // access: "public" | "private" | "password" | "email", // is_encrypted: boolean, // id: string, // size: number // } ``` #### Download File (Public) Downloads a file using public access methods (tokens, passwords, etc.). ```typescript // Using temporary token const fileBuffer = await sdk.file.publicDownload({ fileId: "file_id", temporaryToken: "token123", passphrase: "MySecret123!", // optional for encrypted files }); // Using password protection const fileBuffer = await sdk.file.publicDownload({ fileId: "file_id", shared: { access: "password", value: "Password123!", }, passphrase: "MySecret123!", // optional for encrypted files }); // Returns: Buffer containing file content ``` ### Health Operations The `sdk.health` object provides API health monitoring. #### Check Health Checks the health status of the API service. ```typescript const health = await sdk.health.check(); // Returns: HealthResponse // { // data: any, // message: string, // meta: any, // status: string // } ``` ### Peers Operations The `sdk.peers` object provides peer management capabilities. #### Fetch Peers Retrieves available peers for the authenticated client. ```typescript const peers = await sdk.peers.read(); ``` ### Profile Operations The `sdk.profile` object provides access to the current user's profile and settings. #### Get Current User Profile Fetches the current user's profile, role, settings, and usage limits. ```typescript const profile = await sdk.profile.me(); // Returns: ProfileData // { // limit: { limit: number, used: number }, // organization: any | null, // profile: { first_name: string, last_name: string }, // role: { id: string, name: string }, // settings: { ... }, // user: { email: string, id: string, is_org_member: boolean, is_verified: boolean } // } ``` ### Dashboard Operations The `sdk.dashboard` object provides access to usage and resource metrics for the current account. #### Collect Dashboard Metrics Fetches usage statistics such as byte limits, usage, and resource counts. ```typescript const metrics = await sdk.dashboard.collectMetrics(); // Returns: DashboardMetrics // { // byte_limit: number, // byte_usage: number, // directory_count: number, // file_count: number, // service_account_count: number // } ``` ## Complete Examples ### File Management Workflow ```typescript import KoneksiSDK from "koneksi-ts-sdk"; const sdk = new KoneksiSDK({ environment: "uat", client_id: "your_client_id", client_secret: "your_client_secret", }); async function completeFileWorkflow() { try { // 1. Check API health const health = await sdk.health.check(); console.log("API Health:", health.status); // 2. Create a directory structure const documentsDir = await sdk.directory.create({ name: "Documents", }); const projectsDir = await sdk.directory.create({ name: "Projects", directory_id: documentsDir.id, }); // 3. Upload an encrypted file const uploadResult = await sdk.file.upload({ file: "important_file.pdf, directory_id: projectsDir.id, passphrase: "MySecret123!", }); // 4. Set file access to password-protected await sdk.file.setAccess({ fileId: uploadResult.file_id, access: "password", value: "FilePassword123!", }); // 5. Create a temporary preview link const tempLink = await sdk.file.createTemporaryLink({ fileId: uploadResult.file_id, expiresIn: 3600, // 1 hour }); // 6. Read directory contents const directoryData = await sdk.directory.read(documentsDir.id); console.log("Files:", directoryData.files); console.log("Subdirectories:", directoryData.subdirectories); // 7. Download the file const fileBuffer = await sdk.file.download({ fileId: uploadResult.file_id, passphrase: "MySecret123!", }); // 8. Move file to different directory await sdk.file.move({ fileId: uploadResult.file_id, directory_id: documentsDir.id, }); // 9. Rename the file await sdk.file.rename({ fileId: uploadResult.file_id, name: "Updated File Name.txt", }); // 10. Clean up await sdk.file.delete(uploadResult.file_id); await sdk.directory.delete(projectsDir.id); await sdk.directory.delete(documentsDir.id); console.log("Workflow completed successfully!"); } catch (error) { console.error("Error:", error.message); } } ``` ### Peer Management ```typescript async function managePeers() { try { // Fetch available peers const peers = await sdk.peers.read(); console.log("Available peers:"); peers.forEach((peer) => { console.log( `- ${peer.name} (${peer.status}) - Created: ${peer.created_at}` ); }); } catch (error) { console.error("Failed to fetch peers:", error.message); } } ``` ### Health Monitoring ```typescript async function monitorHealth() { try { const health = await sdk.health.check(); if (health.status === "success") { console.log("✅ API is healthy:", health.message); } else { console.log("❌ API health check failed:", health.message); } } catch (error) { console.error("Health check error:", error.message); } } ``` ## Error Handling The SDK provides comprehensive error handling with descriptive error messages: ```typescript try { const directory = await sdk.directory.create({ name: "Test Directory", }); } catch (error) { console.error("Failed to create directory:", error.message); // Error messages are descriptive and actionable } ``` ## TypeScript Support The SDK is built with TypeScript and provides full type safety: ```typescript import { Directory, FileData, UploadFileResponse, DirectoryReadResponse, CreateDirectoryRequest, Peer, HealthResponse, } from "koneksi-ts-sdk"; // All parameters and return types are fully typed const createParams: CreateDirectoryRequest = { name: "My Directory", }; const directory: Directory = await sdk.directory.create(createParams); const fileData: FileData = await sdk.file.read({ fileId: "file_id" }); const peers: Peer[] = await sdk.peers.read(); const health: HealthResponse = await sdk.health.check(); ``` ## Development ### Building the SDK ```bash npm run build ``` ### Running Tests ```bash npm test ``` ### Linting ```bash npm run lint ``` ### Formatting ```bash npm run format ``` ## License MIT