chore: updated packages

This commit is contained in:
florian 2024-12-26 16:50:22 +01:00
parent 0ed3c21370
commit 5e6dee66f5
11 changed files with 1777 additions and 1560 deletions

1
.gitignore vendored
View File

@ -26,3 +26,4 @@ dist-ssr
package-lock.json
bun.lockb
.nsite/

BIN
bun.lockb

Binary file not shown.

3220
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -13,46 +13,46 @@
},
"dependencies": {
"@catamphetamine/id3js": "^1.0.2",
"@heroicons/react": "^2.1.5",
"@noble/hashes": "^1.4.0",
"@nostr-dev-kit/ndk": "^2.10.0",
"@nostr-dev-kit/ndk-cache-dexie": "^2.5.1",
"@tanstack/react-query": "^5.51.21",
"@tanstack/react-query-devtools": "^5.51.21",
"@heroicons/react": "^2.2.0",
"@noble/hashes": "^1.6.1",
"@nostr-dev-kit/ndk": "^2.10.7",
"@nostr-dev-kit/ndk-cache-dexie": "^2.5.8",
"@tanstack/react-query": "^5.62.10",
"@tanstack/react-query-devtools": "^5.62.10",
"add": "^2.0.6",
"axios": "^1.7.3",
"blossom-client-sdk": "^0.9.1",
"axios": "^1.7.9",
"blossom-client-sdk": "^2.1.1",
"blurhash": "^2.0.5",
"dayjs": "^1.11.12",
"dayjs": "^1.11.13",
"lodash": "^4.17.21",
"nostr-tools": "^2.7.1",
"p-limit": "^6.1.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
"react-pdf": "^9.1.0",
"react-router-dom": "^6.26.0"
"nostr-tools": "^2.10.4",
"p-limit": "^6.2.0",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"react-pdf": "^9.2.1",
"react-router-dom": "^7.1.1"
},
"devDependencies": {
"@tanstack/eslint-plugin-query": "^5.51.15",
"@types/lodash": "^4.17.7",
"@types/react": "^18.3.3",
"@types/react-dom": "^18.3.0",
"@typescript-eslint/eslint-plugin": "^7.17.0",
"@typescript-eslint/parser": "^7.17.0",
"@vitejs/plugin-react-swc": "^3.7.0",
"autoprefixer": "^10.4.19",
"@tanstack/eslint-plugin-query": "^5.62.9",
"@types/lodash": "^4.17.13",
"@types/react": "^19.0.2",
"@types/react-dom": "^19.0.2",
"@typescript-eslint/eslint-plugin": "^8.18.2",
"@typescript-eslint/parser": "^8.18.2",
"@vitejs/plugin-react-swc": "^3.7.2",
"autoprefixer": "^10.4.20",
"daisyui": "latest",
"eslint": "^8.56.0",
"eslint-plugin-react-hooks": "^4.6.2",
"eslint-plugin-react-refresh": "^0.4.9",
"postcss": "^8.4.40",
"prettier": "^3.3.3",
"tailwindcss": "^3.4.7",
"typescript": "^5.5.4",
"vite": "^5.3.5",
"eslint": "^9.17.0",
"eslint-plugin-react-hooks": "^5.1.0",
"eslint-plugin-react-refresh": "^0.4.16",
"postcss": "^8.4.49",
"prettier": "^3.4.2",
"tailwindcss": "^3.4.17",
"typescript": "^5.7.2",
"vite": "^6.0.6",
"vite-bundle-visualizer": "^1.2.1"
},
"optionalDependencies": {
"@rollup/rollup-linux-x64-gnu": "4.19.2"
"@rollup/rollup-linux-x64-gnu": "4.29.1"
}
}

View File

@ -185,16 +185,16 @@ const BlobList = ({ blobs, onDelete, title, className = '' }: BlobListProps) =>
<tbody>
{blobs.map(blob => (
<tr
className={`hover ${selectedBlobs[blob.sha256? blob.sha256: blob.url] ? 'selected' : ''}`}
className={`hover ${selectedBlobs[blob.sha256 ? blob.sha256 : blob.url] ? 'selected' : ''}`}
key={blob.sha256}
onClick={e => handleSelectBlob(blob.sha256? blob.sha256 : blob.url, e)}
onClick={e => handleSelectBlob(blob.sha256 ? blob.sha256 : blob.url, e)}
>
<td className="whitespace-nowrap w-12">
<input
type="checkbox"
className="checkbox checkbox-primary checkbox-sm mr-2"
checked={!!selectedBlobs[blob.sha256? blob.sha256 : blob.url]}
onChange={e => handleSelectBlob(blob.sha256? blob.sha256 : blob.url, e)}
checked={!!selectedBlobs[blob.sha256 ? blob.sha256 : blob.url]}
onChange={e => handleSelectBlob(blob.sha256 ? blob.sha256 : blob.url, e)}
onClick={e => e.stopPropagation()}
/>
<MimeTypeIcon type={blob.type} />

View File

@ -127,6 +127,7 @@ const UploadFileSelection: React.FC<UploadFileSelectionProps> = ({
<div className="grid gap-2" style={{ gridTemplateColumns: '2em auto' }}>
{servers.map(s => (
<CheckBox
key={s.name}
name={s.name}
disabled={uploadBusy}
checked={transfers[s.name]?.enabled || false}

View File

@ -34,8 +34,8 @@ function Home() {
const deleteBlob = useMutation({
mutationFn: async ({ server, hash }: { server: Server; hash: string }) => {
if (server.type === 'blossom') {
const deleteAuth = await BlossomClient.getDeleteAuth(hash, signEventTemplate, 'Delete Blob');
return BlossomClient.deleteBlob(server.url, hash, deleteAuth);
const deleteAuth = await BlossomClient.createDeleteAuth(signEventTemplate, hash, 'Delete Blob');
return BlossomClient.deleteBlob(server.url, hash, { auth: deleteAuth });
} else {
return await deleteNip96File(server, hash, signEventTemplate);
}

View File

@ -141,7 +141,7 @@ function Upload() {
for (const file of filesToUpload) {
const authStartTime = Date.now();
// TODO do this only once for each file. Currently this is called for every server
const uploadAuth = await BlossomClient.getUploadAuth(file, signEventTemplate, 'Upload Blob');
const uploadAuth = await BlossomClient.createUploadAuth(signEventTemplate, file, 'Upload Blob');
console.log(`Created auth event in ${Date.now() - authStartTime} ms`, uploadAuth);
try {
@ -221,9 +221,13 @@ function Upload() {
//console.log(transfers);
// TODO transfer can not be accessed yet, errors are not visible here. TODO pout errors somewhere else
// setter for error transfers has not executed when we reach here.
const errorsTransfers = Object.keys(transfers).filter(ts => transfers[ts].enabled && !!transfers[ts].error);
console.log('errorCheck', errorsTransfers);
if (errorsTransfers.length == 0) {
// Only go to the next step if no errors have occured
// TODO why dont we detect errors here?????? INVESTIGATE
// Should show button to "skip" despite of errors
setUploadStep(2);
}
};

View File

@ -31,11 +31,11 @@ export async function fetchBlossomList(
pubkey: string,
signEventTemplate: (template: EventTemplate) => Promise<SignedEvent>
): Promise<BlobDescriptor[]> {
const listAuthEvent = await BlossomClient.getListAuth(signEventTemplate, 'List Blobs');
const blobs = await BlossomClient.listBlobs(serverUrl, pubkey!, undefined, listAuthEvent);
const listAuthEvent = await BlossomClient.createListAuth(signEventTemplate, 'List Blobs');
const blobs = await BlossomClient.listBlobs(serverUrl, pubkey!, { auth: listAuthEvent });
// fallback to deprecated created attibute for servers that are not using 'uploaded' yet
return blobs.map(b => ({ ...b, uploaded: b.uploaded || b.created || dayjs().unix() }));
return blobs.map(b => ({ ...b, uploaded: b.uploaded || dayjs().unix() }));
}
export const uploadBlossomBlob = async (
@ -44,7 +44,7 @@ export const uploadBlossomBlob = async (
signEventTemplate: (template: EventTemplate) => Promise<SignedEvent>,
onUploadProgress?: (progressEvent: AxiosProgressEvent) => void
) => {
const uploadAuth = await BlossomClient.getUploadAuth(file, signEventTemplate, 'Upload Blob');
const uploadAuth = await BlossomClient.createUploadAuth(signEventTemplate, file, 'Upload Blob');
const headers = {
Accept: 'application/json',
@ -81,7 +81,7 @@ export const mirrordBlossomBlob = async (
if (!hash) throw 'The soureUrl does not contain a blossom hash.';
const blossomClient = new BlossomClient(targetServer, signEventTemplate);
const mirrorAuth = await blossomClient.getMirrorAuth(hash, 'Upload Blob');
const mirrorAuth = await blossomClient.createMirrorAuth(hash, 'Upload Blob');
const headers = {
Accept: 'application/json',

View File

@ -1,9 +1,18 @@
import type { EventTemplate, SignedEvent } from 'blossom-client-sdk';
import NDK, { NDKEvent, NDKNip07Signer, NDKNip46Signer, NDKPrivateKeySigner, NDKUser } from '@nostr-dev-kit/ndk';
import NDK, {
NDKCacheAdapter,
NDKEvent,
NDKNip07Signer,
NDKNip46Signer,
NDKPrivateKeySigner,
NDKUser,
} from '@nostr-dev-kit/ndk';
import { generateSecretKey, nip19 } from 'nostr-tools';
import { decrypt } from 'nostr-tools/nip49';
import { bytesToHex } from '@noble/hashes/utils';
import React, { createContext, useContext, useEffect, useState } from 'react';
// @ts-expect-error ndk-cache-dexie has no type definitions
import NDKCacheAdapterDexie from '@nostr-dev-kit/ndk-cache-dexie';
type NDKContextType = {
@ -17,7 +26,7 @@ type NDKContextType = {
publishSignedEvent: (signedEvent: SignedEvent) => Promise<void>;
};
export const defaultRelays = [
const defaultRelays = [
// 'ws://localhost:4869',
'wss://relay.damus.io',
'wss://relay.nostr.band',
@ -28,13 +37,13 @@ export const defaultRelays = [
'wss://purplepag.es/', // needed for user profiles
];
const cacheAdapter = new NDKCacheAdapterDexie({ dbName: 'ndk-cache-3' });
const dexieAdapter = new NDKCacheAdapterDexie({ dbName: 'ndk-cache-3' });
const ndk = new NDK({
cacheAdapter,
cacheAdapter: dexieAdapter as NDKCacheAdapter,
autoConnectUserRelays: true,
enableOutboxModel: true,
explicitRelayUrls: defaultRelays
explicitRelayUrls: defaultRelays,
});
export const NDKContext = createContext<NDKContextType>({
@ -83,9 +92,6 @@ export const NDKContextProvider = ({ children }: { children: React.ReactElement
console.log('Found user', user);
signer = new NDKNip46Signer(ndk, connectionString, localSigner);
signer.remoteUser = user;
signer.remotePubkey = user.pubkey;
} else if (connectionString.startsWith('bunker://')) {
const uri = new URL(connectionString);

View File

@ -173,7 +173,6 @@ export async function uploadNip96File(
}
return {
created: dayjs().unix(), // todo fix
uploaded: dayjs().unix(), // todo fix
type: getValueByTag(result.nip94_event?.tags, 'm'),
sha256: x,