diff --git a/src/index.ts b/src/index.ts index 09b5ad2..3f9b5d5 100644 --- a/src/index.ts +++ b/src/index.ts @@ -21,6 +21,7 @@ import { uploadFile, uploadMultipleFiles, listObjects, + listObjectsAndSizes, redeemRent, migrate, } from "./methods"; @@ -36,6 +37,7 @@ import { StorageAccount, StorageAccountResponse, ListObjectsResponse, + ListObjectsAndSizesResponse, StorageAccountInfo, } from "./types"; interface ShadowDrive { @@ -68,6 +70,9 @@ interface ShadowDrive { getStorageAcc?(key: web3.PublicKey): Promise; getStorageAccs?(): Promise; listObjects(key: web3.PublicKey): Promise; + listObjectsAndSizes( + key: web3.PublicKey + ): Promise; makeStorageImmutable( key: web3.PublicKey, version: ShadowDriveVersion @@ -129,6 +134,7 @@ export class ShdwDrive implements ShadowDrive { getStorageAccount = getStorageAcc; getStorageAccounts = getStorageAccs; listObjects = listObjects; + listObjectsAndSizes = listObjectsAndSizes; makeStorageImmutable = makeStorageImmutable; reduceStorage = reduceStorage; /** diff --git a/src/methods/index.ts b/src/methods/index.ts index a785dba..5c55d4d 100644 --- a/src/methods/index.ts +++ b/src/methods/index.ts @@ -7,6 +7,7 @@ import editFile from "./edit-file"; import getStorageAcc from "./get-storage-account"; import getStorageAccs from "./get-storage-accounts"; import listObjects from "./list-objects"; +import listObjectsAndSizes from "./list-objects-and-sizes"; import makeStorageImmutable from "./make-storage-immutable"; import reduceStorage from "./reduce-storage"; import cancelDeleteFile from "./cancel-delete-file"; @@ -25,6 +26,7 @@ export { getStorageAcc, getStorageAccs, listObjects, + listObjectsAndSizes, makeStorageImmutable, reduceStorage, cancelDeleteFile, diff --git a/src/methods/list-objects-and-sizes.ts b/src/methods/list-objects-and-sizes.ts new file mode 100644 index 0000000..c914e7a --- /dev/null +++ b/src/methods/list-objects-and-sizes.ts @@ -0,0 +1,17 @@ +import { PublicKey } from "@solana/web3.js"; +import fetch from "cross-fetch"; + +import { ListObjectsAndSizesResponse } from "../types"; +import { SHDW_DRIVE_ENDPOINT } from "../utils/common"; + +export default function listObjectsAndSizes( + storageAccount: PublicKey +): Promise { + return fetch(`${SHDW_DRIVE_ENDPOINT}/list-objects-and-sizes`, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ storageAccount: storageAccount.toBase58() }), + }).then((res) => res.json()); +} diff --git a/src/types/index.ts b/src/types/index.ts index 4ac7f88..89cac90 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,7 +1,7 @@ import * as anchor from "@project-serum/anchor"; -import { PublicKey, Transaction } from "@solana/web3.js"; +import { PublicKey } from "@solana/web3.js"; -export type ShadowDriveVersion = 'v1' | 'v2' +export type ShadowDriveVersion = "v1" | "v2"; export type CreateStorageResponse = { shdw_bucket: string; @@ -38,6 +38,16 @@ export type ListObjectsResponse = { keys: string[]; }; +export type ListObjectFileDetails = { + file_name: string; + size: number | bigint; + last_modified: string | Date; +}; + +export type ListObjectsAndSizesResponse = { + files: ListObjectFileDetails[]; +}; + export type StorageAccountResponse = { publicKey: anchor.web3.PublicKey; account: StorageAccount;