diff --git a/src/@types/commands.ts b/src/@types/commands.ts index cf2069824..290cc29f5 100644 --- a/src/@types/commands.ts +++ b/src/@types/commands.ts @@ -14,7 +14,8 @@ import { FtpFileObject, IpfsFileObject, UrlFileObject, - BaseFileObject + BaseFileObject, + S3FileObject } from './fileObject' export interface Command { @@ -69,7 +70,7 @@ export interface FileInfoCommand extends Command { did?: string serviceId?: string fileIndex?: number - file?: UrlFileObject | ArweaveFileObject | IpfsFileObject | FtpFileObject + file?: UrlFileObject | ArweaveFileObject | IpfsFileObject | FtpFileObject | S3FileObject checksum?: boolean } // group these 2 diff --git a/src/@types/fileObject.ts b/src/@types/fileObject.ts index c9526fd74..7a6f3a909 100644 --- a/src/@types/fileObject.ts +++ b/src/@types/fileObject.ts @@ -94,4 +94,5 @@ export interface FileInfoHttpRequest { url?: string transactionId?: string serviceId?: string + s3Access?: S3Object } diff --git a/src/components/httpRoutes/fileInfo.ts b/src/components/httpRoutes/fileInfo.ts index ee6df98d7..14faf611e 100644 --- a/src/components/httpRoutes/fileInfo.ts +++ b/src/components/httpRoutes/fileInfo.ts @@ -5,7 +5,8 @@ import { FileObjectType, FtpFileObject, IpfsFileObject, - UrlFileObject + UrlFileObject, + S3FileObject } from '../../@types/fileObject.js' import { PROTOCOL_COMMANDS, SERVICES_API_BASE_PATH } from '../../utils/constants.js' import { FileInfoHandler } from '../core/handler/fileInfoHandler.js' @@ -29,6 +30,7 @@ const validateFileInfoRequest = (req: FileInfoHttpRequest): boolean => { if (req.type === 'url' && !req.url) return false // 'url' is required if 'type' is 'url' if (req.type === 'ftp' && !req.url) return false // 'url' is required if 'type' is 'ftp' if (req.type === 'arweave' && !req.transactionId) return false // 'transactionId' is required if 'type' is 'arweave' + if (req.type === 's3' && !req.s3Access) return false // 's3Access' is required if 'type' is 's3' if (!req.type && !req.serviceId) return false // 'serviceId' is required if 'type' is not provided return true @@ -48,7 +50,12 @@ fileInfoRoute.post( try { // Retrieve the file info - let fileObject: UrlFileObject | IpfsFileObject | ArweaveFileObject | FtpFileObject + let fileObject: + | UrlFileObject + | IpfsFileObject + | ArweaveFileObject + | FtpFileObject + | S3FileObject let fileInfoTask: FileInfoCommand if (fileInfoReq.did && fileInfoReq.serviceId) { @@ -105,6 +112,17 @@ fileInfoRoute.post( type: FileObjectType.FTP, caller: req.caller } + } else if (fileInfoReq.type === 's3' && fileInfoReq.s3Access) { + fileObject = { + type: 's3', + s3Access: fileInfoReq.s3Access + } as S3FileObject + fileInfoTask = { + command: PROTOCOL_COMMANDS.FILE_INFO, + file: fileObject, + type: FileObjectType.S3, + caller: req.caller + } } const response = await new FileInfoHandler(req.oceanNode).handle(fileInfoTask) if (response.stream) {