Storage#

The Fleek Platform SDK allows you to interface with the storage service to store files in a decentralized manner. Our service supports IPFS as our main storage protocol, complemented by Arweave and Filecoin as a backup layer. This approach ensures a high-performing and highly available service. Filecoin acts as the default backup layer, but modifications can be implemented in the storage settings.

Methods#

Here is a list of the available methods for the Fleek Platform SDK Storage Service:

Method                      Description
-----------------------------------------------------------------------------------------------------------------
uploadFile                  Upload a file to IPFS
uploadDirectory             Upload a directory to IPFS
uploadVirtualDirectory      Upload a virtual directory to IPFS
get                         Get a file by CID
getByFilename               Get a file by Filename
list                        List files
delete                      Delete a file by CID

UploadFile#

The uploadFile is an asynchronous function designed to upload a file to Fleek Platform Storage Service.

Function signature#

async ({ file, onUploadProgress }: UploadRawFileArgs): Promise<UploadPinResponse>

Parameters#

The file parameter is an instance of IpfsFile, a type that represents the file to be uploaded.

type UploadRawFileArgs = {
  file: FileLike;
  // A callback or handler for the upload progress
  onUploadProgress?: (uploadProgress: UploadProgress) => void;
};
type UploadProgress = {
  loadedSize: number;
  totalSize: number;
};
type FileLike = {
  name: string;
  stream: () => ReadableStream;
};

Returns#

type UploadPinResponse = {
  pin: {
    cid: string;
    size: number;
  };
  duplicate: boolean;
};

Usage example#

import { FleekSdk, PersonalAccessTokenService } from '@fleek-platform/sdk/node';

// The Fleek SDK should be authenticated
// with a valid Project ID
const accessTokenService = new PersonalAccessTokenService({
  personalAccessToken: '<PAT>',
  projectId: '<PROJECT-ID>',
});

const fleekSdk = new FleekSdk({
  accessTokenService,
});

const result = await fleekSdk.storage().uploadFile({
  file,
  onUploadProgress,
});

const onUploadProgress = ({ loadedSize, totalSize }: UploadProgress) => {
  if (loadedSize > 0) {
    const currentTime = DateTime.now();
    const elapsedMillis = currentTime.diff(startedTime).as('milliseconds');

    const bytesPerSecond = loadedSize / (elapsedMillis / 1000);
    const remainingBytes = totalSize - loadedSize;
    const remainingSeconds = remainingBytes / bytesPerSecond;
    const remainingTime = remainingSeconds * 1000;

    // Does something with remainingTime
  }
};

list#

The list is an asynchronous function designed to get a list of files uploaded to a projects storage.

Function signature#

async (): Promise<StoragePin[]>

Parameters#

Not required.

Returns#

type StoragePin = {
  cid?: string;
  size?: number;
  filename?: string;
  filecoinDealIds?: string;
  arweavePin?: ArweavePin;
  arweaveId?: string;
};
type ArweavePin = {
  cid: string;
  bundlrId: string;
  price: runtime.Decimal;
  createdAt: Date;
};

Usage example#

import { FleekSdk, PersonalAccessTokenService } from '@fleek-platform/sdk/node';

// The Fleek SDK should be authenticated
// with a valid Project ID
const accessTokenService = new PersonalAccessTokenService({
  personalAccessToken: '<PAT>',
  projectId: '<PROJECT-ID>',
});

const fleekSdk = new FleekSdk({
  accessTokenService,
});

const result = await fleekSdk.storage().list();

Get#

The get is an asynchronous function to retrieve a file by it’s CID.

Function Signature#

async ({ cid }: GetPinArgs): Promise<StoragePin>

Parameters#

type GetPinArgs = {
  cid: string;
};

Returns#

type StoragePin = {
  cid?: string;
  size?: number;
  filename?: string;
  filecoinDealIds?: string;
  arweavePin?: ArweavePin;
  arweaveId?: string;
};

Usage Example#

import { FleekSdk, PersonalAccessTokenService } from '@fleek-platform/sdk/node';

// The Fleek SDK should be authenticated
// with a valid Project ID
const accessTokenService = new PersonalAccessTokenService({
  personalAccessToken: '<PAT>',
  projectId: '<PROJECT-ID>',
});

const fleekSdk = new FleekSdk({
  accessTokenService,
});

const res = await fleekSdk.storage().get({
  cid: '<CID>',
});

GetByFilename#

The getByFilename is an asynchronous function to retrieve a file by it’s name and extension.

Function Signature#

async ({ filename, extension }: GetPinByFilenameArgs): Promise<StoragePin[]>

Parameters#

type GetPinByFilenameArgs = {
  filename: string;
  extension: string;
};

Returns#

type StoragePin = {
  cid?: string;
  size?: number;
  filename?: string;
  filecoinDealIds?: string;
  arweavePin?: ArweavePin;
  arweaveId?: string;
}[];

Usage Example#

import { FleekSdk, PersonalAccessTokenService } from '@fleek-platform/sdk/node';

// The Fleek SDK should be authenticated
// with a valid Project ID
const accessTokenService = new PersonalAccessTokenService({
  personalAccessToken: '<PAT>',
  projectId: '<PROJECT-ID>',
});

const fleekSdk = new FleekSdk({
  accessTokenService,
});

const res = await fleekSdk.storage().getByFilename({
  filename: '<FILENAME>',
  extension: '<EXTENSION>',
});

Delete#

The delete is an asynchronous function designed to delete a storage file by it’s CID.

Function signature#

async ({ cid }: DeletePinArgs)

Parameters#

type DeletePinArgs = {
  cid: string;
};

Returns#

type Response = {
  status: number;
  // TODO: provide type
  body: Record<string, unknown>;
};

Usage example#

import { FleekSdk, PersonalAccessTokenService } from '@fleek-platform/sdk/node';

// The Fleek SDK should be authenticated
// with a valid Project ID
const accessTokenService = new PersonalAccessTokenService({
  personalAccessToken: '<PAT>',
  projectId: '<PROJECT-ID>',
});

const fleekSdk = new FleekSdk({
  accessTokenService,
});

const result = await fleekSdk.storage().delete();

UploadDirectory#

Upload a directory to Fleek Platform Storage IPFS.

Function signature#

async ({ path, options, onUploadProgress }: UploadDirectoryArgs): Promise<UploadPinResponse>

Parameters#

type UploadDirectoryArgs = {
  path: string;
  options?: UploadDirectoryOptions;
  onUploadProgress?: (uploadProgress: UploadProgress) => void;
};

Returns#

type UploadPinResponse = {
  pin: {
    cid: string;
    size: number;
  };
  duplicate: boolean;
};

UploadVirtualDirectory#

Upload a virtual directory to Fleek Platform Storage IPFS.

Function signature#

async ({
    files,
    directoryName,
    onUploadProgress,
  }: UploadVirtualDirectoryArgs): Promise<UploadPinResponse>

Parameters#

type UploadVirtualDirectoryArgs = {
  files: FileLike[];
  directoryName: string;
  onUploadProgress?: (uploadProgress: UploadProgress) => void;
};
type FileLike = {
  name: string;
  stream: () => ReadableStream;
};

Returns#

type UploadPinResponse = {
  pin: {
    cid: string;
    size: number;
  };
  duplicate: boolean;
};