hetzner-storage-sdk 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.ObjectStorageProvider = exports.StorageShareProvider = exports.StorageBoxProvider = exports.BaseStorageProvider = exports.HetznerStorageClient = void 0;
18
+ const BaseStorageProvider_1 = require("./providers/BaseStorageProvider");
19
+ Object.defineProperty(exports, "BaseStorageProvider", { enumerable: true, get: function () { return BaseStorageProvider_1.BaseStorageProvider; } });
20
+ const StorageBoxProvider_1 = require("./providers/StorageBoxProvider");
21
+ Object.defineProperty(exports, "StorageBoxProvider", { enumerable: true, get: function () { return StorageBoxProvider_1.StorageBoxProvider; } });
22
+ const StorageShareProvider_1 = require("./providers/StorageShareProvider");
23
+ Object.defineProperty(exports, "StorageShareProvider", { enumerable: true, get: function () { return StorageShareProvider_1.StorageShareProvider; } });
24
+ const ObjectStorageProvider_1 = require("./providers/ObjectStorageProvider");
25
+ Object.defineProperty(exports, "ObjectStorageProvider", { enumerable: true, get: function () { return ObjectStorageProvider_1.ObjectStorageProvider; } });
26
+ const env_config_1 = require("./utils/env-config");
27
+ /**
28
+ * Factory class for creating Hetzner Storage clients
29
+ *
30
+ * This class implements the Factory pattern to instantiate the appropriate
31
+ * storage provider based on the configuration.
32
+ *
33
+ * Configuration can be provided explicitly or loaded from environment variables.
34
+ * Explicit configuration takes precedence over environment variables.
35
+ *
36
+ * Environment Variables:
37
+ * - Storage Box:
38
+ * - HETZNER_STORAGE_BOX_USERNAME
39
+ * - HETZNER_STORAGE_BOX_PASSWORD
40
+ * - HETZNER_STORAGE_BOX_PROTOCOL (optional: webdav)
41
+ * - HETZNER_STORAGE_BOX_ID (optional)
42
+ * - HETZNER_ROBOT_USERNAME (optional)
43
+ * - HETZNER_ROBOT_PASSWORD (optional)
44
+ *
45
+ * - Storage Share:
46
+ * - HETZNER_STORAGE_SHARE_USERNAME
47
+ * - HETZNER_STORAGE_SHARE_PASSWORD
48
+ * - HETZNER_STORAGE_SHARE_INSTANCE
49
+ *
50
+ * - Object Storage:
51
+ * - HETZNER_OBJECT_STORAGE_ACCESS_KEY_ID
52
+ * - HETZNER_OBJECT_STORAGE_SECRET_ACCESS_KEY
53
+ * - HETZNER_OBJECT_STORAGE_REGION
54
+ * - HETZNER_OBJECT_STORAGE_BUCKET
55
+ *
56
+ * Usage:
57
+ * ```typescript
58
+ * // Using explicit configuration
59
+ * const client = HetznerStorageClient.create({
60
+ * type: 'box',
61
+ * username: 'u123456',
62
+ * password: 'your-password',
63
+ * });
64
+ *
65
+ * // Using environment variables (set env vars first)
66
+ * const client = HetznerStorageClient.create({ type: 'box' });
67
+ *
68
+ * // Mixed: override specific values while loading others from env
69
+ * const client = HetznerStorageClient.create({
70
+ * type: 'object',
71
+ * bucket: 'my-custom-bucket' // Other fields loaded from env
72
+ * });
73
+ * ```
74
+ */
75
+ class HetznerStorageClient {
76
+ /**
77
+ * Create a new storage client based on the provided configuration
78
+ *
79
+ * Configuration values can be provided explicitly or loaded from environment variables.
80
+ * Explicitly provided values take precedence over environment variables.
81
+ *
82
+ * @param config - Storage configuration object (partial config allowed if env vars are set)
83
+ * @returns An instance of the appropriate storage provider
84
+ * @throws Error if the storage type is invalid or required configuration is missing
85
+ */
86
+ static create(config) {
87
+ if (!config.type) {
88
+ throw new Error('Storage type is required in configuration');
89
+ }
90
+ switch (config.type) {
91
+ case 'box': {
92
+ const envConfig = (0, env_config_1.loadStorageBoxEnv)();
93
+ const mergedConfig = (0, env_config_1.mergeWithEnv)(config, envConfig);
94
+ if (!mergedConfig.username || !mergedConfig.password) {
95
+ throw new Error('Username and password are required for Storage Box. ' +
96
+ 'Provide them in config or set HETZNER_STORAGE_BOX_USERNAME and HETZNER_STORAGE_BOX_PASSWORD environment variables.');
97
+ }
98
+ return new StorageBoxProvider_1.StorageBoxProvider(mergedConfig);
99
+ }
100
+ case 'share': {
101
+ const envConfig = (0, env_config_1.loadStorageShareEnv)();
102
+ const mergedConfig = (0, env_config_1.mergeWithEnv)(config, envConfig);
103
+ if (!mergedConfig.username || !mergedConfig.password) {
104
+ throw new Error('Username and password are required for Storage Share. ' +
105
+ 'Provide them in config or set HETZNER_STORAGE_SHARE_USERNAME and HETZNER_STORAGE_SHARE_PASSWORD environment variables.');
106
+ }
107
+ if (!mergedConfig.instance) {
108
+ throw new Error('Instance is required for Storage Share. ' +
109
+ 'Provide it in config or set HETZNER_STORAGE_SHARE_INSTANCE environment variable.');
110
+ }
111
+ return new StorageShareProvider_1.StorageShareProvider(mergedConfig);
112
+ }
113
+ case 'object': {
114
+ const envConfig = (0, env_config_1.loadObjectStorageEnv)();
115
+ const mergedConfig = (0, env_config_1.mergeWithEnv)(config, envConfig);
116
+ if (!mergedConfig.accessKeyId || !mergedConfig.secretAccessKey) {
117
+ throw new Error('accessKeyId and secretAccessKey are required for Object Storage. ' +
118
+ 'Provide them in config or set HETZNER_OBJECT_STORAGE_ACCESS_KEY_ID and HETZNER_OBJECT_STORAGE_SECRET_ACCESS_KEY environment variables.');
119
+ }
120
+ if (!mergedConfig.region) {
121
+ throw new Error('Region is required for Object Storage. ' +
122
+ 'Provide it in config or set HETZNER_OBJECT_STORAGE_REGION environment variable.');
123
+ }
124
+ if (!mergedConfig.bucket) {
125
+ throw new Error('Bucket is required for Object Storage. ' +
126
+ 'Provide it in config or set HETZNER_OBJECT_STORAGE_BUCKET environment variable.');
127
+ }
128
+ return new ObjectStorageProvider_1.ObjectStorageProvider(mergedConfig);
129
+ }
130
+ default:
131
+ throw new Error(`Invalid storage type: ${config.type}. Must be 'box', 'share', or 'object'.`);
132
+ }
133
+ }
134
+ /**
135
+ * Create a Storage Box client
136
+ * Convenience method for creating a Storage Box provider
137
+ *
138
+ * Configuration values can be provided explicitly or loaded from environment variables.
139
+ *
140
+ * @param config - Storage Box configuration (optional if env vars are set)
141
+ * @returns StorageBoxProvider instance
142
+ */
143
+ static createBoxClient(config = {}) {
144
+ const envConfig = (0, env_config_1.loadStorageBoxEnv)();
145
+ const mergedConfig = (0, env_config_1.mergeWithEnv)({ ...config, type: 'box' }, envConfig);
146
+ if (!mergedConfig.username || !mergedConfig.password) {
147
+ throw new Error('Username and password are required for Storage Box. ' +
148
+ 'Provide them in config or set HETZNER_STORAGE_BOX_USERNAME and HETZNER_STORAGE_BOX_PASSWORD environment variables.');
149
+ }
150
+ return new StorageBoxProvider_1.StorageBoxProvider(mergedConfig);
151
+ }
152
+ /**
153
+ * Create a Storage Share client
154
+ * Convenience method for creating a Storage Share provider
155
+ *
156
+ * Configuration values can be provided explicitly or loaded from environment variables.
157
+ *
158
+ * @param config - Storage Share configuration (optional if env vars are set)
159
+ * @returns StorageShareProvider instance
160
+ */
161
+ static createShareClient(config = {}) {
162
+ const envConfig = (0, env_config_1.loadStorageShareEnv)();
163
+ const mergedConfig = (0, env_config_1.mergeWithEnv)({ ...config, type: 'share' }, envConfig);
164
+ if (!mergedConfig.username || !mergedConfig.password) {
165
+ throw new Error('Username and password are required for Storage Share. ' +
166
+ 'Provide them in config or set HETZNER_STORAGE_SHARE_USERNAME and HETZNER_STORAGE_SHARE_PASSWORD environment variables.');
167
+ }
168
+ if (!mergedConfig.instance) {
169
+ throw new Error('Instance is required for Storage Share. ' +
170
+ 'Provide it in config or set HETZNER_STORAGE_SHARE_INSTANCE environment variable.');
171
+ }
172
+ return new StorageShareProvider_1.StorageShareProvider(mergedConfig);
173
+ }
174
+ /**
175
+ * Create an Object Storage client
176
+ * Convenience method for creating an Object Storage provider
177
+ *
178
+ * Configuration values can be provided explicitly or loaded from environment variables.
179
+ *
180
+ * @param config - Object Storage configuration (optional if env vars are set)
181
+ * @returns ObjectStorageProvider instance
182
+ */
183
+ static createObjectClient(config = {}) {
184
+ const envConfig = (0, env_config_1.loadObjectStorageEnv)();
185
+ const mergedConfig = (0, env_config_1.mergeWithEnv)({ ...config, type: 'object' }, envConfig);
186
+ if (!mergedConfig.accessKeyId || !mergedConfig.secretAccessKey) {
187
+ throw new Error('accessKeyId and secretAccessKey are required for Object Storage. ' +
188
+ 'Provide them in config or set HETZNER_OBJECT_STORAGE_ACCESS_KEY_ID and HETZNER_OBJECT_STORAGE_SECRET_ACCESS_KEY environment variables.');
189
+ }
190
+ if (!mergedConfig.region) {
191
+ throw new Error('Region is required for Object Storage. ' +
192
+ 'Provide it in config or set HETZNER_OBJECT_STORAGE_REGION environment variable.');
193
+ }
194
+ if (!mergedConfig.bucket) {
195
+ throw new Error('Bucket is required for Object Storage. ' +
196
+ 'Provide it in config or set HETZNER_OBJECT_STORAGE_BUCKET environment variable.');
197
+ }
198
+ return new ObjectStorageProvider_1.ObjectStorageProvider(mergedConfig);
199
+ }
200
+ }
201
+ exports.HetznerStorageClient = HetznerStorageClient;
202
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Hetzner Storage SDK
3
+ *
4
+ * A TypeScript SDK for interacting with Hetzner Storage Box, Storage Share, and Object Storage
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ export { HetznerStorageClient } from './HetznerStorageClient';
9
+ export { BaseStorageProvider } from './providers/BaseStorageProvider';
10
+ export { StorageBoxProvider } from './providers/StorageBoxProvider';
11
+ export { StorageShareProvider } from './providers/StorageShareProvider';
12
+ export { ObjectStorageProvider } from './providers/ObjectStorageProvider';
13
+ export * from './types';
14
+ export { RobotApiClient } from './utils/RobotApiClient';
15
+ export { OcsApiClient } from './utils/OcsApiClient';
16
+ export { S3ApiClient } from './utils/S3ApiClient';
17
+ export { STORAGE_BOX_ENV, STORAGE_SHARE_ENV, OBJECT_STORAGE_ENV, loadStorageBoxEnv, loadStorageShareEnv, loadObjectStorageEnv, } from './utils/env-config';
18
+ /**
19
+ * Default export is the HetznerStorageClient factory
20
+ */
21
+ export { HetznerStorageClient as default } from './HetznerStorageClient';
package/dist/index.js ADDED
@@ -0,0 +1,56 @@
1
+ "use strict";
2
+ /**
3
+ * Hetzner Storage SDK
4
+ *
5
+ * A TypeScript SDK for interacting with Hetzner Storage Box, Storage Share, and Object Storage
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ var desc = Object.getOwnPropertyDescriptor(m, k);
12
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
13
+ desc = { enumerable: true, get: function() { return m[k]; } };
14
+ }
15
+ Object.defineProperty(o, k2, desc);
16
+ }) : (function(o, m, k, k2) {
17
+ if (k2 === undefined) k2 = k;
18
+ o[k2] = m[k];
19
+ }));
20
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
21
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.default = exports.loadObjectStorageEnv = exports.loadStorageShareEnv = exports.loadStorageBoxEnv = exports.OBJECT_STORAGE_ENV = exports.STORAGE_SHARE_ENV = exports.STORAGE_BOX_ENV = exports.S3ApiClient = exports.OcsApiClient = exports.RobotApiClient = exports.ObjectStorageProvider = exports.StorageShareProvider = exports.StorageBoxProvider = exports.BaseStorageProvider = exports.HetznerStorageClient = void 0;
25
+ var HetznerStorageClient_1 = require("./HetznerStorageClient");
26
+ Object.defineProperty(exports, "HetznerStorageClient", { enumerable: true, get: function () { return HetznerStorageClient_1.HetznerStorageClient; } });
27
+ var BaseStorageProvider_1 = require("./providers/BaseStorageProvider");
28
+ Object.defineProperty(exports, "BaseStorageProvider", { enumerable: true, get: function () { return BaseStorageProvider_1.BaseStorageProvider; } });
29
+ var StorageBoxProvider_1 = require("./providers/StorageBoxProvider");
30
+ Object.defineProperty(exports, "StorageBoxProvider", { enumerable: true, get: function () { return StorageBoxProvider_1.StorageBoxProvider; } });
31
+ var StorageShareProvider_1 = require("./providers/StorageShareProvider");
32
+ Object.defineProperty(exports, "StorageShareProvider", { enumerable: true, get: function () { return StorageShareProvider_1.StorageShareProvider; } });
33
+ var ObjectStorageProvider_1 = require("./providers/ObjectStorageProvider");
34
+ Object.defineProperty(exports, "ObjectStorageProvider", { enumerable: true, get: function () { return ObjectStorageProvider_1.ObjectStorageProvider; } });
35
+ // Export all types
36
+ __exportStar(require("./types"), exports);
37
+ // Export utility clients for advanced usage
38
+ var RobotApiClient_1 = require("./utils/RobotApiClient");
39
+ Object.defineProperty(exports, "RobotApiClient", { enumerable: true, get: function () { return RobotApiClient_1.RobotApiClient; } });
40
+ var OcsApiClient_1 = require("./utils/OcsApiClient");
41
+ Object.defineProperty(exports, "OcsApiClient", { enumerable: true, get: function () { return OcsApiClient_1.OcsApiClient; } });
42
+ var S3ApiClient_1 = require("./utils/S3ApiClient");
43
+ Object.defineProperty(exports, "S3ApiClient", { enumerable: true, get: function () { return S3ApiClient_1.S3ApiClient; } });
44
+ // Export environment configuration utilities
45
+ var env_config_1 = require("./utils/env-config");
46
+ Object.defineProperty(exports, "STORAGE_BOX_ENV", { enumerable: true, get: function () { return env_config_1.STORAGE_BOX_ENV; } });
47
+ Object.defineProperty(exports, "STORAGE_SHARE_ENV", { enumerable: true, get: function () { return env_config_1.STORAGE_SHARE_ENV; } });
48
+ Object.defineProperty(exports, "OBJECT_STORAGE_ENV", { enumerable: true, get: function () { return env_config_1.OBJECT_STORAGE_ENV; } });
49
+ Object.defineProperty(exports, "loadStorageBoxEnv", { enumerable: true, get: function () { return env_config_1.loadStorageBoxEnv; } });
50
+ Object.defineProperty(exports, "loadStorageShareEnv", { enumerable: true, get: function () { return env_config_1.loadStorageShareEnv; } });
51
+ Object.defineProperty(exports, "loadObjectStorageEnv", { enumerable: true, get: function () { return env_config_1.loadObjectStorageEnv; } });
52
+ /**
53
+ * Default export is the HetznerStorageClient factory
54
+ */
55
+ var HetznerStorageClient_2 = require("./HetznerStorageClient");
56
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return HetznerStorageClient_2.HetznerStorageClient; } });
@@ -0,0 +1,73 @@
1
+ import { Readable } from 'stream';
2
+ import { FileMetadata, UploadOptions, DownloadOptions, StorageConfig } from '../types';
3
+ /**
4
+ * Abstract base class for all storage providers
5
+ * Defines the common interface that both Storage Box and Storage Share must implement
6
+ */
7
+ export declare abstract class BaseStorageProvider {
8
+ protected config: StorageConfig;
9
+ constructor(config: StorageConfig);
10
+ /**
11
+ * List files and directories at the specified path
12
+ * @param remotePath - The remote path to list (default: '/')
13
+ * @returns Array of file metadata
14
+ */
15
+ abstract listFiles(remotePath?: string): Promise<FileMetadata[]>;
16
+ /**
17
+ * Upload a file to the storage
18
+ * @param localPath - Local file path or Buffer or Readable stream
19
+ * @param remotePath - Remote destination path
20
+ * @param options - Upload options
21
+ */
22
+ abstract uploadFile(localPath: string | Buffer | Readable, remotePath: string, options?: UploadOptions): Promise<void>;
23
+ /**
24
+ * Download a file from the storage
25
+ * @param remotePath - Remote file path
26
+ * @param localPath - Local destination path (optional, returns Buffer if not provided)
27
+ * @param options - Download options
28
+ * @returns Buffer if localPath is not provided, void otherwise
29
+ */
30
+ abstract downloadFile(remotePath: string, localPath?: string, options?: DownloadOptions): Promise<Buffer | void>;
31
+ /**
32
+ * Delete a file or directory from the storage
33
+ * @param remotePath - Remote path to delete
34
+ */
35
+ abstract deleteFile(remotePath: string): Promise<void>;
36
+ /**
37
+ * Create a directory
38
+ * @param remotePath - Remote directory path to create
39
+ */
40
+ abstract createDirectory(remotePath: string): Promise<void>;
41
+ /**
42
+ * Move or rename a file/directory
43
+ * @param fromPath - Source path
44
+ * @param toPath - Destination path
45
+ */
46
+ abstract moveFile(fromPath: string, toPath: string): Promise<void>;
47
+ /**
48
+ * Copy a file/directory
49
+ * @param fromPath - Source path
50
+ * @param toPath - Destination path
51
+ */
52
+ abstract copyFile(fromPath: string, toPath: string): Promise<void>;
53
+ /**
54
+ * Check if a file or directory exists
55
+ * @param remotePath - Remote path to check
56
+ * @returns true if exists, false otherwise
57
+ */
58
+ abstract exists(remotePath: string): Promise<boolean>;
59
+ /**
60
+ * Get metadata for a specific file or directory
61
+ * @param remotePath - Remote path
62
+ * @returns File metadata
63
+ */
64
+ abstract getMetadata(remotePath: string): Promise<FileMetadata>;
65
+ /**
66
+ * Get the provider type
67
+ */
68
+ abstract getProviderType(): 'box' | 'share' | 'object';
69
+ /**
70
+ * Clean up resources and close connections
71
+ */
72
+ abstract disconnect(): Promise<void>;
73
+ }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseStorageProvider = void 0;
4
+ /**
5
+ * Abstract base class for all storage providers
6
+ * Defines the common interface that both Storage Box and Storage Share must implement
7
+ */
8
+ class BaseStorageProvider {
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ }
13
+ exports.BaseStorageProvider = BaseStorageProvider;
@@ -0,0 +1,114 @@
1
+ import { Readable } from 'stream';
2
+ import { BaseStorageProvider } from './BaseStorageProvider';
3
+ import { ObjectStorageConfig, FileMetadata, UploadOptions, DownloadOptions, BucketInfo, PresignedUrlOptions, MultipartUploadInfo, CompletedPart, ListObjectsOptions, ListObjectsResult } from '../types';
4
+ /**
5
+ * Provider for Hetzner Object Storage (S3-compatible)
6
+ * Uses AWS SDK S3 client for all operations
7
+ */
8
+ export declare class ObjectStorageProvider extends BaseStorageProvider {
9
+ private _config;
10
+ private s3Client;
11
+ private defaultBucket;
12
+ private initPromise;
13
+ constructor(config: ObjectStorageConfig);
14
+ /**
15
+ * Ensure the default bucket exists, creating it if necessary
16
+ */
17
+ private ensureBucketExists;
18
+ /**
19
+ * Wait for initialization to complete
20
+ */
21
+ private ensureInitialized;
22
+ /**
23
+ * Normalize a remote path to an S3 key by stripping leading slashes
24
+ */
25
+ private normalizeKey;
26
+ /**
27
+ * List files and directories at the specified path
28
+ */
29
+ listFiles(remotePath?: string): Promise<FileMetadata[]>;
30
+ /**
31
+ * Upload a file to the storage
32
+ */
33
+ uploadFile(localPath: string | Buffer | Readable, remotePath: string, options?: UploadOptions): Promise<void>;
34
+ /**
35
+ * Download a file from the storage
36
+ */
37
+ downloadFile(remotePath: string, localPath?: string, options?: DownloadOptions): Promise<Buffer | void>;
38
+ /**
39
+ * Delete a file or directory from the storage
40
+ */
41
+ deleteFile(remotePath: string): Promise<void>;
42
+ /**
43
+ * Create a directory (S3 directory marker)
44
+ */
45
+ createDirectory(remotePath: string): Promise<void>;
46
+ /**
47
+ * Move or rename a file (copy + delete, since S3 has no native move)
48
+ */
49
+ moveFile(fromPath: string, toPath: string): Promise<void>;
50
+ /**
51
+ * Copy a file
52
+ */
53
+ copyFile(fromPath: string, toPath: string): Promise<void>;
54
+ /**
55
+ * Check if a file or directory exists
56
+ */
57
+ exists(remotePath: string): Promise<boolean>;
58
+ /**
59
+ * Get metadata for a specific file or directory
60
+ */
61
+ getMetadata(remotePath: string): Promise<FileMetadata>;
62
+ /**
63
+ * Get the provider type
64
+ */
65
+ getProviderType(): 'object';
66
+ /**
67
+ * Clean up resources
68
+ */
69
+ disconnect(): Promise<void>;
70
+ /**
71
+ * List all buckets
72
+ */
73
+ listBuckets(): Promise<BucketInfo[]>;
74
+ /**
75
+ * Create a new bucket
76
+ */
77
+ createBucket(name: string): Promise<void>;
78
+ /**
79
+ * Delete a bucket
80
+ */
81
+ deleteBucket(name: string): Promise<void>;
82
+ /**
83
+ * Check if a bucket exists
84
+ */
85
+ bucketExists(name: string): Promise<boolean>;
86
+ /**
87
+ * Generate a presigned download URL
88
+ */
89
+ getPresignedDownloadUrl(key: string, options?: PresignedUrlOptions): Promise<string>;
90
+ /**
91
+ * Generate a presigned upload URL
92
+ */
93
+ getPresignedUploadUrl(key: string, options?: PresignedUrlOptions): Promise<string>;
94
+ /**
95
+ * Initiate a multipart upload
96
+ */
97
+ createMultipartUpload(key: string, contentType?: string): Promise<MultipartUploadInfo>;
98
+ /**
99
+ * Upload a part of a multipart upload
100
+ */
101
+ uploadPart(key: string, uploadId: string, partNumber: number, body: Buffer): Promise<CompletedPart>;
102
+ /**
103
+ * Complete a multipart upload
104
+ */
105
+ completeMultipartUpload(key: string, uploadId: string, parts: CompletedPart[]): Promise<void>;
106
+ /**
107
+ * Abort a multipart upload
108
+ */
109
+ abortMultipartUpload(key: string, uploadId: string): Promise<void>;
110
+ /**
111
+ * List objects with pagination support
112
+ */
113
+ listObjectsPaginated(options?: ListObjectsOptions): Promise<ListObjectsResult>;
114
+ }