@ooneex/storage 0.0.14 → 0.0.15

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.
package/dist/index.d.ts CHANGED
@@ -31,17 +31,12 @@ declare abstract class AbstractStorage implements IStorage {
31
31
  protected getS3File(path: string): S3File2;
32
32
  }
33
33
  import { BunFile as BunFile3, S3File as S3File3 } from "bun";
34
- type BunnyRegion = "de" | "uk" | "ny" | "la" | "sg" | "se" | "br" | "jh" | "syd";
35
34
  declare class BunnyStorage implements IStorage {
36
35
  private bucket;
37
36
  private readonly accessKey;
38
37
  private readonly storageZone;
39
38
  private readonly region;
40
- constructor(options?: {
41
- accessKey?: string;
42
- storageZone?: string;
43
- region?: BunnyRegion;
44
- });
39
+ constructor();
45
40
  setBucket(name: string): this;
46
41
  list(): Promise<string[]>;
47
42
  clearBucket(): Promise<this>;
@@ -62,12 +57,7 @@ declare class CloudflareStorage extends AbstractStorage {
62
57
  private readonly secretKey;
63
58
  private readonly endpoint;
64
59
  private readonly region;
65
- constructor(options?: {
66
- accessKey?: string;
67
- secretKey?: string;
68
- endpoint?: string;
69
- region?: "EEUR" | "WEUR" | "APAC" | "NAM";
70
- });
60
+ constructor();
71
61
  getOptions(): S3Options2;
72
62
  }
73
63
  import { EContainerScope } from "@ooneex/container";
@@ -78,9 +68,7 @@ import { BunFile as BunFile4, S3File as S3File4, S3Options as S3Options3 } from
78
68
  declare class FilesystemStorage extends AbstractStorage {
79
69
  protected bucket: string;
80
70
  private readonly storagePath;
81
- constructor(options?: {
82
- storagePath?: string;
83
- });
71
+ constructor();
84
72
  getOptions(): S3Options3;
85
73
  private getBucketPath;
86
74
  private getFilePath;
package/dist/index.js CHANGED
@@ -103,10 +103,10 @@ class BunnyStorage {
103
103
  accessKey;
104
104
  storageZone;
105
105
  region;
106
- constructor(options) {
107
- const accessKey = options?.accessKey ?? Bun.env.STORAGE_BUNNY_ACCESS_KEY;
108
- const storageZone = options?.storageZone ?? Bun.env.STORAGE_BUNNY_STORAGE_ZONE;
109
- const region = options?.region ?? Bun.env.STORAGE_BUNNY_REGION;
106
+ constructor() {
107
+ const accessKey = Bun.env.STORAGE_BUNNY_ACCESS_KEY;
108
+ const storageZone = Bun.env.STORAGE_BUNNY_STORAGE_ZONE;
109
+ const region = Bun.env.STORAGE_BUNNY_REGION;
110
110
  if (!accessKey) {
111
111
  throw new StorageException("Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.");
112
112
  }
@@ -316,9 +316,7 @@ class BunnyStorage {
316
316
  }
317
317
  BunnyStorage = __legacyDecorateClassTS([
318
318
  decorator.storage(),
319
- __legacyMetadataTS("design:paramtypes", [
320
- Object
321
- ])
319
+ __legacyMetadataTS("design:paramtypes", [])
322
320
  ], BunnyStorage);
323
321
  // src/CloudflareStorage.ts
324
322
  class CloudflareStorage extends AbstractStorage {
@@ -327,11 +325,11 @@ class CloudflareStorage extends AbstractStorage {
327
325
  secretKey;
328
326
  endpoint;
329
327
  region;
330
- constructor(options) {
328
+ constructor() {
331
329
  super();
332
- const accessKey = options?.accessKey || Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;
333
- const secretKey = options?.secretKey || Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;
334
- const endpoint = options?.endpoint || Bun.env.STORAGE_CLOUDFLARE_ENDPOINT;
330
+ const accessKey = Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;
331
+ const secretKey = Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;
332
+ const endpoint = Bun.env.STORAGE_CLOUDFLARE_ENDPOINT;
335
333
  if (!accessKey) {
336
334
  throw new StorageException("Cloudflare access key is required. Please provide an access key either through the constructor options or set the STORAGE_CLOUDFLARE_ACCESS_KEY environment variable.");
337
335
  }
@@ -344,7 +342,7 @@ class CloudflareStorage extends AbstractStorage {
344
342
  this.accessKey = accessKey;
345
343
  this.secretKey = secretKey;
346
344
  this.endpoint = endpoint;
347
- this.region = options?.region || Bun.env.STORAGE_CLOUDFLARE_REGION || "EEUR";
345
+ this.region = Bun.env.STORAGE_CLOUDFLARE_REGION || "EEUR";
348
346
  }
349
347
  getOptions() {
350
348
  return {
@@ -358,9 +356,7 @@ class CloudflareStorage extends AbstractStorage {
358
356
  }
359
357
  CloudflareStorage = __legacyDecorateClassTS([
360
358
  decorator.storage(),
361
- __legacyMetadataTS("design:paramtypes", [
362
- Object
363
- ])
359
+ __legacyMetadataTS("design:paramtypes", [])
364
360
  ], CloudflareStorage);
365
361
  // src/FilesystemStorage.ts
366
362
  import { existsSync, mkdirSync } from "fs";
@@ -369,9 +365,9 @@ import { dirname, join } from "path";
369
365
  class FilesystemStorage extends AbstractStorage {
370
366
  bucket;
371
367
  storagePath;
372
- constructor(options) {
368
+ constructor() {
373
369
  super();
374
- const basePath = options?.storagePath || Bun.env.FILESYSTEM_STORAGE_PATH;
370
+ const basePath = Bun.env.FILESYSTEM_STORAGE_PATH;
375
371
  if (!basePath) {
376
372
  throw new StorageException("Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.");
377
373
  }
@@ -581,9 +577,7 @@ class FilesystemStorage extends AbstractStorage {
581
577
  }
582
578
  FilesystemStorage = __legacyDecorateClassTS([
583
579
  decorator.storage(),
584
- __legacyMetadataTS("design:paramtypes", [
585
- Object
586
- ])
580
+ __legacyMetadataTS("design:paramtypes", [])
587
581
  ], FilesystemStorage);
588
582
  export {
589
583
  decorator,
@@ -594,4 +588,4 @@ export {
594
588
  AbstractStorage
595
589
  };
596
590
 
597
- //# debugId=8442052D0CEFBD6864756E2164756E21
591
+ //# debugId=BCF914F353469B4C64756E2164756E21
package/dist/index.js.map CHANGED
@@ -5,11 +5,11 @@
5
5
  "import type { BunFile, S3File, S3Options } from \"bun\";\nimport type { IStorage } from \"./types\";\n\nexport abstract class AbstractStorage implements IStorage {\n protected client: Bun.S3Client | null = null;\n public abstract getOptions(): S3Options;\n protected abstract bucket: string;\n\n public setBucket(name: string): this {\n this.bucket = name;\n this.client = new Bun.S3Client(this.getOptions());\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const client = this.getClient();\n\n return (await client.list()).contents?.map((content) => content.key) || [];\n }\n\n public async clearBucket(): Promise<this> {\n const client = this.getClient();\n const keys = await this.list();\n\n for (const key of keys) {\n await client.delete(key);\n }\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const client = this.getClient();\n\n return await client.exists(key);\n }\n\n public async delete(key: string): Promise<void> {\n const client = this.getClient();\n\n await client.delete(key);\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.write(content);\n }\n\n public async getAsJson<T>(key: string): Promise<T> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const s3file: S3File = this.getS3File(key);\n\n return await s3file.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const s3file: S3File = this.getS3File(key);\n\n return s3file.stream();\n }\n\n protected getClient(): Bun.S3Client {\n if (!this.client) {\n this.client = new Bun.S3Client(this.getOptions());\n }\n\n return this.client;\n }\n\n protected getS3File(path: string): S3File {\n const client = this.getClient();\n\n return client.file(path);\n }\n}\n",
6
6
  "import { container, EContainerScope } from \"@ooneex/container\";\nimport type { StorageClassType } from \"./types\";\n\nexport const decorator = {\n storage: (scope: EContainerScope = EContainerScope.Singleton) => {\n return (target: StorageClassType): void => {\n container.add(target, scope);\n };\n },\n};\n",
7
7
  "import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class StorageException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"StorageException\";\n }\n}\n",
8
- "import type { BunFile, S3File } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\nimport type { IStorage } from \"./types\";\n\ntype BunnyRegion = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\ninterface BunnyFileInfo {\n Guid: string;\n StorageZoneName: string;\n Path: string;\n ObjectName: string;\n Length: number;\n LastChanged: string;\n ServerId: number;\n ArrayNumber: number;\n IsDirectory: boolean;\n UserId: string;\n ContentType: string;\n DateCreated: string;\n StorageZoneId: number;\n Checksum: string | null;\n ReplicatedZones: string | null;\n}\n\n@decorator.storage()\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly accessKey: string;\n private readonly storageZone: string;\n private readonly region: BunnyRegion;\n\n constructor(options?: {\n accessKey?: string;\n storageZone?: string;\n region?: BunnyRegion;\n }) {\n const accessKey = options?.accessKey ?? Bun.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = options?.storageZone ?? Bun.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = options?.region ?? (Bun.env.STORAGE_BUNNY_REGION as BunnyRegion | undefined);\n\n if (!accessKey) {\n throw new StorageException(\n \"Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.\",\n );\n }\n if (!storageZone) {\n throw new StorageException(\n \"Bunny storage zone is required. Please provide a storage zone either through the constructor options or set the STORAGE_BUNNY_STORAGE_ZONE environment variable.\",\n );\n }\n\n this.accessKey = accessKey;\n this.storageZone = storageZone;\n this.region = region ?? \"de\";\n }\n\n public setBucket(name: string): this {\n this.bucket = name;\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const path = this.bucket ? `${this.bucket}/` : \"\";\n const url = `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to list files: ${response.status} ${response.statusText}`, {\n status: response.status,\n path,\n });\n }\n\n const files: BunnyFileInfo[] = await response.json();\n\n return files.filter((file) => !file.IsDirectory).map((file) => file.ObjectName);\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n for (const key of keys) {\n await this.delete(key);\n }\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n return response.ok;\n }\n\n public async delete(key: string): Promise<void> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok && response.status !== 404) {\n throw new StorageException(`Failed to delete file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const url = this.buildFileUrl(key);\n\n let body: BodyInit;\n let contentLength: number;\n\n if (typeof content === \"string\") {\n body = content;\n contentLength = new TextEncoder().encode(content).length;\n } else if (content instanceof ArrayBuffer) {\n body = new Blob([content]);\n contentLength = content.byteLength;\n } else if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copiedArray = new Uint8Array(uint8Array.length);\n copiedArray.set(uint8Array);\n body = new Blob([copiedArray]);\n contentLength = content.byteLength;\n } else if (ArrayBuffer.isView(content)) {\n const arrayBuffer = content.buffer.slice(\n content.byteOffset,\n content.byteOffset + content.byteLength,\n ) as ArrayBuffer;\n body = new Blob([arrayBuffer]);\n contentLength = content.byteLength;\n } else if (content instanceof Blob) {\n body = content;\n contentLength = content.size;\n } else if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else {\n throw new StorageException(\"Unsupported content type for upload\", { key });\n }\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: {\n AccessKey: this.accessKey,\n \"Content-Type\": \"application/octet-stream\",\n },\n body,\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to upload file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return contentLength;\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as JSON: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as ArrayBuffer: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const url = this.buildFileUrl(key);\n\n const stream = new ReadableStream({\n start: async (controller) => {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n controller.error(\n new StorageException(`Failed to get file as stream: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n }),\n );\n return;\n }\n\n if (!response.body) {\n controller.error(new StorageException(\"Response body is null\", { key }));\n return;\n }\n\n const reader = response.body.getReader();\n\n const pump = async (): Promise<void> => {\n const { done, value } = await reader.read();\n\n if (done) {\n controller.close();\n return;\n }\n\n controller.enqueue(value);\n await pump();\n };\n\n await pump();\n },\n });\n\n return stream;\n }\n\n private getBaseUrl(): string {\n const regionEndpoints: Record<BunnyRegion, string> = {\n de: \"storage.bunnycdn.com\",\n uk: \"uk.storage.bunnycdn.com\",\n ny: \"ny.storage.bunnycdn.com\",\n la: \"la.storage.bunnycdn.com\",\n sg: \"sg.storage.bunnycdn.com\",\n se: \"se.storage.bunnycdn.com\",\n br: \"br.storage.bunnycdn.com\",\n jh: \"jh.storage.bunnycdn.com\",\n syd: \"syd.storage.bunnycdn.com\",\n };\n\n return `https://${regionEndpoints[this.region]}`;\n }\n\n private buildFileUrl(key: string): string {\n const path = this.bucket ? `${this.bucket}/${key}` : key;\n\n return `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n }\n}\n",
9
- "import type { S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class CloudflareStorage extends AbstractStorage {\n protected bucket: string;\n private readonly accessKey: string;\n private readonly secretKey: string;\n private readonly endpoint: string;\n private readonly region: string;\n\n constructor(options?: {\n accessKey?: string;\n secretKey?: string;\n endpoint?: string;\n region?: \"EEUR\" | \"WEUR\" | \"APAC\" | \"NAM\";\n }) {\n super();\n\n const accessKey = options?.accessKey || Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;\n const secretKey = options?.secretKey || Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;\n const endpoint = options?.endpoint || Bun.env.STORAGE_CLOUDFLARE_ENDPOINT;\n\n if (!accessKey) {\n throw new StorageException(\n \"Cloudflare access key is required. Please provide an access key either through the constructor options or set the STORAGE_CLOUDFLARE_ACCESS_KEY environment variable.\",\n );\n }\n if (!secretKey) {\n throw new StorageException(\n \"Cloudflare secret key is required. Please provide a secret key either through the constructor options or set the STORAGE_CLOUDFLARE_SECRET_KEY environment variable.\",\n );\n }\n if (!endpoint) {\n throw new StorageException(\n \"Cloudflare endpoint is required. Please provide an endpoint either through the constructor options or set the STORAGE_CLOUDFLARE_ENDPOINT environment variable.\",\n );\n }\n\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.endpoint = endpoint;\n this.region = options?.region || Bun.env.STORAGE_CLOUDFLARE_REGION || \"EEUR\";\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: this.accessKey,\n secretAccessKey: this.secretKey,\n endpoint: this.endpoint,\n bucket: this.bucket,\n region: this.region,\n };\n }\n}\n",
10
- "import { existsSync, mkdirSync } from \"node:fs\";\nimport { mkdir, readdir, rmdir, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class FilesystemStorage extends AbstractStorage {\n protected bucket: string;\n private readonly storagePath: string;\n\n constructor(options?: {\n storagePath?: string;\n }) {\n super();\n\n const basePath = options?.storagePath || Bun.env.FILESYSTEM_STORAGE_PATH;\n\n if (!basePath) {\n throw new StorageException(\n \"Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.\",\n );\n }\n\n this.storagePath = basePath;\n\n try {\n if (!existsSync(basePath)) {\n mkdirSync(basePath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create base storage directory at ${basePath}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: \"filesystem\",\n secretAccessKey: \"filesystem\",\n endpoint: this.storagePath,\n bucket: this.bucket,\n region: \"local\",\n };\n }\n\n private getBucketPath(): string {\n if (!this.bucket) {\n throw new StorageException(\"Bucket name is required. Please call setBucket() first.\");\n }\n return join(this.storagePath, this.bucket);\n }\n\n private getFilePath(key: string): string {\n return join(this.getBucketPath(), key);\n }\n\n public override setBucket(name: string): this {\n this.bucket = name;\n\n const bucketPath = this.getBucketPath();\n try {\n if (!existsSync(bucketPath)) {\n mkdirSync(bucketPath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create bucket directory at ${bucketPath}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n return this;\n }\n\n public override async list(): Promise<string[]> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return [];\n }\n\n try {\n const files = await this.listFilesRecursive(bucketPath, bucketPath);\n return files;\n } catch (error) {\n throw new StorageException(\n `Failed to list files in bucket: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private async listFilesRecursive(dir: string, baseDir: string): Promise<string[]> {\n const files: string[] = [];\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n const subFiles = await this.listFilesRecursive(fullPath, baseDir);\n files.push(...subFiles);\n } else {\n const relativePath = fullPath.substring(baseDir.length + 1);\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n public override async clearBucket(): Promise<this> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return this;\n }\n\n try {\n await this.removeDirectoryRecursive(bucketPath);\n await mkdir(bucketPath, { recursive: true });\n } catch (error) {\n throw new StorageException(`Failed to clear bucket: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return this;\n }\n\n private async removeDirectoryRecursive(dir: string): Promise<void> {\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n await this.removeDirectoryRecursive(fullPath);\n await rmdir(fullPath);\n } else {\n const file = Bun.file(fullPath);\n await file.delete();\n }\n }\n }\n\n public override async exists(key: string): Promise<boolean> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n return await file.exists();\n }\n\n public override async delete(key: string): Promise<void> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n return;\n }\n\n try {\n await file.delete();\n\n let parentDir = dirname(filePath);\n const bucketPath = this.getBucketPath();\n\n while (parentDir !== bucketPath && parentDir !== this.storagePath) {\n try {\n const entries = await readdir(parentDir);\n if (entries.length === 0) {\n await rmdir(parentDir);\n parentDir = dirname(parentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } catch (error) {\n throw new StorageException(\n `Failed to delete file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n return await this.put(key, file);\n }\n\n public override async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const filePath = this.getFilePath(key);\n const dir = dirname(filePath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n try {\n let bytesWritten: number;\n\n if (typeof content === \"string\") {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof ArrayBuffer) {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof SharedArrayBuffer) {\n const arrayBuffer = new ArrayBuffer(content.byteLength);\n new Uint8Array(arrayBuffer).set(new Uint8Array(content));\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Request) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Blob) {\n bytesWritten = await Bun.write(filePath, content);\n } else {\n const arrayBuffer = await (content as BunFile | S3File).arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n }\n\n return bytesWritten;\n } catch (error) {\n throw new StorageException(\n `Failed to write file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async getAsJson<T>(key: string): Promise<T> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n try {\n return await file.json();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as JSON: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n try {\n return await file.arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override getAsStream(key: string): ReadableStream {\n const filePath = this.getFilePath(key);\n\n if (!existsSync(filePath)) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n const file = Bun.file(filePath);\n\n try {\n return file.stream();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as stream: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n}\n"
8
+ "import type { BunFile, S3File } from \"bun\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\nimport type { IStorage } from \"./types\";\n\ntype BunnyRegion = \"de\" | \"uk\" | \"ny\" | \"la\" | \"sg\" | \"se\" | \"br\" | \"jh\" | \"syd\";\n\ninterface BunnyFileInfo {\n Guid: string;\n StorageZoneName: string;\n Path: string;\n ObjectName: string;\n Length: number;\n LastChanged: string;\n ServerId: number;\n ArrayNumber: number;\n IsDirectory: boolean;\n UserId: string;\n ContentType: string;\n DateCreated: string;\n StorageZoneId: number;\n Checksum: string | null;\n ReplicatedZones: string | null;\n}\n\n@decorator.storage()\nexport class BunnyStorage implements IStorage {\n private bucket = \"\";\n private readonly accessKey: string;\n private readonly storageZone: string;\n private readonly region: BunnyRegion;\n\n constructor() {\n const accessKey = Bun.env.STORAGE_BUNNY_ACCESS_KEY;\n const storageZone = Bun.env.STORAGE_BUNNY_STORAGE_ZONE;\n const region = Bun.env.STORAGE_BUNNY_REGION as BunnyRegion | undefined;\n\n if (!accessKey) {\n throw new StorageException(\n \"Bunny access key is required. Please provide an access key either through the constructor options or set the STORAGE_BUNNY_ACCESS_KEY environment variable.\",\n );\n }\n if (!storageZone) {\n throw new StorageException(\n \"Bunny storage zone is required. Please provide a storage zone either through the constructor options or set the STORAGE_BUNNY_STORAGE_ZONE environment variable.\",\n );\n }\n\n this.accessKey = accessKey;\n this.storageZone = storageZone;\n this.region = region ?? \"de\";\n }\n\n public setBucket(name: string): this {\n this.bucket = name;\n\n return this;\n }\n\n public async list(): Promise<string[]> {\n const path = this.bucket ? `${this.bucket}/` : \"\";\n const url = `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n accept: \"application/json\",\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to list files: ${response.status} ${response.statusText}`, {\n status: response.status,\n path,\n });\n }\n\n const files: BunnyFileInfo[] = await response.json();\n\n return files.filter((file) => !file.IsDirectory).map((file) => file.ObjectName);\n }\n\n public async clearBucket(): Promise<this> {\n const keys = await this.list();\n\n for (const key of keys) {\n await this.delete(key);\n }\n\n return this;\n }\n\n public async exists(key: string): Promise<boolean> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n return response.ok;\n }\n\n public async delete(key: string): Promise<void> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok && response.status !== 404) {\n throw new StorageException(`Failed to delete file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n }\n\n public async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n\n return await this.put(key, file);\n }\n\n public async put(\n key: string,\n content: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const url = this.buildFileUrl(key);\n\n let body: BodyInit;\n let contentLength: number;\n\n if (typeof content === \"string\") {\n body = content;\n contentLength = new TextEncoder().encode(content).length;\n } else if (content instanceof ArrayBuffer) {\n body = new Blob([content]);\n contentLength = content.byteLength;\n } else if (content instanceof SharedArrayBuffer) {\n const uint8Array = new Uint8Array(content);\n const copiedArray = new Uint8Array(uint8Array.length);\n copiedArray.set(uint8Array);\n body = new Blob([copiedArray]);\n contentLength = content.byteLength;\n } else if (ArrayBuffer.isView(content)) {\n const arrayBuffer = content.buffer.slice(\n content.byteOffset,\n content.byteOffset + content.byteLength,\n ) as ArrayBuffer;\n body = new Blob([arrayBuffer]);\n contentLength = content.byteLength;\n } else if (content instanceof Blob) {\n body = content;\n contentLength = content.size;\n } else if (content instanceof Request || content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else if (typeof content === \"object\" && content !== null && \"arrayBuffer\" in content) {\n const fileContent = content as BunFile | S3File;\n const arrayBuffer = await fileContent.arrayBuffer();\n body = new Blob([arrayBuffer]);\n contentLength = arrayBuffer.byteLength;\n } else {\n throw new StorageException(\"Unsupported content type for upload\", { key });\n }\n\n const response = await fetch(url, {\n method: \"PUT\",\n headers: {\n AccessKey: this.accessKey,\n \"Content-Type\": \"application/octet-stream\",\n },\n body,\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to upload file: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return contentLength;\n }\n\n public async getAsJson<T = unknown>(key: string): Promise<T> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as JSON: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.json();\n }\n\n public async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const url = this.buildFileUrl(key);\n\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n throw new StorageException(`Failed to get file as ArrayBuffer: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n });\n }\n\n return await response.arrayBuffer();\n }\n\n public getAsStream(key: string): ReadableStream {\n const url = this.buildFileUrl(key);\n\n const stream = new ReadableStream({\n start: async (controller) => {\n const response = await fetch(url, {\n method: \"GET\",\n headers: {\n AccessKey: this.accessKey,\n },\n });\n\n if (!response.ok) {\n controller.error(\n new StorageException(`Failed to get file as stream: ${response.status} ${response.statusText}`, {\n status: response.status,\n key,\n }),\n );\n return;\n }\n\n if (!response.body) {\n controller.error(new StorageException(\"Response body is null\", { key }));\n return;\n }\n\n const reader = response.body.getReader();\n\n const pump = async (): Promise<void> => {\n const { done, value } = await reader.read();\n\n if (done) {\n controller.close();\n return;\n }\n\n controller.enqueue(value);\n await pump();\n };\n\n await pump();\n },\n });\n\n return stream;\n }\n\n private getBaseUrl(): string {\n const regionEndpoints: Record<BunnyRegion, string> = {\n de: \"storage.bunnycdn.com\",\n uk: \"uk.storage.bunnycdn.com\",\n ny: \"ny.storage.bunnycdn.com\",\n la: \"la.storage.bunnycdn.com\",\n sg: \"sg.storage.bunnycdn.com\",\n se: \"se.storage.bunnycdn.com\",\n br: \"br.storage.bunnycdn.com\",\n jh: \"jh.storage.bunnycdn.com\",\n syd: \"syd.storage.bunnycdn.com\",\n };\n\n return `https://${regionEndpoints[this.region]}`;\n }\n\n private buildFileUrl(key: string): string {\n const path = this.bucket ? `${this.bucket}/${key}` : key;\n\n return `${this.getBaseUrl()}/${this.storageZone}/${path}`;\n }\n}\n",
9
+ "import type { S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class CloudflareStorage extends AbstractStorage {\n protected bucket: string;\n private readonly accessKey: string;\n private readonly secretKey: string;\n private readonly endpoint: string;\n private readonly region: string;\n\n constructor() {\n super();\n\n const accessKey = Bun.env.STORAGE_CLOUDFLARE_ACCESS_KEY;\n const secretKey = Bun.env.STORAGE_CLOUDFLARE_SECRET_KEY;\n const endpoint = Bun.env.STORAGE_CLOUDFLARE_ENDPOINT;\n\n if (!accessKey) {\n throw new StorageException(\n \"Cloudflare access key is required. Please provide an access key either through the constructor options or set the STORAGE_CLOUDFLARE_ACCESS_KEY environment variable.\",\n );\n }\n if (!secretKey) {\n throw new StorageException(\n \"Cloudflare secret key is required. Please provide a secret key either through the constructor options or set the STORAGE_CLOUDFLARE_SECRET_KEY environment variable.\",\n );\n }\n if (!endpoint) {\n throw new StorageException(\n \"Cloudflare endpoint is required. Please provide an endpoint either through the constructor options or set the STORAGE_CLOUDFLARE_ENDPOINT environment variable.\",\n );\n }\n\n this.accessKey = accessKey;\n this.secretKey = secretKey;\n this.endpoint = endpoint;\n this.region = Bun.env.STORAGE_CLOUDFLARE_REGION || \"EEUR\";\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: this.accessKey,\n secretAccessKey: this.secretKey,\n endpoint: this.endpoint,\n bucket: this.bucket,\n region: this.region,\n };\n }\n}\n",
10
+ "import { existsSync, mkdirSync } from \"node:fs\";\nimport { mkdir, readdir, rmdir, stat } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport type { BunFile, S3File, S3Options } from \"bun\";\nimport { AbstractStorage } from \"./AbstractStorage\";\nimport { decorator } from \"./decorators\";\nimport { StorageException } from \"./StorageException\";\n\n@decorator.storage()\nexport class FilesystemStorage extends AbstractStorage {\n protected bucket: string;\n private readonly storagePath: string;\n\n constructor() {\n super();\n\n const basePath = Bun.env.FILESYSTEM_STORAGE_PATH;\n\n if (!basePath) {\n throw new StorageException(\n \"Base path is required. Please provide a base path either through the constructor options or set the FILESYSTEM_STORAGE_PATH environment variable.\",\n );\n }\n\n this.storagePath = basePath;\n\n try {\n if (!existsSync(basePath)) {\n mkdirSync(basePath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create base storage directory at ${basePath}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public getOptions(): S3Options {\n return {\n accessKeyId: \"filesystem\",\n secretAccessKey: \"filesystem\",\n endpoint: this.storagePath,\n bucket: this.bucket,\n region: \"local\",\n };\n }\n\n private getBucketPath(): string {\n if (!this.bucket) {\n throw new StorageException(\"Bucket name is required. Please call setBucket() first.\");\n }\n return join(this.storagePath, this.bucket);\n }\n\n private getFilePath(key: string): string {\n return join(this.getBucketPath(), key);\n }\n\n public override setBucket(name: string): this {\n this.bucket = name;\n\n const bucketPath = this.getBucketPath();\n try {\n if (!existsSync(bucketPath)) {\n mkdirSync(bucketPath, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create bucket directory at ${bucketPath}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n return this;\n }\n\n public override async list(): Promise<string[]> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return [];\n }\n\n try {\n const files = await this.listFilesRecursive(bucketPath, bucketPath);\n return files;\n } catch (error) {\n throw new StorageException(\n `Failed to list files in bucket: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n private async listFilesRecursive(dir: string, baseDir: string): Promise<string[]> {\n const files: string[] = [];\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n const subFiles = await this.listFilesRecursive(fullPath, baseDir);\n files.push(...subFiles);\n } else {\n const relativePath = fullPath.substring(baseDir.length + 1);\n files.push(relativePath);\n }\n }\n\n return files;\n }\n\n public override async clearBucket(): Promise<this> {\n const bucketPath = this.getBucketPath();\n\n if (!existsSync(bucketPath)) {\n return this;\n }\n\n try {\n await this.removeDirectoryRecursive(bucketPath);\n await mkdir(bucketPath, { recursive: true });\n } catch (error) {\n throw new StorageException(`Failed to clear bucket: ${error instanceof Error ? error.message : String(error)}`);\n }\n\n return this;\n }\n\n private async removeDirectoryRecursive(dir: string): Promise<void> {\n const entries = await readdir(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stats = await stat(fullPath);\n\n if (stats.isDirectory()) {\n await this.removeDirectoryRecursive(fullPath);\n await rmdir(fullPath);\n } else {\n const file = Bun.file(fullPath);\n await file.delete();\n }\n }\n }\n\n public override async exists(key: string): Promise<boolean> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n return await file.exists();\n }\n\n public override async delete(key: string): Promise<void> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n return;\n }\n\n try {\n await file.delete();\n\n let parentDir = dirname(filePath);\n const bucketPath = this.getBucketPath();\n\n while (parentDir !== bucketPath && parentDir !== this.storagePath) {\n try {\n const entries = await readdir(parentDir);\n if (entries.length === 0) {\n await rmdir(parentDir);\n parentDir = dirname(parentDir);\n } else {\n break;\n }\n } catch {\n break;\n }\n }\n } catch (error) {\n throw new StorageException(\n `Failed to delete file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async putFile(key: string, localPath: string): Promise<number> {\n const file = Bun.file(localPath);\n return await this.put(key, file);\n }\n\n public override async put(\n key: string,\n content: string | ArrayBuffer | SharedArrayBuffer | Request | Response | BunFile | S3File | Blob,\n ): Promise<number> {\n const filePath = this.getFilePath(key);\n const dir = dirname(filePath);\n\n try {\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n } catch (error) {\n throw new StorageException(\n `Failed to create directory ${dir}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n\n try {\n let bytesWritten: number;\n\n if (typeof content === \"string\") {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof ArrayBuffer) {\n bytesWritten = await Bun.write(filePath, content);\n } else if (content instanceof SharedArrayBuffer) {\n const arrayBuffer = new ArrayBuffer(content.byteLength);\n new Uint8Array(arrayBuffer).set(new Uint8Array(content));\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Request) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Response) {\n const arrayBuffer = await content.arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n } else if (content instanceof Blob) {\n bytesWritten = await Bun.write(filePath, content);\n } else {\n const arrayBuffer = await (content as BunFile | S3File).arrayBuffer();\n bytesWritten = await Bun.write(filePath, arrayBuffer);\n }\n\n return bytesWritten;\n } catch (error) {\n throw new StorageException(\n `Failed to write file ${key}: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async getAsJson<T>(key: string): Promise<T> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n try {\n return await file.json();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as JSON: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override async getAsArrayBuffer(key: string): Promise<ArrayBuffer> {\n const filePath = this.getFilePath(key);\n const file = Bun.file(filePath);\n\n if (!(await file.exists())) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n try {\n return await file.arrayBuffer();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as ArrayBuffer: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n\n public override getAsStream(key: string): ReadableStream {\n const filePath = this.getFilePath(key);\n\n if (!existsSync(filePath)) {\n throw new StorageException(`File ${key} does not exist`);\n }\n\n const file = Bun.file(filePath);\n\n try {\n return file.stream();\n } catch (error) {\n throw new StorageException(\n `Failed to read file ${key} as stream: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n }\n}\n"
11
11
  ],
12
- "mappings": "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",
13
- "debugId": "8442052D0CEFBD6864756E2164756E21",
12
+ "mappings": "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",
13
+ "debugId": "BCF914F353469B4C64756E2164756E21",
14
14
  "names": []
15
15
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ooneex/storage",
3
3
  "description": "File and object storage abstraction layer with support for local filesystem and cloud storage providers",
4
- "version": "0.0.14",
4
+ "version": "0.0.15",
5
5
  "type": "module",
6
6
  "files": [
7
7
  "dist",