Create void-cat/api package

This commit is contained in:
Kieran 2023-05-22 12:53:44 +01:00
parent b46cd39849
commit 596f141323
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
84 changed files with 397 additions and 413 deletions

View File

@ -72,7 +72,7 @@
<Target Name="IncludeBuildFiles" AfterTargets="ComputeFilesToPublish">
<ItemGroup>
<_CopyItems Include="$(SpaRoot)build\**\*.*" />
<_CopyItems Include="$(SpaRoot)src\app\build\**\*.*" />
</ItemGroup>
<Copy SourceFiles="@(_CopyItems)" DestinationFolder="$(PublishDir)wwwroot\%(RecursiveDir)" />
</Target>

View File

@ -7,7 +7,7 @@
},
"AllowedHosts": "*",
"Settings": {
"SiteUrl": "http://localhost:7195",
"SiteUrl": "https://localhost:7195",
"DataDirectory": "./data",
"CorsOrigins": [
"http://localhost:3000"

View File

@ -1,58 +1,9 @@
{
"name": "spa",
"version": "0.1.0",
"private": true,
"proxy": "http://localhost:7195",
"dependencies": {
"@hcaptcha/react-hcaptcha": "^1.1.1",
"@reduxjs/toolkit": "^1.7.2",
"@types/node": "^18.16.3",
"@types/qrcode.react": "^1.0.2",
"@types/react": "^18.2.0",
"@types/react-dom": "^18.2.1",
"@types/sjcl": "^1.0.30",
"moment": "^2.29.4",
"qrcode.react": "^1.0.1",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-helmet": "^6.1.0",
"react-redux": "^7.2.6",
"react-router-dom": "^6.2.1",
"react-scripts": "5.0.0",
"recharts": "^2.1.10",
"sjcl": "^1.0.8",
"typescript": "^5.0.4"
},
"devDependencies": {
"@craco/craco": "^6.4.5",
"@types/preval.macro": "^3.0.0",
"@types/react-helmet": "^6.1.6",
"cra-bundle-analyzer": "^0.1.1",
"http-proxy-middleware": "^2.0.6",
"preval.macro": "^5.0.0"
},
"workspaces": [
"src/*"
],
"scripts": {
"start": "craco start",
"build": "craco build",
"test": "craco test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"build": "yarn workspace @void-cat/api build && yarn workspace @void-cat/app build"
}
}

View File

@ -1,8 +1,7 @@
import {VoidUploadResult} from "./index";
import sjcl from "sjcl";
import {sjclcodec} from "./codecBytes";
import {buf2hex} from "../Util";
import {buf2hex} from "./Util";
/**
* Generic upload state
*/

View File

@ -0,0 +1,3 @@
export function buf2hex(buffer: number[] | ArrayBuffer) {
return [...new Uint8Array(buffer)].map(x => x.toString(16).padStart(2, '0')).join('');
}

View File

@ -0,0 +1,20 @@
{
"compilerOptions": {
"baseUrl": "src",
"target": "es2020",
"moduleResolution": "node",
"forceConsistentCasingInFileNames": true,
"allowSyntheticDefaultImports": true,
"strict": true,
"allowJs": true,
"esModuleInterop": true,
"noImplicitOverride": true,
"module": "CommonJS",
"declaration": true,
"declarationMap": true,
"sourceMap": true,
"outDir": "dist"
},
"include": ["src"],
"files": ["src/index.ts"]
}

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

Before

Width:  |  Height:  |  Size: 401 KiB

After

Width:  |  Height:  |  Size: 401 KiB

View File

@ -2,6 +2,7 @@
import {useState} from "react";
import {useSelector} from "react-redux";
import {Navigate} from "react-router-dom";
import {AdminProfile} from "@void-cat/api";
import {FileList} from "../Components/Shared/FileList";
import {UserList} from "./UserList";
@ -11,7 +12,6 @@ import EditUser from "./EditUser";
import useApi from "Hooks/UseApi";
import {RootState} from "Store";
import {AdminProfile} from "../Api";
export function Admin() {
const auth = useSelector((state: RootState) => state.login.jwt);

View File

@ -1,9 +1,9 @@
import {useState} from "react";
import {useSelector} from "react-redux";
import {AdminProfile} from "@void-cat/api";
import {VoidButton} from "../Components/Shared/VoidButton";
import useApi from "Hooks/UseApi";
import {AdminProfile} from "Api";
import {RootState} from "Store";
export default function EditUser({user, onClose}: {user: AdminProfile, onClose: () => void}) {

View File

@ -1,12 +1,12 @@
import {useDispatch} from "react-redux";
import {ReactNode, useEffect, useState} from "react";
import moment from "moment";
import {AdminProfile, AdminUserListResult, ApiError, PagedResponse, PagedSortBy, PageSortOrder} from "@void-cat/api";
import {logout} from "../LoginState";
import {PageSelector} from "../Components/Shared/PageSelector";
import useApi from "Hooks/UseApi";
import {AdminProfile, AdminUserListResult, ApiError, PagedResponse, PagedSortBy, PageSortOrder} from "Api";
interface UserListProps {
actions: (u: AdminProfile) => ReactNode

View File

@ -2,6 +2,7 @@ import "./FileEdit.css";
import {useState} from "react";
import {useSelector} from "react-redux";
import moment from "moment";
import {PaymentServices, SetPaymentConfigRequest, VoidFileResponse} from "@void-cat/api";
import {StrikePaymentConfig} from "./StrikePaymentConfig";
import {NoPaymentConfig} from "./NoPaymentConfig";
@ -9,7 +10,6 @@ import {VoidButton} from "../Shared/VoidButton";
import useApi from "Hooks/UseApi";
import {RootState} from "Store";
import {Payment, PaymentServices, SetPaymentConfigRequest, VoidFileResponse} from "Api";
interface FileEditProps {
file: VoidFileResponse

View File

@ -1,6 +1,6 @@
import React from "react";
import {VoidButton} from "../Shared/VoidButton";
import {PaymentCurrencies, SetPaymentConfigRequest, VoidFileResponse} from "../../Api";
import {PaymentCurrencies, SetPaymentConfigRequest, VoidFileResponse} from "@void-cat/api";
interface NoPaymentConfigProps {
privateFile: VoidFileResponse

View File

@ -1,7 +1,7 @@
import {useState} from "react";
import {VoidButton} from "../Shared/VoidButton";
import {PaymentCurrencies, SetPaymentConfigRequest, VoidFileResponse} from "Api";
import {PaymentCurrencies, SetPaymentConfigRequest, VoidFileResponse} from "@void-cat/api";
interface StrikePaymentConfigProps {
file: VoidFileResponse

View File

@ -2,10 +2,10 @@ import "./FilePayment.css";
import {useState} from "react";
import {LightningPayment} from "./LightningPayment";
import {VoidButton} from "../Shared/VoidButton";
import {PaymentOrder, PaymentServices, VoidFileResponse} from "@void-cat/api";
import useApi from "Hooks/UseApi";
import {FormatCurrency} from "Util";
import {PaymentOrder, PaymentServices, VoidFileResponse} from "Api";
interface FilePaymentProps {
file: VoidFileResponse

View File

@ -1,10 +1,10 @@
import QRCode from "qrcode.react";
import {useEffect} from "react";
import {PaymentOrder, PaymentOrderState, VoidFileResponse} from "@void-cat/api";
import {Countdown} from "../Shared/Countdown";
import useApi from "Hooks/UseApi";
import {PaymentOrder, PaymentOrderState, VoidFileResponse} from "Api";
interface LightningPaymentProps {
file: VoidFileResponse

View File

@ -1,13 +1,13 @@
import "./FileUpload.css";
import {useEffect, useMemo, useState} from "react";
import {useSelector} from "react-redux";
import {UploadState, VoidFileResponse} from "@void-cat/api";
import {VoidButton} from "../Shared/VoidButton";
import {useFileTransfer} from "../Shared/FileTransferHook";
import {RootState} from "Store";
import {ConstName, FormatBytes} from "Util";
import {UploadState, VoidFileResponse} from "Api";
import useApi from "Hooks/UseApi";
interface FileUploadProps {

View File

@ -1,8 +1,8 @@
import {Bar, BarChart, Tooltip, XAxis} from "recharts";
import moment from "moment";
import {BandwidthPoint} from "@void-cat/api";
import {FormatBytes} from "Util";
import {BandwidthPoint} from "../../Api";
interface MetricsGraphProps {
metrics?: Array<BandwidthPoint>

View File

@ -1,11 +1,11 @@
import {useEffect, useState} from "react";
import moment from "moment";
import {ApiKey} from "@void-cat/api";
import {VoidButton} from "../Shared/VoidButton";
import VoidModal from "../Shared/VoidModal";
import useApi from "Hooks/UseApi";
import {ApiKey} from "Api";
export default function ApiKeyList() {
const Api = useApi();

View File

@ -2,11 +2,11 @@ import {useDispatch} from "react-redux";
import {ReactNode, useEffect, useState} from "react";
import {Link} from "react-router-dom";
import moment from "moment";
import {ApiError, PagedRequest, PagedResponse, PagedSortBy, PageSortOrder, VoidFileResponse} from "@void-cat/api";
import {logout} from "../../LoginState";
import {PageSelector} from "./PageSelector";
import {ApiError, PagedRequest, PagedResponse, PagedSortBy, PageSortOrder, VoidFileResponse} from "Api";
import {FormatBytes} from "Util";
interface FileListProps {

View File

@ -1,9 +1,9 @@
import "./InlineProfile.css";
import {CSSProperties} from "react";
import {Link} from "react-router-dom";
import {Profile} from "@void-cat/api";
import {DefaultAvatar} from "Const";
import {Profile} from "../../Api";
const DefaultSize = 64;

View File

@ -1,4 +1,4 @@
import {useState} from "react";
import {useState} from "react";
import {useDispatch, useSelector} from "react-redux";
import HCaptcha from "@hcaptcha/react-hcaptcha";

View File

@ -1,7 +1,7 @@
import {useSelector} from "react-redux";
import {VoidApi} from "@void-cat/api";
import {RootState} from "Store";
import {VoidApi} from "Api";
import {ApiHost} from "Const";
export default function useApi() {

View File

@ -1,5 +1,5 @@
import {createSlice, PayloadAction} from "@reduxjs/toolkit";
import {Profile} from "./Api";
import {createSlice, PayloadAction} from "@reduxjs/toolkit";
import {Profile} from "@void-cat/api";
interface LoginStore {
jwt?: string

View File

@ -1,4 +1,4 @@
import "./Donate.css"
import "./Donate.css"
import {useState} from "react";
export function Donate() {

View File

@ -2,6 +2,7 @@ import "./FilePreview.css";
import {Fragment, useEffect, useState} from "react";
import {useParams} from "react-router-dom";
import {Helmet} from "react-helmet";
import {PaymentOrder, VoidFileResponse, StreamEncryption} from "@void-cat/api";
import {TextPreview} from "../Components/FilePreview/TextPreview";
import {FileEdit} from "../Components/FileEdit/FileEdit";
@ -12,7 +13,6 @@ import {useFileTransfer} from "../Components/Shared/FileTransferHook";
import Icon from "../Components/Shared/Icon";
import useApi from "Hooks/UseApi";
import {PaymentOrder, VoidFileResponse, StreamEncryption} from "Api";
import {FormatBytes} from "Util";
import {ApiHost} from "Const";

View File

@ -1,4 +1,4 @@
import {useSelector} from "react-redux";
import {useSelector} from "react-redux";
import {Dropzone} from "../Components/FileUpload/Dropzone";
import {GlobalStats} from "../Components/HomePage/GlobalStats";

View File

@ -3,10 +3,10 @@ import {Fragment, useEffect, useState} from "react";
import {useDispatch, useSelector} from "react-redux";
import {default as moment} from "moment";
import {useParams} from "react-router-dom";
import {Profile} from "@void-cat/api";
import useApi from "Hooks/UseApi";
import {RootState} from "Store";
import {Profile} from "Api";
import {DefaultAvatar} from "Const";
import {logout, setProfile as setGlobalProfile} from "../LoginState";
@ -25,7 +25,6 @@ export function ProfilePage() {
const [emailCodeError, setEmailCodeError] = useState("");
const [newCodeSent, setNewCodeSent] = useState(false);
const auth = useSelector((s: RootState) => s.login.jwt);
const localProfile = useSelector((s: RootState) => s.login.profile);
const canEdit = localProfile?.id === profile?.id;

View File

@ -13,7 +13,7 @@ export function UserLogin() {
if (auth) {
navigate("/");
}
}, [auth]);
}, [auth, navigate]);
return (
<div className="page">

View File

@ -1,5 +1,5 @@
import {createSlice, PayloadAction} from "@reduxjs/toolkit";
import {SiteInfoResponse} from "Api";
import {createSlice, PayloadAction} from "@reduxjs/toolkit";
import {SiteInfoResponse} from "@void-cat/api";
export const SiteInfoState = createSlice({
name: "SiteInfo",

View File

@ -1,4 +1,4 @@
import {configureStore} from "@reduxjs/toolkit";
import {configureStore} from "@reduxjs/toolkit";
import loginReducer from "./LoginState";
import siteInfoReducer from "./SiteInfoStore";

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
{
{
"files": {
"main.js": "/static/js/bundle.js",
"index.html": "/index.html",