@keybittech/awayto
Version:
Deploy a fully-featured application in about 10 minutes that is primed for quick development. Do business, impress a client with a quick demo, finish your poc with time to spare; all easily achievable with Awayto.
74 lines (66 loc) • 2.49 kB
text/typescript
import { useState, useEffect } from 'react';
import { create } from 'ipfs-core';
import { AWSS3FileStoreStrategy, IPFSFileStoreStrategy, FileSystemFileStoreStrategy, FileStoreStrategy, FileStoreStrategies, FileStoreContext } from 'awayto';
import { useCognitoUser } from './useCognitoUser';
import { S3Client } from '@aws-sdk/client-s3';
const {
REACT_APP_AWS_REGION: Region,
REACT_APP_AWAYTO_ID: AwaytoId
} = process.env as { [prop: string]: string };
/**
* `useFileStore` is used to access various types of pre-determined file stores. All stores allow CRUD operations for user-bound files. Internally default instantiates {@link AWSS3FileStoreStrategy}, but you can also pass a {@link FileStoreStrategies} to `useFileStore` for other supported stores.
*
* ```
* import { useFileStore } from 'awayto';
*
* const files = useFileStore();
*
* const file: File = ....
* const fileName: string = '...';
*
* // Make sure the filestore has connected
* if (files)
* await files.post(file, fileName)
*
* ```
*
* @category Hooks
*/
export const useFileStore = (strategyName: FileStoreStrategies | void): FileStoreContext | undefined => {
if (!strategyName)
strategyName = FileStoreStrategies.AWS_S3;
const [fileStore, setFileStore] = useState<FileStoreContext>();
const cognitoUser = useCognitoUser();
let strategy: FileStoreStrategy;
useEffect(() => {
async function setup() {
if (!strategy) {
switch (strategyName) {
case FileStoreStrategies.AWS_S3: {
if (!cognitoUser.signInUserSession) {
throw 'No cognito user.';
}
const client = new S3Client({
region: Region,
apiVersion: '2006-03-01',
credentials: cognitoUser.credentials
})
strategy = new AWSS3FileStoreStrategy(AwaytoId, cognitoUser.credentials.identityId, client);
break;
}
case FileStoreStrategies.IPFS: {
const client = await create();
strategy = new IPFSFileStoreStrategy(client);
break;
}
default:
strategy = new FileSystemFileStoreStrategy();
break;
}
setFileStore(new FileStoreContext(strategy));
}
}
void setup();
}, [strategyName == FileStoreStrategies.AWS_S3 && cognitoUser.signInUserSession])
return fileStore;
}