From ab5ec519573834689073ba7f16753a2c7d439f19 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 14:23:35 +0530 Subject: [PATCH 1/2] refactor(core): rename getStream to getAsStream and implement S3 stream retrieval - Updated Local and S3Storage drivers to rename the method getStream to getAsStream for consistency. - Implemented the getAsStream method in S3Storage to retrieve file streams from S3, including error handling for better reliability. --- packages/core/lib/storage/drivers/local.ts | 2 +- .../core/lib/storage/drivers/s3Storage.ts | 21 +++++++++++++++++-- .../lib/storage/interfaces/storageDriver.ts | 6 ++++++ 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/packages/core/lib/storage/drivers/local.ts b/packages/core/lib/storage/drivers/local.ts index 163c506..7bb7daa 100644 --- a/packages/core/lib/storage/drivers/local.ts +++ b/packages/core/lib/storage/drivers/local.ts @@ -122,7 +122,7 @@ export class Local implements StorageDriver { return false; } - getStream(filePath: string): ReadStream { + getAsStream(filePath: string): ReadStream { return createReadStream(join(this.config.basePath || '', filePath)); } diff --git a/packages/core/lib/storage/drivers/s3Storage.ts b/packages/core/lib/storage/drivers/s3Storage.ts index 76a39f5..bf5012a 100644 --- a/packages/core/lib/storage/drivers/s3Storage.ts +++ b/packages/core/lib/storage/drivers/s3Storage.ts @@ -28,8 +28,25 @@ export class S3Storage implements StorageDriver { this.initialiseModules(); } - getStream(filePath: string): ReadStream { - throw new Error('Method not implemented.'); + getAsStream(filePath: string): ReadStream { + this.initialiseModules(); + + try { + const command = new this.AWS.GetObjectCommand({ + Bucket: this.config.bucket, + Key: this.getPath(filePath), + }); + + const response = this.client.send(command); + return response.Body as ReadStream; + } catch (error) { + if (this.shouldThrowError()) { + throw new CannotPerformFileOpException( + `Cannot get stream for file ${filePath}: ${error['message']}`, + ); + } + return null; + } } listDir(path: string): Promise> { diff --git a/packages/core/lib/storage/interfaces/storageDriver.ts b/packages/core/lib/storage/interfaces/storageDriver.ts index 263132d..5124623 100644 --- a/packages/core/lib/storage/interfaces/storageDriver.ts +++ b/packages/core/lib/storage/interfaces/storageDriver.ts @@ -1,3 +1,4 @@ +import { ReadStream } from 'fs-extra'; import { StorageDriver$GetFileResponse, StorageDriver$FileMetadataResponse, @@ -136,6 +137,11 @@ export interface StorageDriver { */ getAsJson(path: string, throwError: boolean): Promise>; + /** + * Read file as stream + */ + getAsStream(path: string): ReadStream; + temporaryUrl( path: string, ttlInMins: number, From e0aa4ff983a2e689da67bf6539b5d18be05bf4a9 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Jun 2025 14:24:47 +0530 Subject: [PATCH 2/2] chore(core): bump version to 0.1.61 --- packages/core/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core/package.json b/packages/core/package.json index 988ccfc..b6ac472 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@intentjs/core", - "version": "0.1.60", + "version": "0.1.61", "description": "Core module for Intent", "repository": { "type": "git",