Compare commits

...
7 Commits
Author SHA1 Message Date
reya d84647bc6b chore: bump version 2024-05-15 13:58:39 +07:00
reya 7724eccd72 feat: improve tauri commands 2024-05-15 13:58:03 +07:00
reya 8ea2335225 chore: update deps 2024-05-15 10:50:35 +07:00
reya b60d4db0df feat: improve multi-account switching 2024-05-15 10:14:21 +07:00
reya f1e17ff3c4 fix: allow app auto restart after update 2024-05-13 15:36:47 +07:00
reya 32954f17b6 chore: bump version and update readme 2024-05-13 15:21:05 +07:00
雨宮蓮andGitHub cf70b0f882 fix: context issue in production (#187) 2024-05-13 15:18:23 +07:00
89 changed files with 1790 additions and 1883 deletions
+4 -8
View File
@@ -1,18 +1,14 @@
_Note_: Lume is under rewrite to using Rust Nostr as back-end and more lightweight front-end. If you need stable version, you can download v3 and below.
Source code for v3 is stored here: https://github.com/lumehq/lume/tree/old
--
## Introduction ## Introduction
Lume is a Nostr client for desktop include Linux, Windows and macOS. It is free and open source, you can look at source code on Github. Lume is actively improving the app and adding new features, you can expect new update every month. Lume is a Nostr client for desktop include Linux, Windows and macOS. It is free and open source, you can look at source code on Github. Lume is actively improving the app and adding new features, you can expect new update every month.
## Usage ## Usage
Download Lume v3 (v3.0.1-stable) for your platform here: [https://github.com/lumehq/lume/releases](https://github.com/lumehq/lume/releases) Download Lume v4 for your platform here: [https://github.com/lumehq/lume/releases](https://github.com/lumehq/lume/releases)
Supported platform: macOS, Windows and Linux Supported platform: macOS. Windows and Linux are coming soon.
Windows and Linux are availabel on v3 and below.
## Prerequisites ## Prerequisites
+16 -13
View File
@@ -13,48 +13,51 @@
"@lume/icons": "workspace:^", "@lume/icons": "workspace:^",
"@lume/ui": "workspace:^", "@lume/ui": "workspace:^",
"@lume/utils": "workspace:^", "@lume/utils": "workspace:^",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-checkbox": "^1.0.4",
"@radix-ui/react-collapsible": "^1.0.3", "@radix-ui/react-collapsible": "^1.0.3",
"@radix-ui/react-dialog": "^1.0.5", "@radix-ui/react-dialog": "^1.0.5",
"@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-dropdown-menu": "^2.0.6",
"@radix-ui/react-hover-card": "^1.0.7",
"@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-switch": "^1.0.3", "@radix-ui/react-switch": "^1.0.3",
"@radix-ui/react-tooltip": "^1.0.7", "@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/query-sync-storage-persister": "^5.32.0", "@tanstack/query-sync-storage-persister": "^5.36.0",
"@tanstack/react-query": "^5.32.0", "@tanstack/react-query": "^5.36.0",
"@tanstack/react-query-persist-client": "^5.32.0", "@tanstack/react-query-persist-client": "^5.36.0",
"@tanstack/react-router": "1.29.2", "@tanstack/react-router": "1.32.5",
"i18next": "^23.11.3", "i18next": "^23.11.4",
"i18next-resources-to-backend": "^1.2.1", "i18next-resources-to-backend": "^1.2.1",
"minidenticons": "^4.2.1", "minidenticons": "^4.2.1",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"nostr-tools": "^2.5.1", "nostr-tools": "^2.5.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-currency-input-field": "^3.8.0", "react-currency-input-field": "^3.8.0",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-hook-form": "^7.51.3", "react-hook-form": "^7.51.4",
"react-hotkeys-hook": "^4.5.0", "react-hotkeys-hook": "^4.5.0",
"react-i18next": "^14.1.1", "react-i18next": "^14.1.1",
"slate": "^0.102.0", "react-string-replace": "^1.1.1",
"slate": "^0.103.0",
"slate-react": "^0.102.0", "slate-react": "^0.102.0",
"sonner": "^1.4.41", "sonner": "^1.4.41",
"use-debounce": "^10.0.0", "use-debounce": "^10.0.0",
"virtua": "^0.30.2" "virtua": "^0.31.0"
}, },
"devDependencies": { "devDependencies": {
"@lume/tailwindcss": "workspace:^", "@lume/tailwindcss": "workspace:^",
"@lume/tsconfig": "workspace:^", "@lume/tsconfig": "workspace:^",
"@lume/types": "workspace:^", "@lume/types": "workspace:^",
"@tanstack/router-devtools": "^1.31.3", "@tanstack/router-devtools": "^1.32.5",
"@tanstack/router-vite-plugin": "^1.30.0", "@tanstack/router-vite-plugin": "^1.32.2",
"@types/react": "^18.3.1", "@types/react": "^18.3.2",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"@vitejs/plugin-react-swc": "^3.6.0", "@vitejs/plugin-react-swc": "^3.6.0",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.19",
"postcss": "^8.4.38", "postcss": "^8.4.38",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"typescript": "^5.4.5", "typescript": "^5.4.5",
"vite": "^5.2.10", "vite": "^5.2.11",
"vite-plugin-top-level-await": "^1.4.1", "vite-plugin-top-level-await": "^1.4.1",
"vite-tsconfig-paths": "^4.3.2" "vite-tsconfig-paths": "^4.3.2"
} }
+13 -20
View File
@@ -1,5 +1,4 @@
import { Ark } from "@lume/ark"; import { Ark } from "@lume/ark";
import { CancelCircleIcon, CheckCircleIcon, InfoCircleIcon } from "@lume/icons";
import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister"; import { createSyncStoragePersister } from "@tanstack/query-sync-storage-persister";
import { QueryClient } from "@tanstack/react-query"; import { QueryClient } from "@tanstack/react-query";
import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client"; import { PersistQueryClientProvider } from "@tanstack/react-query-persist-client";
@@ -8,7 +7,6 @@ import { platform } from "@tauri-apps/plugin-os";
import React, { StrictMode } from "react"; import React, { StrictMode } from "react";
import ReactDOM from "react-dom/client"; import ReactDOM from "react-dom/client";
import { I18nextProvider } from "react-i18next"; import { I18nextProvider } from "react-i18next";
import { Toaster } from "sonner";
import "./app.css"; import "./app.css";
import i18n from "./locale"; import i18n from "./locale";
import { routeTree } from "./router.gen"; // auto generated file import { routeTree } from "./router.gen"; // auto generated file
@@ -29,6 +27,18 @@ const router = createRouter({
queryClient, queryClient,
platform: platformName, platform: platformName,
}, },
Wrap: ({ children }) => {
return (
<I18nextProvider i18n={i18n} defaultNS={"translation"}>
<PersistQueryClientProvider
client={queryClient}
persistOptions={{ persister }}
>
{children}
</PersistQueryClientProvider>
</I18nextProvider>
);
},
}); });
// Register things for typesafety // Register things for typesafety
@@ -48,25 +58,8 @@ const rootElement = document.getElementById("root")!;
if (!rootElement.innerHTML) { if (!rootElement.innerHTML) {
const root = ReactDOM.createRoot(rootElement); const root = ReactDOM.createRoot(rootElement);
root.render( root.render(
<I18nextProvider i18n={i18n} defaultNS={"translation"}>
<PersistQueryClientProvider
client={queryClient}
persistOptions={{ persister }}
>
<StrictMode> <StrictMode>
<Toaster
position="bottom-right"
icons={{
success: <CheckCircleIcon className="size-5" />,
info: <InfoCircleIcon className="size-5" />,
error: <CancelCircleIcon className="size-5" />,
}}
closeButton
theme="system"
/>
<App /> <App />
</StrictMode> </StrictMode>,
</PersistQueryClientProvider>
</I18nextProvider>,
); );
} }
+1 -1
View File
@@ -1,4 +1,4 @@
import { User } from "@lume/ui"; import { User } from "@/components/user";
import { getBitcoinDisplayValues } from "@lume/utils"; import { getBitcoinDisplayValues } from "@lume/utils";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
import { useEffect, useMemo, useState } from "react"; import { useEffect, useMemo, useState } from "react";
@@ -5,7 +5,7 @@ import { invoke } from "@tauri-apps/api/core";
import { getCurrent } from "@tauri-apps/api/webviewWindow"; import { getCurrent } from "@tauri-apps/api/webviewWindow";
import { useEffect, useRef, useState } from "react"; import { useEffect, useRef, useState } from "react";
export function Col({ export function Column({
column, column,
account, account,
isScroll, isScroll,
@@ -17,68 +17,55 @@ export function Col({
isResize: boolean; isResize: boolean;
}) { }) {
const container = useRef<HTMLDivElement>(null); const container = useRef<HTMLDivElement>(null);
const [webview, setWebview] = useState<string | undefined>(undefined); const webviewLabel = `column-${account}_${column.label}`;
const [isCreated, setIsCreated] = useState(false);
const repositionWebview = async () => { const repositionWebview = async () => {
if (webview && webview.length > 1) {
const newRect = container.current.getBoundingClientRect(); const newRect = container.current.getBoundingClientRect();
await invoke("reposition_column", { await invoke("reposition_column", {
label: webview, label: webviewLabel,
x: newRect.x, x: newRect.x,
y: newRect.y, y: newRect.y,
}); });
}
}; };
const resizeWebview = async () => { const resizeWebview = async () => {
if (webview && webview.length > 1) {
const newRect = container.current.getBoundingClientRect(); const newRect = container.current.getBoundingClientRect();
await invoke("resize_column", { await invoke("resize_column", {
label: webview, label: webviewLabel,
width: newRect.width, width: newRect.width,
height: newRect.height, height: newRect.height,
}); });
}
}; };
useEffect(() => { useEffect(() => {
resizeWebview(); if (isCreated) resizeWebview();
}, [isResize]); }, [isResize]);
useEffect(() => { useEffect(() => {
if (isScroll) repositionWebview(); if (isScroll && isCreated) repositionWebview();
}, [isScroll]); }, [isScroll]);
useEffect(() => { useEffect(() => {
(async () => {
if (webview && webview.length > 1) return;
const rect = container.current.getBoundingClientRect(); const rect = container.current.getBoundingClientRect();
const windowLabel = `column-${column.label}`;
const url = `${column.content}?account=${account}&label=${column.label}&name=${column.name}`; const url = `${column.content}?account=${account}&label=${column.label}&name=${column.name}`;
// create new webview // create new webview
const label: string = await invoke("create_column", { invoke("create_column", {
label: windowLabel, label: webviewLabel,
x: rect.x, x: rect.x,
y: rect.y, y: rect.y,
width: rect.width, width: rect.width,
height: rect.height, height: rect.height,
url, url,
}); }).then(() => setIsCreated(true));
setWebview(label);
})();
// close webview when unmounted // close webview when unmounted
return () => { return () => {
if (webview && webview.length > 1) { invoke("close_column", { label: webviewLabel });
invoke("close_column", {
label: webview,
});
}
}; };
}, [webview]); }, [account]);
return ( return (
<div className="h-full w-[440px] shrink-0 p-2"> <div className="h-full w-[440px] shrink-0 p-2">
@@ -1,6 +1,6 @@
import { ThreadIcon } from "@lume/icons"; import { ThreadIcon } from "@lume/icons";
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note } from "@lume/ui"; import { Note } from "@/components/note";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
@@ -6,7 +6,7 @@ import { useRouteContext } from "@tanstack/react-router";
import { useState } from "react"; import { useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { toast } from "sonner"; import { toast } from "sonner";
import { Spinner } from "../../spinner"; import { Spinner } from "@lume/ui";
import { useNoteContext } from "../provider"; import { useNoteContext } from "../provider";
export function NoteRepost({ large = false }: { large?: boolean }) { export function NoteRepost({ large = false }: { large?: boolean }) {
@@ -9,7 +9,6 @@ import { NoteContentLarge } from "./contentLarge";
import { NoteMenu } from "./menu"; import { NoteMenu } from "./menu";
import { NoteProvider } from "./provider"; import { NoteProvider } from "./provider";
import { NoteRoot } from "./root"; import { NoteRoot } from "./root";
import { NoteThread } from "./thread";
import { NoteUser } from "./user"; import { NoteUser } from "./user";
export const Note = { export const Note = {
@@ -24,6 +23,5 @@ export const Note = {
Zap: NoteZap, Zap: NoteZap,
Open: NoteOpenThread, Open: NoteOpenThread,
Child: NoteChild, Child: NoteChild,
Thread: NoteThread,
Activity: NoteActivity, Activity: NoteActivity,
}; };
@@ -2,8 +2,8 @@ import { useEvent } from "@lume/ark";
import { LinkIcon } from "@lume/icons"; import { LinkIcon } from "@lume/icons";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { User } from "../../user";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { User } from "@/components/user";
export function MentionNote({ export function MentionNote({
eventId, eventId,
@@ -1,5 +1,5 @@
import { WebviewWindow } from "@tauri-apps/api/webviewWindow"; import { WebviewWindow } from "@tauri-apps/api/webviewWindow";
import { Carousel, CarouselItem } from "../../carousel"; import { Carousel, CarouselItem } from "@lume/ui";
export function Images({ urls }: { urls: string[] }) { export function Images({ urls }: { urls: string[] }) {
const open = async (url: string) => { const open = async (url: string) => {
@@ -1,4 +1,4 @@
import { Carousel, CarouselItem } from "../../carousel"; import { Carousel, CarouselItem } from "@lume/ui";
export function Videos({ urls }: { urls: string[] }) { export function Videos({ urls }: { urls: string[] }) {
if (urls.length === 1) { if (urls.length === 1) {
@@ -1,5 +1,5 @@
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note } from "@lume/ui"; import { Note } from "@/components/note";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
export function Notification({ export function Notification({
+1 -1
View File
@@ -1,6 +1,6 @@
import { QuoteIcon } from "@lume/icons"; import { QuoteIcon } from "@lume/icons";
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note } from "@lume/ui"; import { Note } from "@/components/note";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
export function Quote({ export function Quote({
+3 -1
View File
@@ -1,5 +1,7 @@
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note, Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { Note } from "@/components/note";
import { User } from "@/components/user";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { useQuery } from "@tanstack/react-query"; import { useQuery } from "@tanstack/react-query";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
+1 -1
View File
@@ -1,6 +1,6 @@
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note } from "@lume/ui";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { Note } from "@/components/note";
export function TextNote({ export function TextNote({
event, event,
@@ -2,13 +2,16 @@ import { cn } from "@lume/utils";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import { Spinner } from "../spinner"; import { Spinner } from "@lume/ui";
import { useUserContext } from "./provider"; import { useUserContext } from "./provider";
export function UserFollowButton({ export function UserFollowButton({
simple = false, simple = false,
className, className,
}: { simple?: boolean; className?: string }) { }: {
simple?: boolean;
className?: string;
}) {
const { ark } = useRouteContext({ strict: false }); const { ark } = useRouteContext({ strict: false });
const user = useUserContext(); const user = useUserContext();
+21 -16
View File
@@ -1,4 +1,4 @@
import { Col } from "@/components/col"; import { Column } from "@/components/column";
import { Toolbar } from "@/components/toolbar"; import { Toolbar } from "@/components/toolbar";
import { ArrowLeftIcon, ArrowRightIcon } from "@lume/icons"; import { ArrowLeftIcon, ArrowRightIcon } from "@lume/icons";
import type { EventColumns, LumeColumn } from "@lume/types"; import type { EventColumns, LumeColumn } from "@lume/types";
@@ -13,20 +13,19 @@ import { useDebouncedCallback } from "use-debounce";
import { VList, type VListHandle } from "virtua"; import { VList, type VListHandle } from "virtua";
export const Route = createFileRoute("/$account/home")({ export const Route = createFileRoute("/$account/home")({
beforeLoad: async ({ context }) => { loader: async ({ context }) => {
try { try {
const ark = context.ark; const userColumns = await context.ark.get_columns();
const resourcePath = await resolveResource( if (userColumns.length > 0) {
"resources/system_columns.json", return userColumns;
); } else {
const systemColumns: LumeColumn[] = JSON.parse( const systemPath = "resources/system_columns.json";
await readTextFile(resourcePath), const resourcePath = await resolveResource(systemPath);
); const resourceFile = await readTextFile(resourcePath);
const userColumns = await ark.get_columns(); const systemColumns: LumeColumn[] = JSON.parse(resourceFile);
return { return systemColumns;
storedColumns: !userColumns.length ? systemColumns : userColumns, }
};
} catch (e) { } catch (e) {
console.error(String(e)); console.error(String(e));
} }
@@ -35,13 +34,14 @@ export const Route = createFileRoute("/$account/home")({
}); });
function Screen() { function Screen() {
const userSavedColumns = Route.useLoaderData();
const vlistRef = useRef<VListHandle>(null); const vlistRef = useRef<VListHandle>(null);
const { account } = Route.useParams(); const { account } = Route.useParams();
const { ark, storedColumns } = Route.useRouteContext(); const { ark } = Route.useRouteContext();
const [selectedIndex, setSelectedIndex] = useState(-1); const [selectedIndex, setSelectedIndex] = useState(-1);
const [columns, setColumns] = useState(storedColumns); const [columns, setColumns] = useState([]);
const [isScroll, setIsScroll] = useState(false); const [isScroll, setIsScroll] = useState(false);
const [isResize, setIsResize] = useState(false); const [isResize, setIsResize] = useState(false);
@@ -114,6 +114,10 @@ function Screen() {
150, 150,
); );
useEffect(() => {
setColumns(userSavedColumns);
}, [userSavedColumns]);
useEffect(() => { useEffect(() => {
// save state // save state
ark.set_columns(columns); ark.set_columns(columns);
@@ -148,9 +152,10 @@ function Screen() {
onScroll={() => setIsScroll(true)} onScroll={() => setIsScroll(true)}
onScrollEnd={() => setIsScroll(false)} onScrollEnd={() => setIsScroll(false)}
className="scrollbar-none h-full w-full overflow-x-auto focus:outline-none" className="scrollbar-none h-full w-full overflow-x-auto focus:outline-none"
cache={null}
> >
{columns.map((column) => ( {columns.map((column) => (
<Col <Column
key={column.label} key={column.label}
column={column} column={column}
account={account} account={account}
+10 -4
View File
@@ -1,6 +1,6 @@
import { BellIcon, ComposeFilledIcon, PlusIcon, SearchIcon } from "@lume/icons"; import { BellIcon, ComposeFilledIcon, PlusIcon, SearchIcon } from "@lume/icons";
import { Event, Kind } from "@lume/types"; import { Event, Kind } from "@lume/types";
import { User } from "@lume/ui"; import { User } from "@/components/user";
import { import {
cn, cn,
decodeZapInvoice, decodeZapInvoice,
@@ -11,6 +11,7 @@ import { Outlet, createFileRoute } from "@tanstack/react-router";
import { invoke } from "@tauri-apps/api/core"; import { invoke } from "@tauri-apps/api/core";
import { getCurrent } from "@tauri-apps/api/window"; import { getCurrent } from "@tauri-apps/api/window";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { toast } from "sonner";
export const Route = createFileRoute("/$account")({ export const Route = createFileRoute("/$account")({
beforeLoad: async ({ context }) => { beforeLoad: async ({ context }) => {
@@ -78,12 +79,17 @@ function Accounts() {
const { account } = Route.useParams(); const { account } = Route.useParams();
const changeAccount = async (npub: string) => { const changeAccount = async (npub: string) => {
if (npub === account) return; if (npub === account) {
return await ark.open_profile(account);
}
// change current account and update signer
const select = await ark.load_selected_account(npub); const select = await ark.load_selected_account(npub);
if (select) { if (select) {
return navigate({ to: "/$account/home", params: { account: npub } }); return navigate({ to: "/$account/home", params: { account: npub } });
} else {
toast.warning("Something wrong.");
} }
}; };
@@ -94,7 +100,7 @@ function Accounts() {
<User.Provider pubkey={user}> <User.Provider pubkey={user}>
<User.Root <User.Root
className={cn( className={cn(
"rounded-full", "rounded-full transition-all ease-in-out duration-150 will-change-auto",
user === account user === account
? "ring-1 ring-teal-500 ring-offset-2 ring-offset-neutral-200 dark:ring-offset-neutral-950" ? "ring-1 ring-teal-500 ring-offset-2 ring-offset-neutral-200 dark:ring-offset-neutral-950"
: "", : "",
@@ -102,7 +108,7 @@ function Accounts() {
> >
<User.Avatar <User.Avatar
className={cn( className={cn(
"aspect-square h-auto rounded-full object-cover", "aspect-square h-auto rounded-full object-cover transition-all ease-in-out duration-150 will-change-auto",
user === account ? "w-7" : "w-8", user === account ? "w-7" : "w-8",
)} )}
/> />
+17 -1
View File
@@ -1,10 +1,12 @@
import type { Ark } from "@lume/ark"; import type { Ark } from "@lume/ark";
import { CheckCircleIcon, InfoCircleIcon, CancelCircleIcon } from "@lume/icons";
import type { Interests, Metadata, Settings } from "@lume/types"; import type { Interests, Metadata, Settings } from "@lume/types";
import { Spinner } from "@lume/ui"; import { Spinner } from "@lume/ui";
import type { QueryClient } from "@tanstack/react-query"; import type { QueryClient } from "@tanstack/react-query";
import { Outlet, createRootRouteWithContext } from "@tanstack/react-router"; import { Outlet, createRootRouteWithContext } from "@tanstack/react-router";
import type { Platform } from "@tauri-apps/plugin-os"; import type { Platform } from "@tauri-apps/plugin-os";
import type { Descendant } from "slate"; import type { Descendant } from "slate";
import { Toaster } from "sonner";
type EditorElement = { type EditorElement = {
type: string; type: string;
@@ -31,7 +33,21 @@ interface RouterContext {
} }
export const Route = createRootRouteWithContext<RouterContext>()({ export const Route = createRootRouteWithContext<RouterContext>()({
component: () => <Outlet />, component: () => (
<>
<Toaster
position="bottom-right"
icons={{
success: <CheckCircleIcon className="size-5" />,
info: <InfoCircleIcon className="size-5" />,
error: <CancelCircleIcon className="size-5" />,
}}
closeButton
theme="system"
/>
<Outlet />
</>
),
pendingComponent: Pending, pendingComponent: Pending,
wrapInSuspense: true, wrapInSuspense: true,
}); });
@@ -1,5 +0,0 @@
import { createFileRoute } from "@tanstack/react-router";
export const Route = createFileRoute("/activity/$account/messages")({
component: () => <div>Hello /activity/$account/messages!</div>,
});
@@ -1,4 +1,5 @@
import { Note, Spinner } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { Note } from "@/components/note";
import { Await, createFileRoute, defer } from "@tanstack/react-router"; import { Await, createFileRoute, defer } from "@tanstack/react-router";
import { Suspense } from "react"; import { Suspense } from "react";
import { Virtualizer } from "virtua"; import { Virtualizer } from "virtua";
@@ -1,4 +1,5 @@
import { Note, Spinner, User } from "@lume/ui"; import { User } from "@/components/user";
import { Spinner } from "@lume/ui";
import { decodeZapInvoice } from "@lume/utils"; import { decodeZapInvoice } from "@lume/utils";
import { Await, createFileRoute, defer } from "@tanstack/react-router"; import { Await, createFileRoute, defer } from "@tanstack/react-router";
import { Suspense } from "react"; import { Suspense } from "react";
+2 -1
View File
@@ -1,6 +1,7 @@
import { CheckCircleIcon } from "@lume/icons"; import { CheckCircleIcon } from "@lume/icons";
import type { ColumnRouteSearch } from "@lume/types"; import type { ColumnRouteSearch } from "@lume/types";
import { Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { User } from "@/components/user";
import { createFileRoute, useRouter } from "@tanstack/react-router"; import { createFileRoute, useRouter } from "@tanstack/react-router";
import { useState } from "react"; import { useState } from "react";
import { toast } from "sonner"; import { toast } from "sonner";
@@ -4,10 +4,10 @@ import * as Tooltip from "@radix-ui/react-tooltip";
import * as DropdownMenu from "@radix-ui/react-dropdown-menu"; import * as DropdownMenu from "@radix-ui/react-dropdown-menu";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { useRouteContext } from "@tanstack/react-router"; import { useRouteContext } from "@tanstack/react-router";
import { User } from "@lume/ui";
import { useSlateStatic } from "slate-react"; import { useSlateStatic } from "slate-react";
import type { Contact } from "@lume/types"; import type { Contact } from "@lume/types";
import { toast } from "sonner"; import { toast } from "sonner";
import { User } from "@/components/user";
export function MentionButton({ className }: { className?: string }) { export function MentionButton({ className }: { className?: string }) {
const editor = useSlateStatic(); const editor = useSlateStatic();
+3 -2
View File
@@ -1,6 +1,5 @@
import { ComposeFilledIcon, TrashIcon } from "@lume/icons"; import { ComposeFilledIcon, TrashIcon } from "@lume/icons";
import { Spinner } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { MentionNote } from "@lume/ui/src/note/mentions/note";
import { import {
cn, cn,
insertImage, insertImage,
@@ -25,6 +24,8 @@ import {
import { MediaButton } from "./-components/media"; import { MediaButton } from "./-components/media";
import { NsfwToggle } from "./-components/nsfw"; import { NsfwToggle } from "./-components/nsfw";
import { MentionButton } from "./-components/mention"; import { MentionButton } from "./-components/mention";
import { MentionNote } from "@/components/note/mentions/note";
import { toast } from "sonner";
type EditorSearch = { type EditorSearch = {
reply_to: string; reply_to: string;
@@ -35,7 +36,7 @@ export const Route = createFileRoute("/editor/")({
validateSearch: (search: Record<string, string>): EditorSearch => { validateSearch: (search: Record<string, string>): EditorSearch => {
return { return {
reply_to: search.reply_to, reply_to: search.reply_to,
quote: search.quote === "true" ?? false, quote: search.quote === "true" || false,
}; };
}, },
beforeLoad: async ({ search }) => { beforeLoad: async ({ search }) => {
+2 -1
View File
@@ -1,6 +1,7 @@
import { useEvent } from "@lume/ark"; import { useEvent } from "@lume/ark";
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Box, Container, Note, Spinner } from "@lume/ui"; import { Box, Container, Spinner } from "@lume/ui";
import { Note } from "@/components/note";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
import { WindowVirtualizer } from "virtua"; import { WindowVirtualizer } from "virtua";
import { ReplyList } from "./-components/replyList"; import { ReplyList } from "./-components/replyList";
@@ -1,7 +1,7 @@
import type { EventWithReplies } from "@lume/types"; import type { EventWithReplies } from "@lume/types";
import { Note } from "@lume/ui";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { SubReply } from "./subReply"; import { SubReply } from "./subReply";
import { Note } from "@/components/note";
export function Reply({ event }: { event: EventWithReplies }) { export function Reply({ event }: { event: EventWithReplies }) {
return ( return (
@@ -1,5 +1,5 @@
import type { Event } from "@lume/types"; import type { Event } from "@lume/types";
import { Note } from "@lume/ui"; import { Note } from "@/components/note";
export function SubReply({ event }: { event: Event; rootEventId?: string }) { export function SubReply({ event }: { event: Event; rootEventId?: string }) {
return ( return (
+2 -1
View File
@@ -1,5 +1,6 @@
import { PlusIcon } from "@lume/icons"; import { PlusIcon } from "@lume/icons";
import { Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { User } from "@/components/user";
import { checkForAppUpdates } from "@lume/utils"; import { checkForAppUpdates } from "@lume/utils";
import { Link } from "@tanstack/react-router"; import { Link } from "@tanstack/react-router";
import { createFileRoute, redirect } from "@tanstack/react-router"; import { createFileRoute, redirect } from "@tanstack/react-router";
+2 -1
View File
@@ -1,6 +1,7 @@
import { ArrowRightIcon, CancelIcon } from "@lume/icons"; import { ArrowRightIcon, CancelIcon } from "@lume/icons";
import type { ColumnRouteSearch, LumeColumn } from "@lume/types"; import type { ColumnRouteSearch, LumeColumn } from "@lume/types";
import { Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { User } from "@/components/user";
import { cn } from "@lume/utils"; import { cn } from "@lume/utils";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
import { invoke } from "@tauri-apps/api/core"; import { invoke } from "@tauri-apps/api/core";
+3 -1
View File
@@ -1,6 +1,8 @@
import { SearchIcon } from "@lume/icons"; import { SearchIcon } from "@lume/icons";
import { type Event, Kind } from "@lume/types"; import { type Event, Kind } from "@lume/types";
import { Note, Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { Note } from "@/components/note";
import { User } from "@/components/user";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
import { useEffect, useState } from "react"; import { useEffect, useState } from "react";
import { toast } from "sonner"; import { toast } from "sonner";
+1 -1
View File
@@ -1,5 +1,5 @@
import { User } from "@/components/user";
import type { Account } from "@lume/types"; import type { Account } from "@lume/types";
import { User } from "@lume/ui";
import { displayNsec } from "@lume/utils"; import { displayNsec } from "@lume/utils";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
import { invoke } from "@tauri-apps/api/core"; import { invoke } from "@tauri-apps/api/core";
+2 -1
View File
@@ -1,4 +1,5 @@
import { Spinner, User } from "@lume/ui"; import { Spinner } from "@lume/ui";
import { User } from "@/components/user";
import { Await, defer } from "@tanstack/react-router"; import { Await, defer } from "@tanstack/react-router";
import { createFileRoute } from "@tanstack/react-router"; import { createFileRoute } from "@tanstack/react-router";
import { Suspense } from "react"; import { Suspense } from "react";
+2 -1
View File
@@ -1,4 +1,5 @@
import { Box, Container, Spinner, User } from "@lume/ui"; import { Box, Container, Spinner } from "@lume/ui";
import { User } from "@/components/user";
import { createFileRoute, defer } from "@tanstack/react-router"; import { createFileRoute, defer } from "@tanstack/react-router";
import { WindowVirtualizer } from "virtua"; import { WindowVirtualizer } from "virtua";
import { Conversation } from "@/components/conversation"; import { Conversation } from "@/components/conversation";
+2 -1
View File
@@ -1,5 +1,6 @@
import { Balance } from "@/components/balance"; import { Balance } from "@/components/balance";
import { Box, Container, User } from "@lume/ui"; import { Box, Container } from "@lume/ui";
import { User } from "@/components/user";
import { createLazyFileRoute } from "@tanstack/react-router"; import { createLazyFileRoute } from "@tanstack/react-router";
import { getCurrent } from "@tauri-apps/api/webviewWindow"; import { getCurrent } from "@tauri-apps/api/webviewWindow";
import { useState } from "react"; import { useState } from "react";
+1 -1
View File
@@ -13,7 +13,7 @@
"@astrojs/check": "^0.5.10", "@astrojs/check": "^0.5.10",
"@astrojs/tailwind": "^5.1.0", "@astrojs/tailwind": "^5.1.0",
"@fontsource/geist-mono": "^5.0.3", "@fontsource/geist-mono": "^5.0.3",
"astro": "^4.7.0", "astro": "^4.8.3",
"astro-seo-meta": "^4.1.1", "astro-seo-meta": "^4.1.1",
"astro-seo-schema": "^4.0.2", "astro-seo-schema": "^4.0.2",
"schema-dts": "^1.1.2", "schema-dts": "^1.1.2",
+12 -12
View File
@@ -20,17 +20,17 @@
"node": ">=18" "node": ">=18"
}, },
"dependencies": { "dependencies": {
"@tauri-apps/api": "2.0.0-beta.7", "@tauri-apps/api": "^2.0.0-beta.7",
"@tauri-apps/plugin-autostart": "2.0.0-beta.2", "@tauri-apps/plugin-autostart": "2.0.0-beta.3",
"@tauri-apps/plugin-clipboard-manager": "2.1.0-beta.0", "@tauri-apps/plugin-clipboard-manager": "2.1.0-beta.1",
"@tauri-apps/plugin-dialog": "2.0.0-beta.2", "@tauri-apps/plugin-dialog": "2.0.0-beta.3",
"@tauri-apps/plugin-fs": "2.0.0-beta.2", "@tauri-apps/plugin-fs": "2.0.0-beta.3",
"@tauri-apps/plugin-http": "2.0.0-beta.2", "@tauri-apps/plugin-http": "2.0.0-beta.3",
"@tauri-apps/plugin-notification": "2.0.0-beta.2", "@tauri-apps/plugin-notification": "2.0.0-beta.3",
"@tauri-apps/plugin-os": "2.0.0-beta.2", "@tauri-apps/plugin-os": "2.0.0-beta.3",
"@tauri-apps/plugin-process": "2.0.0-beta.2", "@tauri-apps/plugin-process": "2.0.0-beta.3",
"@tauri-apps/plugin-shell": "2.0.0-beta.2", "@tauri-apps/plugin-shell": "2.0.0-beta.4",
"@tauri-apps/plugin-updater": "2.0.0-beta.2", "@tauri-apps/plugin-updater": "2.0.0-beta.3",
"@tauri-apps/plugin-upload": "2.0.0-beta.3" "@tauri-apps/plugin-upload": "2.0.0-beta.4"
} }
} }
+2 -2
View File
@@ -5,13 +5,13 @@
"main": "./src/index.ts", "main": "./src/index.ts",
"dependencies": { "dependencies": {
"@lume/utils": "workspace:^", "@lume/utils": "workspace:^",
"@tanstack/react-query": "^5.32.0", "@tanstack/react-query": "^5.36.0",
"react": "^18.3.1" "react": "^18.3.1"
}, },
"devDependencies": { "devDependencies": {
"@lume/tsconfig": "workspace:^", "@lume/tsconfig": "workspace:^",
"@lume/types": "workspace:^", "@lume/types": "workspace:^",
"@types/react": "^18.3.1", "@types/react": "^18.3.2",
"typescript": "^5.4.5" "typescript": "^5.4.5"
} }
} }
+20 -30
View File
@@ -207,12 +207,10 @@ export class Ark {
global?: boolean, global?: boolean,
) { ) {
try { try {
let until: string = undefined; const until: string = asOf && asOf > 0 ? asOf.toString() : undefined;
const isGlobal = global ?? false; const isGlobal = global ?? false;
const seens = new Set<string>();
if (asOf && asOf > 0) until = asOf.toString();
const seenIds = new Set<string>();
const nostrEvents: Event[] = await invoke("get_events", { const nostrEvents: Event[] = await invoke("get_events", {
limit, limit,
until, until,
@@ -220,39 +218,31 @@ export class Ark {
global: isGlobal, global: isGlobal,
}); });
// remove duplicate event const events = nostrEvents.filter((event) => {
for (const event of nostrEvents) { const eTags = event.tags.filter((el) => el[0] === "e");
if (event.kind === Kind.Repost) { const ids = eTags.map((item) => item[1]);
const repostId = event.tags.find((tag) => tag[0] === "e")?.[1]; const isDup = ids.some((id) => seens.has(id));
seenIds.add(repostId);
// Add found ids to seen list
for (const id of ids) {
seens.add(id);
} }
const eventIds = event.tags // Filter NSFW event
.filter((el) => el[0] === "e")
?.map((item) => item[1]);
if (eventIds?.length) {
for (const id of eventIds) {
seenIds.add(id);
}
}
}
const events = nostrEvents
.filter((event) => !seenIds.has(event.id))
.sort((a, b) => b.created_at - a.created_at);
if (this.settings?.nsfw) { if (this.settings?.nsfw) {
return events.filter( const wTags = event.tags.filter((t) => t[0] === "content-warning");
(event) => const isLewd = wTags.length > 0;
event.tags.filter((event) => event[0] === "content-warning")
.length > 0, return !isDup && !isLewd;
);
} }
// Filter duplicate event
return !isDup;
});
return events; return events;
} catch (e) { } catch (e) {
console.info(String(e)); console.error("[get_events] failed", String(e));
return []; return [];
} }
} }
+1 -1
View File
@@ -8,7 +8,7 @@
}, },
"devDependencies": { "devDependencies": {
"@lume/tsconfig": "workspace:*", "@lume/tsconfig": "workspace:*",
"@types/react": "^18.3.1", "@types/react": "^18.3.2",
"typescript": "^5.4.5" "typescript": "^5.4.5"
} }
} }
+9 -9
View File
@@ -4,7 +4,7 @@
"private": true, "private": true,
"main": "./src/index.ts", "main": "./src/index.ts",
"dependencies": { "dependencies": {
"@getalby/sdk": "^3.5.0", "@getalby/sdk": "^3.5.1",
"@lume/ark": "workspace:^", "@lume/ark": "workspace:^",
"@lume/icons": "workspace:^", "@lume/icons": "workspace:^",
"@lume/utils": "workspace:^", "@lume/utils": "workspace:^",
@@ -17,11 +17,11 @@
"@radix-ui/react-hover-card": "^1.0.7", "@radix-ui/react-hover-card": "^1.0.7",
"@radix-ui/react-popover": "^1.0.7", "@radix-ui/react-popover": "^1.0.7",
"@radix-ui/react-tooltip": "^1.0.7", "@radix-ui/react-tooltip": "^1.0.7",
"@tanstack/react-query": "^5.32.0", "@tanstack/react-query": "^5.36.0",
"@tanstack/react-router": "^1.31.3", "@tanstack/react-router": "^1.32.5",
"framer-motion": "^11.1.7", "framer-motion": "^11.2.0",
"get-urls": "^12.1.0", "get-urls": "^12.1.0",
"media-chrome": "^3.2.1", "media-chrome": "^3.2.2",
"minidenticons": "^4.2.1", "minidenticons": "^4.2.1",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"qrcode.react": "^3.1.0", "qrcode.react": "^3.1.0",
@@ -29,24 +29,24 @@
"react": "^18.3.1", "react": "^18.3.1",
"react-currency-input-field": "^3.8.0", "react-currency-input-field": "^3.8.0",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-hook-form": "^7.51.3", "react-hook-form": "^7.51.4",
"react-hotkeys-hook": "^4.5.0", "react-hotkeys-hook": "^4.5.0",
"react-i18next": "^14.1.1", "react-i18next": "^14.1.1",
"react-snap-carousel": "^0.4.0", "react-snap-carousel": "^0.4.0",
"react-string-replace": "^1.1.1", "react-string-replace": "^1.1.1",
"slate": "^0.102.0", "slate": "^0.103.0",
"slate-react": "^0.102.0", "slate-react": "^0.102.0",
"sonner": "^1.4.41", "sonner": "^1.4.41",
"string-strip-html": "^13.4.8", "string-strip-html": "^13.4.8",
"uqr": "^0.1.2", "uqr": "^0.1.2",
"use-debounce": "^10.0.0", "use-debounce": "^10.0.0",
"virtua": "^0.30.2" "virtua": "^0.31.0"
}, },
"devDependencies": { "devDependencies": {
"@lume/tailwindcss": "workspace:^", "@lume/tailwindcss": "workspace:^",
"@lume/tsconfig": "workspace:^", "@lume/tsconfig": "workspace:^",
"@lume/types": "workspace:^", "@lume/types": "workspace:^",
"@types/react": "^18.3.1", "@types/react": "^18.3.2",
"tailwindcss": "^3.4.3", "tailwindcss": "^3.4.3",
"typescript": "^5.4.5" "typescript": "^5.4.5"
} }
+1 -5
View File
@@ -1,8 +1,4 @@
export * from "./user";
export * from "./note";
export * from "./note/mentions/note";
// UI
export * from "./container"; export * from "./container";
export * from "./box"; export * from "./box";
export * from "./spinner"; export * from "./spinner";
export * from "./carousel";
-10
View File
@@ -1,10 +0,0 @@
import { QRCodeSVG } from "qrcode.react";
import { memo } from "react";
export const Invoice = memo(function Invoice({ invoice }: { invoice: string }) {
return (
<div className="mt-2 flex items-center rounded-lg bg-neutral-200 p-2 dark:bg-neutral-800">
<QRCodeSVG value={invoice} includeMargin={true} className="rounded-lg" />
</div>
);
});
@@ -1,20 +0,0 @@
import type { Event } from "@lume/types";
import { Note } from "..";
export function ChildReply({ event }: { event: Event; rootEventId?: string }) {
return (
<Note.Provider event={event}>
<Note.Root className="py-2">
<div className="flex items-center justify-between h-14">
<Note.User className="flex-1 pr-2" />
<Note.Menu />
</div>
<Note.Content />
<div className="flex items-center justify-end gap-4 mt-2">
<Note.Repost />
<Note.Zap />
</div>
</Note.Root>
</Note.Provider>
);
}
-69
View File
@@ -1,69 +0,0 @@
import { NavArrowDownIcon } from "@lume/icons";
import type { EventWithReplies } from "@lume/types";
import { cn } from "@lume/utils";
import * as Collapsible from "@radix-ui/react-collapsible";
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { Note } from "..";
import { ChildReply } from "./childReply";
export function Reply({
event,
}: {
event: EventWithReplies;
}) {
const [t] = useTranslation();
const [open, setOpen] = useState(false);
return (
<Collapsible.Root open={open} onOpenChange={setOpen}>
<Note.Provider event={event}>
<Note.Root className="pt-2">
<div className="flex items-center justify-between h-14">
<Note.User className="flex-1 pr-2" />
<Note.Menu />
</div>
<Note.Content />
<div className="flex items-center justify-between h-14">
{event.replies?.length > 0 ? (
<Collapsible.Trigger asChild>
<div className="inline-flex items-center gap-1 font-semibold text-sm text-neutral-600 dark:text-neutral-400 h-14">
<NavArrowDownIcon
className={cn("size-5", open ? "rotate-180 transform" : "")}
/>
{`${event.replies?.length} ${
event.replies?.length === 1
? t("note.reply.single")
: t("note.reply.plural")
}`}
</div>
</Collapsible.Trigger>
) : (
<div />
)}
<div className="inline-flex items-center gap-4">
<Note.Reply />
<Note.Repost />
<Note.Zap />
</div>
</div>
<div
className={cn(
open
? "pb-3 border-t border-neutral-100 dark:border-neutral-900"
: "",
)}
>
{event.replies?.length > 0 ? (
<Collapsible.Content className="divide-y divide-neutral-100 dark:divide-neutral-900 pl-6">
{event.replies?.map((childEvent) => (
<ChildReply key={childEvent.id} event={childEvent} />
))}
</Collapsible.Content>
) : null}
</div>
</Note.Root>
</Note.Provider>
</Collapsible.Root>
);
}
-117
View File
@@ -1,117 +0,0 @@
import { RepostIcon } from "@lume/icons";
import type { Event } from "@lume/types";
import { cn } from "@lume/utils";
import { useQuery } from "@tanstack/react-query";
import { useRouteContext } from "@tanstack/react-router";
import { useTranslation } from "react-i18next";
import { Note } from "..";
import { User } from "../../user";
export function RepostNote({
event,
className,
}: {
event: Event;
className?: string;
}) {
const { ark } = useRouteContext({ strict: false });
const { t } = useTranslation();
const {
isLoading,
isError,
data: repostEvent,
} = useQuery({
queryKey: ["repost", event.id],
queryFn: async () => {
try {
if (event.content.length > 50) {
const embed = JSON.parse(event.content) as Event;
return embed;
}
const id = event.tags.find((el) => el[0] === "e")[1];
return await ark.get_event(id);
} catch {
throw new Error("Failed to get repost event");
}
},
refetchOnWindowFocus: false,
refetchOnMount: false,
refetchOnReconnect: false,
});
if (isLoading) {
return <div className="w-full px-3 pb-3">Loading...</div>;
}
if (isError || !repostEvent) {
return (
<Note.Root className={className}>
<User.Provider pubkey={event.pubkey}>
<User.Root className="flex h-14 gap-2 px-3">
<div className="inline-flex w-10 shrink-0 items-center justify-center">
<RepostIcon className="h-5 w-5 text-blue-500" />
</div>
<div className="inline-flex items-center gap-2">
<User.Avatar className="size-6 shrink-0 rounded object-cover" />
<div className="inline-flex items-baseline gap-1">
<User.Name className="font-medium text-neutral-900 dark:text-neutral-100" />
<span className="text-blue-500">{t("note.reposted")}</span>
</div>
</div>
</User.Root>
</User.Provider>
<div className="mb-3 select-text px-3">
<div className="flex flex-col items-start justify-start rounded-lg bg-red-100 px-3 py-3 dark:bg-red-900">
<p className="text-red-500">Failed to get event</p>
</div>
</div>
</Note.Root>
);
}
return (
<Note.Root
className={cn(
"mb-3 flex flex-col gap-2 border-b border-neutral-100 pb-3 dark:border-neutral-900",
className,
)}
>
<User.Provider pubkey={event.pubkey}>
<User.Root className="flex gap-3">
<div className="inline-flex w-10 shrink-0 items-center justify-center">
<RepostIcon className="h-5 w-5 text-blue-500" />
</div>
<div className="inline-flex items-center gap-2">
<User.Avatar className="size-6 shrink-0 rounded-full object-cover" />
<div className="inline-flex items-baseline gap-1">
<User.Name className="font-medium text-neutral-900 dark:text-neutral-100" />
<span className="text-blue-500">{t("note.reposted")}</span>
</div>
</div>
</User.Root>
</User.Provider>
<Note.Provider event={repostEvent}>
<div className="flex flex-col gap-2">
<div className="flex items-start justify-between">
<Note.User className="flex-1 pr-2" />
<Note.Menu />
</div>
<div className="flex gap-3">
<div className="size-10 shrink-0" />
<div className="min-w-0 flex-1">
<Note.Content />
<div className="mt-5 flex items-center justify-between">
<Note.Reaction />
<div className="inline-flex items-center gap-4">
<Note.Reply />
<Note.Repost />
<Note.Zap />
</div>
</div>
</div>
</div>
</div>
</Note.Provider>
</Note.Root>
);
}
@@ -1,24 +0,0 @@
import { Note } from "..";
export function NoteSkeleton() {
return (
<Note.Root>
<div className="flex h-min flex-col p-3">
<div className="flex items-start gap-2">
<div className="relative h-10 w-10 shrink-0 animate-pulse overflow-hidden rounded-lg bg-neutral-400 dark:bg-neutral-600" />
<div className="h-6 w-full">
<div className="h-4 w-24 animate-pulse rounded bg-neutral-300 dark:bg-neutral-700" />
</div>
</div>
<div className="-mt-4 flex gap-3">
<div className="w-10 shrink-0" />
<div className="flex w-full flex-col gap-1">
<div className="h-3 w-2/3 animate-pulse rounded bg-neutral-300 dark:bg-neutral-700" />
<div className="h-3 w-2/3 animate-pulse rounded bg-neutral-300 dark:bg-neutral-700" />
<div className="h-3 w-1/2 animate-pulse rounded bg-neutral-300 dark:bg-neutral-700" />
</div>
</div>
</div>
</Note.Root>
);
}
-42
View File
@@ -1,42 +0,0 @@
import type { Event } from "@lume/types";
import { cn } from "@lume/utils";
import { Note } from "..";
export function TextNote({
event,
className,
}: {
event: Event;
className?: string;
}) {
return (
<Note.Provider event={event}>
<Note.Root
className={cn(
"mb-3 flex flex-col gap-2 border-b border-neutral-100 pb-3 dark:border-neutral-900",
className,
)}
>
<div className="flex items-start justify-between">
<Note.User className="flex-1 pr-2" />
<Note.Menu />
</div>
<div className="flex gap-3">
<div className="size-11 shrink-0" />
<div className="min-w-0 flex-1">
<Note.Thread className="mb-2" />
<Note.Content />
<div className="mt-5 flex items-center justify-between">
<Note.Reaction />
<div className="inline-flex items-center gap-4">
<Note.Reply />
<Note.Repost />
<Note.Zap />
</div>
</div>
</div>
</div>
</Note.Root>
</Note.Provider>
);
}
@@ -1,43 +0,0 @@
import { useEvent } from "@lume/ark";
import { Note } from "..";
import { User } from "../../user";
export function ThreadNote({ eventId }: { eventId: string }) {
const { isLoading, data } = useEvent(eventId);
if (isLoading) {
return <div>Loading...</div>;
}
return (
<Note.Provider event={data}>
<Note.Root className="flex flex-col">
<div className="flex h-16 items-center justify-between">
<User.Provider pubkey={data.pubkey}>
<User.Root className="flex h-16 flex-1 items-center gap-3">
<User.Avatar className="size-11 shrink-0 rounded-full object-cover ring-1 ring-neutral-200/50 dark:ring-neutral-800/50" />
<div className="flex flex-1 flex-col">
<User.Name className="font-semibold text-neutral-900 dark:text-neutral-100" />
<div className="inline-flex items-center gap-2 text-sm text-neutral-600 dark:text-neutral-400">
<User.Time time={data.created_at} />
<span>·</span>
<User.NIP05 />
</div>
</div>
</User.Root>
</User.Provider>
<Note.Menu />
</div>
<Note.Thread className="mb-2" />
<Note.Content className="min-w-0" />
<div className="flex h-14 items-center justify-between">
<Note.Reaction />
<div className="inline-flex items-center gap-4">
<Note.Repost />
<Note.Zap />
</div>
</div>
</Note.Root>
</Note.Provider>
);
}
-44
View File
@@ -1,44 +0,0 @@
import { LinkIcon } from "@lume/icons";
import { cn } from "@lume/utils";
import { useRouteContext } from "@tanstack/react-router";
import { useTranslation } from "react-i18next";
import { Note } from ".";
import { useNoteContext } from "./provider";
export function NoteThread({ className }: { className?: string }) {
const { ark } = useRouteContext({ strict: false });
const event = useNoteContext();
const thread = ark.parse_event_thread({
content: event.content,
tags: event.tags,
});
const { t } = useTranslation();
if (!thread) return null;
return (
<div className={cn("w-full", className)}>
<div className="flex h-min w-full flex-col gap-3 rounded-2xl border border-black/10 p-3 dark:border-white/10">
{thread.rootEventId ? (
<Note.Child eventId={thread.rootEventId} isRoot />
) : null}
{thread.replyEventId ? (
<Note.Child eventId={thread.replyEventId} />
) : null}
<div className="inline-flex justify-end">
<button
type="button"
onClick={() =>
ark.open_thread(thread.rootEventId || thread.replyEventId)
}
className="inline-flex items-center gap-1 text-sm text-neutral-600 hover:text-blue-500 dark:text-neutral-400"
>
{t("note.showThread")}
<LinkIcon className="size-4" />
</button>
</div>
</div>
</div>
);
}
+4 -4
View File
@@ -8,21 +8,21 @@
"access": "public" "access": "public"
}, },
"dependencies": { "dependencies": {
"@tanstack/react-query": "^5.32.0", "@tanstack/react-query": "^5.36.0",
"bitcoin-units": "^1.0.0", "bitcoin-units": "^1.0.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"dayjs": "^1.11.11", "dayjs": "^1.11.11",
"light-bolt11-decoder": "^3.1.1", "light-bolt11-decoder": "^3.1.1",
"nostr-tools": "^2.5.1", "nostr-tools": "^2.5.2",
"react": "^18.3.1", "react": "^18.3.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"slate": "^0.102.0", "slate": "^0.103.0",
"slate-react": "^0.102.0" "slate-react": "^0.102.0"
}, },
"devDependencies": { "devDependencies": {
"@lume/tsconfig": "workspace:^", "@lume/tsconfig": "workspace:^",
"@lume/types": "workspace:^", "@lume/types": "workspace:^",
"@types/react": "^18.3.1", "@types/react": "^18.3.2",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.0",
"tailwind-merge": "^2.3.0", "tailwind-merge": "^2.3.0",
"typescript": "^5.4.5" "typescript": "^5.4.5"
+955 -732
View File
File diff suppressed because it is too large Load Diff
+296 -308
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -46,6 +46,7 @@
"dialog:default", "dialog:default",
"dialog:allow-ask", "dialog:allow-ask",
"dialog:allow-message", "dialog:allow-message",
"process:allow-restart",
"fs:allow-read-file", "fs:allow-read-file",
"shell:allow-open", "shell:allow-open",
{ {
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
{"desktop-capability":{"identifier":"desktop-capability","description":"Capability for the desktop","local":true,"windows":["main","splash","settings","search","nwc","activity","zap-*","event-*","user-*","editor-*","column-*"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","notification:allow-is-permission-granted","notification:allow-request-permission","notification:default","os:allow-locale","os:allow-platform","updater:default","updater:allow-check","updater:allow-download-and-install","window:allow-start-dragging","window:allow-create","window:allow-close","window:allow-set-focus","clipboard-manager:allow-write","clipboard-manager:allow-read","webview:allow-create-webview-window","webview:allow-create-webview","webview:allow-set-webview-size","webview:allow-set-webview-position","webview:allow-webview-close","dialog:default","dialog:allow-ask","dialog:allow-message","fs:allow-read-file","shell:allow-open",{"identifier":"http:default","allow":[{"url":"http://**/"},{"url":"https://**/"}]},{"identifier":"fs:allow-read-text-file","allow":[{"path":"$RESOURCE/locales/*"},{"path":"$RESOURCE/resources/*"}]}],"platforms":["linux","macOS","windows"]}} {"desktop-capability":{"identifier":"desktop-capability","description":"Capability for the desktop","local":true,"windows":["main","splash","settings","search","nwc","activity","zap-*","event-*","user-*","editor-*","column-*"],"permissions":["path:default","event:default","window:default","app:default","resources:default","menu:default","tray:default","notification:allow-is-permission-granted","notification:allow-request-permission","notification:default","os:allow-locale","os:allow-platform","updater:default","updater:allow-check","updater:allow-download-and-install","window:allow-start-dragging","window:allow-create","window:allow-close","window:allow-set-focus","clipboard-manager:allow-write","clipboard-manager:allow-read","webview:allow-create-webview-window","webview:allow-create-webview","webview:allow-set-webview-size","webview:allow-set-webview-position","webview:allow-webview-close","dialog:default","dialog:allow-ask","dialog:allow-message","process:allow-restart","fs:allow-read-file","shell:allow-open",{"identifier":"http:default","allow":[{"url":"http://**/"},{"url":"https://**/"}]},{"identifier":"fs:allow-read-text-file","allow":[{"path":"$RESOURCE/locales/*"},{"path":"$RESOURCE/resources/*"}]}],"platforms":["linux","macOS","windows"]}}
+142 -100
View File
@@ -149,14 +149,14 @@
] ]
}, },
{ {
"description": "fs:allow-app-meta -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta" "fs:allow-app-meta"
] ]
}, },
{ {
"description": "fs:allow-app-meta-recursive -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta-recursive -> This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta-recursive" "fs:allow-app-meta-recursive"
@@ -191,14 +191,14 @@
] ]
}, },
{ {
"description": "fs:allow-appcache-meta -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta -> This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta" "fs:allow-appcache-meta"
] ]
}, },
{ {
"description": "fs:allow-appcache-meta-recursive -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta-recursive -> This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta-recursive" "fs:allow-appcache-meta-recursive"
@@ -233,14 +233,14 @@
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta -> This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta" "fs:allow-appconfig-meta"
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta-recursive -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta-recursive -> This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta-recursive" "fs:allow-appconfig-meta-recursive"
@@ -275,14 +275,14 @@
] ]
}, },
{ {
"description": "fs:allow-appdata-meta -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta -> This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta" "fs:allow-appdata-meta"
] ]
}, },
{ {
"description": "fs:allow-appdata-meta-recursive -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta-recursive -> This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta-recursive" "fs:allow-appdata-meta-recursive"
@@ -317,14 +317,14 @@
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta -> This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta" "fs:allow-applocaldata-meta"
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta-recursive -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta-recursive" "fs:allow-applocaldata-meta-recursive"
@@ -359,14 +359,14 @@
] ]
}, },
{ {
"description": "fs:allow-applog-meta -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta -> This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta" "fs:allow-applog-meta"
] ]
}, },
{ {
"description": "fs:allow-applog-meta-recursive -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta-recursive" "fs:allow-applog-meta-recursive"
@@ -401,14 +401,14 @@
] ]
}, },
{ {
"description": "fs:allow-audio-meta -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta -> This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta" "fs:allow-audio-meta"
] ]
}, },
{ {
"description": "fs:allow-audio-meta-recursive -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta-recursive -> This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta-recursive" "fs:allow-audio-meta-recursive"
@@ -443,14 +443,14 @@
] ]
}, },
{ {
"description": "fs:allow-cache-meta -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta -> This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta" "fs:allow-cache-meta"
] ]
}, },
{ {
"description": "fs:allow-cache-meta-recursive -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta-recursive -> This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta-recursive" "fs:allow-cache-meta-recursive"
@@ -485,14 +485,14 @@
] ]
}, },
{ {
"description": "fs:allow-config-meta -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta -> This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta" "fs:allow-config-meta"
] ]
}, },
{ {
"description": "fs:allow-config-meta-recursive -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta-recursive -> This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta-recursive" "fs:allow-config-meta-recursive"
@@ -527,14 +527,14 @@
] ]
}, },
{ {
"description": "fs:allow-data-meta -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta -> This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta" "fs:allow-data-meta"
] ]
}, },
{ {
"description": "fs:allow-data-meta-recursive -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta-recursive -> This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta-recursive" "fs:allow-data-meta-recursive"
@@ -569,14 +569,14 @@
] ]
}, },
{ {
"description": "fs:allow-desktop-meta -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta -> This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta" "fs:allow-desktop-meta"
] ]
}, },
{ {
"description": "fs:allow-desktop-meta-recursive -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta-recursive -> This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta-recursive" "fs:allow-desktop-meta-recursive"
@@ -611,14 +611,14 @@
] ]
}, },
{ {
"description": "fs:allow-document-meta -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta -> This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta" "fs:allow-document-meta"
] ]
}, },
{ {
"description": "fs:allow-document-meta-recursive -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta-recursive -> This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta-recursive" "fs:allow-document-meta-recursive"
@@ -653,14 +653,14 @@
] ]
}, },
{ {
"description": "fs:allow-download-meta -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta -> This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta" "fs:allow-download-meta"
] ]
}, },
{ {
"description": "fs:allow-download-meta-recursive -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta-recursive -> This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta-recursive" "fs:allow-download-meta-recursive"
@@ -695,14 +695,14 @@
] ]
}, },
{ {
"description": "fs:allow-exe-meta -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta -> This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta" "fs:allow-exe-meta"
] ]
}, },
{ {
"description": "fs:allow-exe-meta-recursive -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta-recursive -> This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta-recursive" "fs:allow-exe-meta-recursive"
@@ -737,14 +737,14 @@
] ]
}, },
{ {
"description": "fs:allow-font-meta -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta -> This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta" "fs:allow-font-meta"
] ]
}, },
{ {
"description": "fs:allow-font-meta-recursive -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta-recursive -> This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta-recursive" "fs:allow-font-meta-recursive"
@@ -779,14 +779,14 @@
] ]
}, },
{ {
"description": "fs:allow-home-meta -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta -> This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta" "fs:allow-home-meta"
] ]
}, },
{ {
"description": "fs:allow-home-meta-recursive -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta-recursive -> This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta-recursive" "fs:allow-home-meta-recursive"
@@ -821,14 +821,14 @@
] ]
}, },
{ {
"description": "fs:allow-localdata-meta -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta -> This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta" "fs:allow-localdata-meta"
] ]
}, },
{ {
"description": "fs:allow-localdata-meta-recursive -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta-recursive -> This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta-recursive" "fs:allow-localdata-meta-recursive"
@@ -863,14 +863,14 @@
] ]
}, },
{ {
"description": "fs:allow-log-meta -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta -> This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta" "fs:allow-log-meta"
] ]
}, },
{ {
"description": "fs:allow-log-meta-recursive -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta-recursive -> This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta-recursive" "fs:allow-log-meta-recursive"
@@ -905,14 +905,14 @@
] ]
}, },
{ {
"description": "fs:allow-picture-meta -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta -> This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta" "fs:allow-picture-meta"
] ]
}, },
{ {
"description": "fs:allow-picture-meta-recursive -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta-recursive -> This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta-recursive" "fs:allow-picture-meta-recursive"
@@ -947,14 +947,14 @@
] ]
}, },
{ {
"description": "fs:allow-public-meta -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta -> This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta" "fs:allow-public-meta"
] ]
}, },
{ {
"description": "fs:allow-public-meta-recursive -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta-recursive -> This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta-recursive" "fs:allow-public-meta-recursive"
@@ -989,14 +989,14 @@
] ]
}, },
{ {
"description": "fs:allow-resource-meta -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta -> This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta" "fs:allow-resource-meta"
] ]
}, },
{ {
"description": "fs:allow-resource-meta-recursive -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta-recursive -> This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta-recursive" "fs:allow-resource-meta-recursive"
@@ -1031,14 +1031,14 @@
] ]
}, },
{ {
"description": "fs:allow-runtime-meta -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta -> This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta" "fs:allow-runtime-meta"
] ]
}, },
{ {
"description": "fs:allow-runtime-meta-recursive -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta-recursive -> This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta-recursive" "fs:allow-runtime-meta-recursive"
@@ -1073,14 +1073,14 @@
] ]
}, },
{ {
"description": "fs:allow-temp-meta -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta -> This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta" "fs:allow-temp-meta"
] ]
}, },
{ {
"description": "fs:allow-temp-meta-recursive -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta-recursive -> This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta-recursive" "fs:allow-temp-meta-recursive"
@@ -1115,14 +1115,14 @@
] ]
}, },
{ {
"description": "fs:allow-template-meta -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta -> This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta" "fs:allow-template-meta"
] ]
}, },
{ {
"description": "fs:allow-template-meta-recursive -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta-recursive -> This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta-recursive" "fs:allow-template-meta-recursive"
@@ -1157,14 +1157,14 @@
] ]
}, },
{ {
"description": "fs:allow-video-meta -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta -> This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta" "fs:allow-video-meta"
] ]
}, },
{ {
"description": "fs:allow-video-meta-recursive -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta-recursive -> This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta-recursive" "fs:allow-video-meta-recursive"
@@ -2339,6 +2339,13 @@
"shell:allow-open" "shell:allow-open"
] ]
}, },
{
"description": "shell:allow-spawn -> Enables the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:allow-spawn"
]
},
{ {
"description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.", "description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -2367,6 +2374,13 @@
"shell:deny-open" "shell:deny-open"
] ]
}, },
{
"description": "shell:deny-spawn -> Denies the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:deny-spawn"
]
},
{ {
"description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.", "description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -2774,14 +2788,14 @@
] ]
}, },
{ {
"description": "fs:allow-app-meta -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta" "fs:allow-app-meta"
] ]
}, },
{ {
"description": "fs:allow-app-meta-recursive -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta-recursive -> This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta-recursive" "fs:allow-app-meta-recursive"
@@ -2816,14 +2830,14 @@
] ]
}, },
{ {
"description": "fs:allow-appcache-meta -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta -> This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta" "fs:allow-appcache-meta"
] ]
}, },
{ {
"description": "fs:allow-appcache-meta-recursive -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta-recursive -> This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta-recursive" "fs:allow-appcache-meta-recursive"
@@ -2858,14 +2872,14 @@
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta -> This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta" "fs:allow-appconfig-meta"
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta-recursive -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta-recursive -> This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta-recursive" "fs:allow-appconfig-meta-recursive"
@@ -2900,14 +2914,14 @@
] ]
}, },
{ {
"description": "fs:allow-appdata-meta -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta -> This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta" "fs:allow-appdata-meta"
] ]
}, },
{ {
"description": "fs:allow-appdata-meta-recursive -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta-recursive -> This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta-recursive" "fs:allow-appdata-meta-recursive"
@@ -2942,14 +2956,14 @@
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta -> This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta" "fs:allow-applocaldata-meta"
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta-recursive -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta-recursive" "fs:allow-applocaldata-meta-recursive"
@@ -2984,14 +2998,14 @@
] ]
}, },
{ {
"description": "fs:allow-applog-meta -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta -> This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta" "fs:allow-applog-meta"
] ]
}, },
{ {
"description": "fs:allow-applog-meta-recursive -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta-recursive" "fs:allow-applog-meta-recursive"
@@ -3026,14 +3040,14 @@
] ]
}, },
{ {
"description": "fs:allow-audio-meta -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta -> This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta" "fs:allow-audio-meta"
] ]
}, },
{ {
"description": "fs:allow-audio-meta-recursive -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta-recursive -> This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta-recursive" "fs:allow-audio-meta-recursive"
@@ -3068,14 +3082,14 @@
] ]
}, },
{ {
"description": "fs:allow-cache-meta -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta -> This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta" "fs:allow-cache-meta"
] ]
}, },
{ {
"description": "fs:allow-cache-meta-recursive -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta-recursive -> This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta-recursive" "fs:allow-cache-meta-recursive"
@@ -3110,14 +3124,14 @@
] ]
}, },
{ {
"description": "fs:allow-config-meta -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta -> This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta" "fs:allow-config-meta"
] ]
}, },
{ {
"description": "fs:allow-config-meta-recursive -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta-recursive -> This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta-recursive" "fs:allow-config-meta-recursive"
@@ -3152,14 +3166,14 @@
] ]
}, },
{ {
"description": "fs:allow-data-meta -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta -> This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta" "fs:allow-data-meta"
] ]
}, },
{ {
"description": "fs:allow-data-meta-recursive -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta-recursive -> This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta-recursive" "fs:allow-data-meta-recursive"
@@ -3194,14 +3208,14 @@
] ]
}, },
{ {
"description": "fs:allow-desktop-meta -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta -> This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta" "fs:allow-desktop-meta"
] ]
}, },
{ {
"description": "fs:allow-desktop-meta-recursive -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta-recursive -> This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta-recursive" "fs:allow-desktop-meta-recursive"
@@ -3236,14 +3250,14 @@
] ]
}, },
{ {
"description": "fs:allow-document-meta -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta -> This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta" "fs:allow-document-meta"
] ]
}, },
{ {
"description": "fs:allow-document-meta-recursive -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta-recursive -> This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta-recursive" "fs:allow-document-meta-recursive"
@@ -3278,14 +3292,14 @@
] ]
}, },
{ {
"description": "fs:allow-download-meta -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta -> This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta" "fs:allow-download-meta"
] ]
}, },
{ {
"description": "fs:allow-download-meta-recursive -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta-recursive -> This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta-recursive" "fs:allow-download-meta-recursive"
@@ -3320,14 +3334,14 @@
] ]
}, },
{ {
"description": "fs:allow-exe-meta -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta -> This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta" "fs:allow-exe-meta"
] ]
}, },
{ {
"description": "fs:allow-exe-meta-recursive -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta-recursive -> This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta-recursive" "fs:allow-exe-meta-recursive"
@@ -3362,14 +3376,14 @@
] ]
}, },
{ {
"description": "fs:allow-font-meta -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta -> This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta" "fs:allow-font-meta"
] ]
}, },
{ {
"description": "fs:allow-font-meta-recursive -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta-recursive -> This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta-recursive" "fs:allow-font-meta-recursive"
@@ -3404,14 +3418,14 @@
] ]
}, },
{ {
"description": "fs:allow-home-meta -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta -> This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta" "fs:allow-home-meta"
] ]
}, },
{ {
"description": "fs:allow-home-meta-recursive -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta-recursive -> This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta-recursive" "fs:allow-home-meta-recursive"
@@ -3446,14 +3460,14 @@
] ]
}, },
{ {
"description": "fs:allow-localdata-meta -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta -> This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta" "fs:allow-localdata-meta"
] ]
}, },
{ {
"description": "fs:allow-localdata-meta-recursive -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta-recursive -> This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta-recursive" "fs:allow-localdata-meta-recursive"
@@ -3488,14 +3502,14 @@
] ]
}, },
{ {
"description": "fs:allow-log-meta -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta -> This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta" "fs:allow-log-meta"
] ]
}, },
{ {
"description": "fs:allow-log-meta-recursive -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta-recursive -> This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta-recursive" "fs:allow-log-meta-recursive"
@@ -3530,14 +3544,14 @@
] ]
}, },
{ {
"description": "fs:allow-picture-meta -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta -> This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta" "fs:allow-picture-meta"
] ]
}, },
{ {
"description": "fs:allow-picture-meta-recursive -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta-recursive -> This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta-recursive" "fs:allow-picture-meta-recursive"
@@ -3572,14 +3586,14 @@
] ]
}, },
{ {
"description": "fs:allow-public-meta -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta -> This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta" "fs:allow-public-meta"
] ]
}, },
{ {
"description": "fs:allow-public-meta-recursive -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta-recursive -> This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta-recursive" "fs:allow-public-meta-recursive"
@@ -3614,14 +3628,14 @@
] ]
}, },
{ {
"description": "fs:allow-resource-meta -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta -> This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta" "fs:allow-resource-meta"
] ]
}, },
{ {
"description": "fs:allow-resource-meta-recursive -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta-recursive -> This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta-recursive" "fs:allow-resource-meta-recursive"
@@ -3656,14 +3670,14 @@
] ]
}, },
{ {
"description": "fs:allow-runtime-meta -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta -> This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta" "fs:allow-runtime-meta"
] ]
}, },
{ {
"description": "fs:allow-runtime-meta-recursive -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta-recursive -> This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta-recursive" "fs:allow-runtime-meta-recursive"
@@ -3698,14 +3712,14 @@
] ]
}, },
{ {
"description": "fs:allow-temp-meta -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta -> This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta" "fs:allow-temp-meta"
] ]
}, },
{ {
"description": "fs:allow-temp-meta-recursive -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta-recursive -> This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta-recursive" "fs:allow-temp-meta-recursive"
@@ -3740,14 +3754,14 @@
] ]
}, },
{ {
"description": "fs:allow-template-meta -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta -> This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta" "fs:allow-template-meta"
] ]
}, },
{ {
"description": "fs:allow-template-meta-recursive -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta-recursive -> This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta-recursive" "fs:allow-template-meta-recursive"
@@ -3782,14 +3796,14 @@
] ]
}, },
{ {
"description": "fs:allow-video-meta -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta -> This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta" "fs:allow-video-meta"
] ]
}, },
{ {
"description": "fs:allow-video-meta-recursive -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta-recursive -> This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta-recursive" "fs:allow-video-meta-recursive"
@@ -5584,6 +5598,13 @@
"shell:allow-open" "shell:allow-open"
] ]
}, },
{
"description": "shell:allow-spawn -> Enables the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:allow-spawn"
]
},
{ {
"description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.", "description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -5612,6 +5633,13 @@
"shell:deny-open" "shell:deny-open"
] ]
}, },
{
"description": "shell:deny-spawn -> Denies the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:deny-spawn"
]
},
{ {
"description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.", "description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -6066,6 +6094,13 @@
"window:allow-current-monitor" "window:allow-current-monitor"
] ]
}, },
{
"description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.",
"type": "string",
"enum": [
"window:allow-cursor-position"
]
},
{ {
"description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -6493,6 +6528,13 @@
"window:deny-current-monitor" "window:deny-current-monitor"
] ]
}, },
{
"description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.",
"type": "string",
"enum": [
"window:deny-cursor-position"
]
},
{ {
"description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.",
"type": "string", "type": "string",
+142 -100
View File
@@ -149,14 +149,14 @@
] ]
}, },
{ {
"description": "fs:allow-app-meta -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta" "fs:allow-app-meta"
] ]
}, },
{ {
"description": "fs:allow-app-meta-recursive -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta-recursive -> This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta-recursive" "fs:allow-app-meta-recursive"
@@ -191,14 +191,14 @@
] ]
}, },
{ {
"description": "fs:allow-appcache-meta -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta -> This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta" "fs:allow-appcache-meta"
] ]
}, },
{ {
"description": "fs:allow-appcache-meta-recursive -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta-recursive -> This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta-recursive" "fs:allow-appcache-meta-recursive"
@@ -233,14 +233,14 @@
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta -> This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta" "fs:allow-appconfig-meta"
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta-recursive -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta-recursive -> This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta-recursive" "fs:allow-appconfig-meta-recursive"
@@ -275,14 +275,14 @@
] ]
}, },
{ {
"description": "fs:allow-appdata-meta -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta -> This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta" "fs:allow-appdata-meta"
] ]
}, },
{ {
"description": "fs:allow-appdata-meta-recursive -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta-recursive -> This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta-recursive" "fs:allow-appdata-meta-recursive"
@@ -317,14 +317,14 @@
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta -> This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta" "fs:allow-applocaldata-meta"
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta-recursive -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta-recursive" "fs:allow-applocaldata-meta-recursive"
@@ -359,14 +359,14 @@
] ]
}, },
{ {
"description": "fs:allow-applog-meta -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta -> This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta" "fs:allow-applog-meta"
] ]
}, },
{ {
"description": "fs:allow-applog-meta-recursive -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta-recursive" "fs:allow-applog-meta-recursive"
@@ -401,14 +401,14 @@
] ]
}, },
{ {
"description": "fs:allow-audio-meta -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta -> This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta" "fs:allow-audio-meta"
] ]
}, },
{ {
"description": "fs:allow-audio-meta-recursive -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta-recursive -> This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta-recursive" "fs:allow-audio-meta-recursive"
@@ -443,14 +443,14 @@
] ]
}, },
{ {
"description": "fs:allow-cache-meta -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta -> This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta" "fs:allow-cache-meta"
] ]
}, },
{ {
"description": "fs:allow-cache-meta-recursive -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta-recursive -> This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta-recursive" "fs:allow-cache-meta-recursive"
@@ -485,14 +485,14 @@
] ]
}, },
{ {
"description": "fs:allow-config-meta -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta -> This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta" "fs:allow-config-meta"
] ]
}, },
{ {
"description": "fs:allow-config-meta-recursive -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta-recursive -> This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta-recursive" "fs:allow-config-meta-recursive"
@@ -527,14 +527,14 @@
] ]
}, },
{ {
"description": "fs:allow-data-meta -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta -> This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta" "fs:allow-data-meta"
] ]
}, },
{ {
"description": "fs:allow-data-meta-recursive -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta-recursive -> This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta-recursive" "fs:allow-data-meta-recursive"
@@ -569,14 +569,14 @@
] ]
}, },
{ {
"description": "fs:allow-desktop-meta -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta -> This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta" "fs:allow-desktop-meta"
] ]
}, },
{ {
"description": "fs:allow-desktop-meta-recursive -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta-recursive -> This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta-recursive" "fs:allow-desktop-meta-recursive"
@@ -611,14 +611,14 @@
] ]
}, },
{ {
"description": "fs:allow-document-meta -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta -> This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta" "fs:allow-document-meta"
] ]
}, },
{ {
"description": "fs:allow-document-meta-recursive -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta-recursive -> This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta-recursive" "fs:allow-document-meta-recursive"
@@ -653,14 +653,14 @@
] ]
}, },
{ {
"description": "fs:allow-download-meta -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta -> This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta" "fs:allow-download-meta"
] ]
}, },
{ {
"description": "fs:allow-download-meta-recursive -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta-recursive -> This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta-recursive" "fs:allow-download-meta-recursive"
@@ -695,14 +695,14 @@
] ]
}, },
{ {
"description": "fs:allow-exe-meta -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta -> This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta" "fs:allow-exe-meta"
] ]
}, },
{ {
"description": "fs:allow-exe-meta-recursive -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta-recursive -> This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta-recursive" "fs:allow-exe-meta-recursive"
@@ -737,14 +737,14 @@
] ]
}, },
{ {
"description": "fs:allow-font-meta -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta -> This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta" "fs:allow-font-meta"
] ]
}, },
{ {
"description": "fs:allow-font-meta-recursive -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta-recursive -> This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta-recursive" "fs:allow-font-meta-recursive"
@@ -779,14 +779,14 @@
] ]
}, },
{ {
"description": "fs:allow-home-meta -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta -> This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta" "fs:allow-home-meta"
] ]
}, },
{ {
"description": "fs:allow-home-meta-recursive -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta-recursive -> This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta-recursive" "fs:allow-home-meta-recursive"
@@ -821,14 +821,14 @@
] ]
}, },
{ {
"description": "fs:allow-localdata-meta -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta -> This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta" "fs:allow-localdata-meta"
] ]
}, },
{ {
"description": "fs:allow-localdata-meta-recursive -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta-recursive -> This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta-recursive" "fs:allow-localdata-meta-recursive"
@@ -863,14 +863,14 @@
] ]
}, },
{ {
"description": "fs:allow-log-meta -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta -> This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta" "fs:allow-log-meta"
] ]
}, },
{ {
"description": "fs:allow-log-meta-recursive -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta-recursive -> This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta-recursive" "fs:allow-log-meta-recursive"
@@ -905,14 +905,14 @@
] ]
}, },
{ {
"description": "fs:allow-picture-meta -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta -> This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta" "fs:allow-picture-meta"
] ]
}, },
{ {
"description": "fs:allow-picture-meta-recursive -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta-recursive -> This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta-recursive" "fs:allow-picture-meta-recursive"
@@ -947,14 +947,14 @@
] ]
}, },
{ {
"description": "fs:allow-public-meta -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta -> This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta" "fs:allow-public-meta"
] ]
}, },
{ {
"description": "fs:allow-public-meta-recursive -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta-recursive -> This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta-recursive" "fs:allow-public-meta-recursive"
@@ -989,14 +989,14 @@
] ]
}, },
{ {
"description": "fs:allow-resource-meta -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta -> This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta" "fs:allow-resource-meta"
] ]
}, },
{ {
"description": "fs:allow-resource-meta-recursive -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta-recursive -> This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta-recursive" "fs:allow-resource-meta-recursive"
@@ -1031,14 +1031,14 @@
] ]
}, },
{ {
"description": "fs:allow-runtime-meta -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta -> This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta" "fs:allow-runtime-meta"
] ]
}, },
{ {
"description": "fs:allow-runtime-meta-recursive -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta-recursive -> This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta-recursive" "fs:allow-runtime-meta-recursive"
@@ -1073,14 +1073,14 @@
] ]
}, },
{ {
"description": "fs:allow-temp-meta -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta -> This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta" "fs:allow-temp-meta"
] ]
}, },
{ {
"description": "fs:allow-temp-meta-recursive -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta-recursive -> This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta-recursive" "fs:allow-temp-meta-recursive"
@@ -1115,14 +1115,14 @@
] ]
}, },
{ {
"description": "fs:allow-template-meta -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta -> This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta" "fs:allow-template-meta"
] ]
}, },
{ {
"description": "fs:allow-template-meta-recursive -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta-recursive -> This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta-recursive" "fs:allow-template-meta-recursive"
@@ -1157,14 +1157,14 @@
] ]
}, },
{ {
"description": "fs:allow-video-meta -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta -> This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta" "fs:allow-video-meta"
] ]
}, },
{ {
"description": "fs:allow-video-meta-recursive -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta-recursive -> This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta-recursive" "fs:allow-video-meta-recursive"
@@ -2339,6 +2339,13 @@
"shell:allow-open" "shell:allow-open"
] ]
}, },
{
"description": "shell:allow-spawn -> Enables the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:allow-spawn"
]
},
{ {
"description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.", "description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -2367,6 +2374,13 @@
"shell:deny-open" "shell:deny-open"
] ]
}, },
{
"description": "shell:deny-spawn -> Denies the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:deny-spawn"
]
},
{ {
"description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.", "description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -2774,14 +2788,14 @@
] ]
}, },
{ {
"description": "fs:allow-app-meta -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta -> This allows non-recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta" "fs:allow-app-meta"
] ]
}, },
{ {
"description": "fs:allow-app-meta-recursive -> This allows read access to metadata of the `$APP` folder, including file listing and statistics.", "description": "fs:allow-app-meta-recursive -> This allows full recursive read access to metadata of the `$APP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-app-meta-recursive" "fs:allow-app-meta-recursive"
@@ -2816,14 +2830,14 @@
] ]
}, },
{ {
"description": "fs:allow-appcache-meta -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta -> This allows non-recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta" "fs:allow-appcache-meta"
] ]
}, },
{ {
"description": "fs:allow-appcache-meta-recursive -> This allows read access to metadata of the `$APPCACHE` folder, including file listing and statistics.", "description": "fs:allow-appcache-meta-recursive -> This allows full recursive read access to metadata of the `$APPCACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appcache-meta-recursive" "fs:allow-appcache-meta-recursive"
@@ -2858,14 +2872,14 @@
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta -> This allows non-recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta" "fs:allow-appconfig-meta"
] ]
}, },
{ {
"description": "fs:allow-appconfig-meta-recursive -> This allows read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.", "description": "fs:allow-appconfig-meta-recursive -> This allows full recursive read access to metadata of the `$APPCONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appconfig-meta-recursive" "fs:allow-appconfig-meta-recursive"
@@ -2900,14 +2914,14 @@
] ]
}, },
{ {
"description": "fs:allow-appdata-meta -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta -> This allows non-recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta" "fs:allow-appdata-meta"
] ]
}, },
{ {
"description": "fs:allow-appdata-meta-recursive -> This allows read access to metadata of the `$APPDATA` folder, including file listing and statistics.", "description": "fs:allow-appdata-meta-recursive -> This allows full recursive read access to metadata of the `$APPDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-appdata-meta-recursive" "fs:allow-appdata-meta-recursive"
@@ -2942,14 +2956,14 @@
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta -> This allows non-recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta" "fs:allow-applocaldata-meta"
] ]
}, },
{ {
"description": "fs:allow-applocaldata-meta-recursive -> This allows read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-applocaldata-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applocaldata-meta-recursive" "fs:allow-applocaldata-meta-recursive"
@@ -2984,14 +2998,14 @@
] ]
}, },
{ {
"description": "fs:allow-applog-meta -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta -> This allows non-recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta" "fs:allow-applog-meta"
] ]
}, },
{ {
"description": "fs:allow-applog-meta-recursive -> This allows read access to metadata of the `$APPLOG` folder, including file listing and statistics.", "description": "fs:allow-applog-meta-recursive -> This allows full recursive read access to metadata of the `$APPLOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-applog-meta-recursive" "fs:allow-applog-meta-recursive"
@@ -3026,14 +3040,14 @@
] ]
}, },
{ {
"description": "fs:allow-audio-meta -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta -> This allows non-recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta" "fs:allow-audio-meta"
] ]
}, },
{ {
"description": "fs:allow-audio-meta-recursive -> This allows read access to metadata of the `$AUDIO` folder, including file listing and statistics.", "description": "fs:allow-audio-meta-recursive -> This allows full recursive read access to metadata of the `$AUDIO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-audio-meta-recursive" "fs:allow-audio-meta-recursive"
@@ -3068,14 +3082,14 @@
] ]
}, },
{ {
"description": "fs:allow-cache-meta -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta -> This allows non-recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta" "fs:allow-cache-meta"
] ]
}, },
{ {
"description": "fs:allow-cache-meta-recursive -> This allows read access to metadata of the `$CACHE` folder, including file listing and statistics.", "description": "fs:allow-cache-meta-recursive -> This allows full recursive read access to metadata of the `$CACHE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-cache-meta-recursive" "fs:allow-cache-meta-recursive"
@@ -3110,14 +3124,14 @@
] ]
}, },
{ {
"description": "fs:allow-config-meta -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta -> This allows non-recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta" "fs:allow-config-meta"
] ]
}, },
{ {
"description": "fs:allow-config-meta-recursive -> This allows read access to metadata of the `$CONFIG` folder, including file listing and statistics.", "description": "fs:allow-config-meta-recursive -> This allows full recursive read access to metadata of the `$CONFIG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-config-meta-recursive" "fs:allow-config-meta-recursive"
@@ -3152,14 +3166,14 @@
] ]
}, },
{ {
"description": "fs:allow-data-meta -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta -> This allows non-recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta" "fs:allow-data-meta"
] ]
}, },
{ {
"description": "fs:allow-data-meta-recursive -> This allows read access to metadata of the `$DATA` folder, including file listing and statistics.", "description": "fs:allow-data-meta-recursive -> This allows full recursive read access to metadata of the `$DATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-data-meta-recursive" "fs:allow-data-meta-recursive"
@@ -3194,14 +3208,14 @@
] ]
}, },
{ {
"description": "fs:allow-desktop-meta -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta -> This allows non-recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta" "fs:allow-desktop-meta"
] ]
}, },
{ {
"description": "fs:allow-desktop-meta-recursive -> This allows read access to metadata of the `$DESKTOP` folder, including file listing and statistics.", "description": "fs:allow-desktop-meta-recursive -> This allows full recursive read access to metadata of the `$DESKTOP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-desktop-meta-recursive" "fs:allow-desktop-meta-recursive"
@@ -3236,14 +3250,14 @@
] ]
}, },
{ {
"description": "fs:allow-document-meta -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta -> This allows non-recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta" "fs:allow-document-meta"
] ]
}, },
{ {
"description": "fs:allow-document-meta-recursive -> This allows read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.", "description": "fs:allow-document-meta-recursive -> This allows full recursive read access to metadata of the `$DOCUMENT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-document-meta-recursive" "fs:allow-document-meta-recursive"
@@ -3278,14 +3292,14 @@
] ]
}, },
{ {
"description": "fs:allow-download-meta -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta -> This allows non-recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta" "fs:allow-download-meta"
] ]
}, },
{ {
"description": "fs:allow-download-meta-recursive -> This allows read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.", "description": "fs:allow-download-meta-recursive -> This allows full recursive read access to metadata of the `$DOWNLOAD` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-download-meta-recursive" "fs:allow-download-meta-recursive"
@@ -3320,14 +3334,14 @@
] ]
}, },
{ {
"description": "fs:allow-exe-meta -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta -> This allows non-recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta" "fs:allow-exe-meta"
] ]
}, },
{ {
"description": "fs:allow-exe-meta-recursive -> This allows read access to metadata of the `$EXE` folder, including file listing and statistics.", "description": "fs:allow-exe-meta-recursive -> This allows full recursive read access to metadata of the `$EXE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-exe-meta-recursive" "fs:allow-exe-meta-recursive"
@@ -3362,14 +3376,14 @@
] ]
}, },
{ {
"description": "fs:allow-font-meta -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta -> This allows non-recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta" "fs:allow-font-meta"
] ]
}, },
{ {
"description": "fs:allow-font-meta-recursive -> This allows read access to metadata of the `$FONT` folder, including file listing and statistics.", "description": "fs:allow-font-meta-recursive -> This allows full recursive read access to metadata of the `$FONT` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-font-meta-recursive" "fs:allow-font-meta-recursive"
@@ -3404,14 +3418,14 @@
] ]
}, },
{ {
"description": "fs:allow-home-meta -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta -> This allows non-recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta" "fs:allow-home-meta"
] ]
}, },
{ {
"description": "fs:allow-home-meta-recursive -> This allows read access to metadata of the `$HOME` folder, including file listing and statistics.", "description": "fs:allow-home-meta-recursive -> This allows full recursive read access to metadata of the `$HOME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-home-meta-recursive" "fs:allow-home-meta-recursive"
@@ -3446,14 +3460,14 @@
] ]
}, },
{ {
"description": "fs:allow-localdata-meta -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta -> This allows non-recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta" "fs:allow-localdata-meta"
] ]
}, },
{ {
"description": "fs:allow-localdata-meta-recursive -> This allows read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.", "description": "fs:allow-localdata-meta-recursive -> This allows full recursive read access to metadata of the `$LOCALDATA` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-localdata-meta-recursive" "fs:allow-localdata-meta-recursive"
@@ -3488,14 +3502,14 @@
] ]
}, },
{ {
"description": "fs:allow-log-meta -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta -> This allows non-recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta" "fs:allow-log-meta"
] ]
}, },
{ {
"description": "fs:allow-log-meta-recursive -> This allows read access to metadata of the `$LOG` folder, including file listing and statistics.", "description": "fs:allow-log-meta-recursive -> This allows full recursive read access to metadata of the `$LOG` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-log-meta-recursive" "fs:allow-log-meta-recursive"
@@ -3530,14 +3544,14 @@
] ]
}, },
{ {
"description": "fs:allow-picture-meta -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta -> This allows non-recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta" "fs:allow-picture-meta"
] ]
}, },
{ {
"description": "fs:allow-picture-meta-recursive -> This allows read access to metadata of the `$PICTURE` folder, including file listing and statistics.", "description": "fs:allow-picture-meta-recursive -> This allows full recursive read access to metadata of the `$PICTURE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-picture-meta-recursive" "fs:allow-picture-meta-recursive"
@@ -3572,14 +3586,14 @@
] ]
}, },
{ {
"description": "fs:allow-public-meta -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta -> This allows non-recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta" "fs:allow-public-meta"
] ]
}, },
{ {
"description": "fs:allow-public-meta-recursive -> This allows read access to metadata of the `$PUBLIC` folder, including file listing and statistics.", "description": "fs:allow-public-meta-recursive -> This allows full recursive read access to metadata of the `$PUBLIC` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-public-meta-recursive" "fs:allow-public-meta-recursive"
@@ -3614,14 +3628,14 @@
] ]
}, },
{ {
"description": "fs:allow-resource-meta -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta -> This allows non-recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta" "fs:allow-resource-meta"
] ]
}, },
{ {
"description": "fs:allow-resource-meta-recursive -> This allows read access to metadata of the `$RESOURCE` folder, including file listing and statistics.", "description": "fs:allow-resource-meta-recursive -> This allows full recursive read access to metadata of the `$RESOURCE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-resource-meta-recursive" "fs:allow-resource-meta-recursive"
@@ -3656,14 +3670,14 @@
] ]
}, },
{ {
"description": "fs:allow-runtime-meta -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta -> This allows non-recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta" "fs:allow-runtime-meta"
] ]
}, },
{ {
"description": "fs:allow-runtime-meta-recursive -> This allows read access to metadata of the `$RUNTIME` folder, including file listing and statistics.", "description": "fs:allow-runtime-meta-recursive -> This allows full recursive read access to metadata of the `$RUNTIME` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-runtime-meta-recursive" "fs:allow-runtime-meta-recursive"
@@ -3698,14 +3712,14 @@
] ]
}, },
{ {
"description": "fs:allow-temp-meta -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta -> This allows non-recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta" "fs:allow-temp-meta"
] ]
}, },
{ {
"description": "fs:allow-temp-meta-recursive -> This allows read access to metadata of the `$TEMP` folder, including file listing and statistics.", "description": "fs:allow-temp-meta-recursive -> This allows full recursive read access to metadata of the `$TEMP` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-temp-meta-recursive" "fs:allow-temp-meta-recursive"
@@ -3740,14 +3754,14 @@
] ]
}, },
{ {
"description": "fs:allow-template-meta -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta -> This allows non-recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta" "fs:allow-template-meta"
] ]
}, },
{ {
"description": "fs:allow-template-meta-recursive -> This allows read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.", "description": "fs:allow-template-meta-recursive -> This allows full recursive read access to metadata of the `$TEMPLATE` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-template-meta-recursive" "fs:allow-template-meta-recursive"
@@ -3782,14 +3796,14 @@
] ]
}, },
{ {
"description": "fs:allow-video-meta -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta -> This allows non-recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta" "fs:allow-video-meta"
] ]
}, },
{ {
"description": "fs:allow-video-meta-recursive -> This allows read access to metadata of the `$VIDEO` folder, including file listing and statistics.", "description": "fs:allow-video-meta-recursive -> This allows full recursive read access to metadata of the `$VIDEO` folder, including file listing and statistics.",
"type": "string", "type": "string",
"enum": [ "enum": [
"fs:allow-video-meta-recursive" "fs:allow-video-meta-recursive"
@@ -5584,6 +5598,13 @@
"shell:allow-open" "shell:allow-open"
] ]
}, },
{
"description": "shell:allow-spawn -> Enables the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:allow-spawn"
]
},
{ {
"description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.", "description": "shell:allow-stdin-write -> Enables the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -5612,6 +5633,13 @@
"shell:deny-open" "shell:deny-open"
] ]
}, },
{
"description": "shell:deny-spawn -> Denies the spawn command without any pre-configured scope.",
"type": "string",
"enum": [
"shell:deny-spawn"
]
},
{ {
"description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.", "description": "shell:deny-stdin-write -> Denies the stdin_write command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -6066,6 +6094,13 @@
"window:allow-current-monitor" "window:allow-current-monitor"
] ]
}, },
{
"description": "window:allow-cursor-position -> Enables the cursor_position command without any pre-configured scope.",
"type": "string",
"enum": [
"window:allow-cursor-position"
]
},
{ {
"description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.", "description": "window:allow-destroy -> Enables the destroy command without any pre-configured scope.",
"type": "string", "type": "string",
@@ -6493,6 +6528,13 @@
"window:deny-current-monitor" "window:deny-current-monitor"
] ]
}, },
{
"description": "window:deny-cursor-position -> Denies the cursor_position command without any pre-configured scope.",
"type": "string",
"enum": [
"window:deny-cursor-position"
]
},
{ {
"description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.", "description": "window:deny-destroy -> Denies the destroy command without any pre-configured scope.",
"type": "string", "type": "string",
-8
View File
@@ -57,14 +57,6 @@ pub fn close_column(label: &str, app_handle: tauri::AppHandle) -> Result<bool, (
} }
} }
#[tauri::command]
pub fn get_path(label: &str, app_handle: tauri::AppHandle) -> Result<String, String> {
match app_handle.get_webview(label) {
Some(webview) => Ok(webview.url().to_string()),
None => Err("Webview not found".into()),
}
}
#[tauri::command] #[tauri::command]
pub fn navigate(label: &str, url: &str, app_handle: tauri::AppHandle) -> Result<(), String> { pub fn navigate(label: &str, url: &str, app_handle: tauri::AppHandle) -> Result<(), String> {
match app_handle.get_webview(label) { match app_handle.get_webview(label) {
-1
View File
@@ -145,7 +145,6 @@ fn main() {
commands::window::reposition_column, commands::window::reposition_column,
commands::window::resize_column, commands::window::resize_column,
commands::window::open_window, commands::window::open_window,
commands::window::get_path,
commands::window::navigate, commands::window::navigate,
commands::window::set_badge commands::window::set_badge
]) ])
+18 -10
View File
@@ -9,7 +9,15 @@ pub async fn get_event(id: &str, state: State<'_, Nostr>) -> Result<String, Stri
let event_id: Option<EventId> = match Nip19::from_bech32(id) { let event_id: Option<EventId> = match Nip19::from_bech32(id) {
Ok(val) => match val { Ok(val) => match val {
Nip19::EventId(id) => Some(id), Nip19::EventId(id) => Some(id),
Nip19::Event(event) => Some(event.event_id), Nip19::Event(event) => {
let relays = event.relays;
for relay in relays.into_iter() {
let url = Url::from_str(&relay).unwrap();
let _ = client.add_relay(url.clone()).await.unwrap_or_default();
client.connect_relay(url).await.unwrap_or_default();
}
Some(event.event_id)
}
_ => None, _ => None,
}, },
Err(_) => match EventId::from_hex(id) { Err(_) => match EventId::from_hex(id) {
@@ -18,23 +26,25 @@ pub async fn get_event(id: &str, state: State<'_, Nostr>) -> Result<String, Stri
}, },
}; };
if let Some(id) = event_id { match event_id {
Some(id) => {
let filter = Filter::new().id(id); let filter = Filter::new().id(id);
if let Ok(events) = &client match &client
.get_events_of(vec![filter], Some(Duration::from_secs(10))) .get_events_of(vec![filter], Some(Duration::from_secs(10)))
.await .await
{ {
Ok(events) => {
if let Some(event) = events.first() { if let Some(event) = events.first() {
Ok(event.as_json()) Ok(event.as_json())
} else { } else {
Err("Event not found with current relay list".into()) Err("Cannot found this event with current relay list".into())
} }
} else {
Err("Event not found with current relay list".into())
} }
} else { Err(err) => Err(err.to_string()),
Err("EventId is not valid".into()) }
}
None => Err("Event ID is not valid.".into()),
} }
} }
@@ -213,8 +223,6 @@ pub async fn search(
limit: usize, limit: usize,
state: State<'_, Nostr>, state: State<'_, Nostr>,
) -> Result<Vec<Event>, String> { ) -> Result<Vec<Event>, String> {
println!("search: {}", content);
let client = &state.client; let client = &state.client;
let filter = Filter::new() let filter = Filter::new()
.kinds(vec![Kind::TextNote, Kind::Metadata]) .kinds(vec![Kind::TextNote, Kind::Metadata])
+4 -11
View File
@@ -206,15 +206,12 @@ pub async fn load_selected_account(npub: &str, state: State<'_, Nostr>) -> Resul
// Add relay to relay pool // Add relay to relay pool
let _ = client let _ = client
.add_relay_with_opts(relay_url, opts) .add_relay_with_opts(relay_url.clone(), opts)
.await .await
.unwrap_or_default(); .unwrap_or_default();
// Connect relay // Connect relay
client client.connect_relay(relay_url).await.unwrap_or_default();
.connect_relay(item.0.to_string())
.await
.unwrap_or_default();
} }
} }
} }
@@ -251,14 +248,10 @@ pub fn to_npub(hex: &str) -> Result<String, ()> {
Ok(npub.to_bech32().unwrap()) Ok(npub.to_bech32().unwrap())
} }
#[tauri::command(async)] #[tauri::command]
pub async fn verify_nip05(key: &str, nip05: &str) -> Result<bool, ()> { pub async fn verify_nip05(key: &str, nip05: &str) -> Result<bool, ()> {
let public_key = PublicKey::from_str(key).unwrap(); let public_key = PublicKey::from_str(key).unwrap();
let status = nip05::verify(public_key, nip05, None).await; let status = nip05::verify(public_key, nip05, None).await;
if status.is_ok() { Ok(status.is_ok())
Ok(true)
} else {
Ok(false)
}
} }
+10 -24
View File
@@ -104,8 +104,6 @@ pub async fn friend_to_friend(npub: &str, state: State<'_, Nostr>) -> Result<boo
} }
} }
println!("contact list: {}", contact_list.len());
match client.set_contact_list(contact_list).await { match client.set_contact_list(contact_list).await {
Ok(_) => Ok(true), Ok(_) => Ok(true),
Err(err) => Err(err.to_string()), Err(err) => Err(err.to_string()),
@@ -306,10 +304,7 @@ pub async fn set_nstore(
let builder = EventBuilder::new(Kind::ApplicationSpecificData, encrypted, vec![tag]); let builder = EventBuilder::new(Kind::ApplicationSpecificData, encrypted, vec![tag]);
match client.send_event_builder(builder).await { match client.send_event_builder(builder).await {
Ok(event_id) => { Ok(event_id) => Ok(event_id),
println!("set nstore: {}", event_id);
Ok(event_id)
}
Err(err) => Err(err.to_string()), Err(err) => Err(err.to_string()),
} }
} }
@@ -322,38 +317,29 @@ pub async fn get_nstore(key: &str, state: State<'_, Nostr>) -> Result<String, St
let client = &state.client; let client = &state.client;
if let Ok(signer) = client.signer().await { if let Ok(signer) = client.signer().await {
let public_key = signer.public_key().await; let public_key = signer.public_key().await.unwrap();
if let Ok(author) = public_key {
let filter = Filter::new() let filter = Filter::new()
.author(author) .author(public_key)
.kind(Kind::ApplicationSpecificData) .kind(Kind::ApplicationSpecificData)
.identifier(key) .identifier(key)
.limit(1); .limit(1);
let query = client match client
.get_events_of(vec![filter], Some(Duration::from_secs(10))) .get_events_of(vec![filter], Some(Duration::from_secs(5)))
.await; .await
{
if let Ok(events) = query { Ok(events) => {
if let Some(event) = events.first() { if let Some(event) = events.first() {
println!("get nstore key: {} - received: {}", key, event.id);
let content = event.content(); let content = event.content();
match signer.nip44_decrypt(public_key, content).await {
match signer.nip44_decrypt(author, content).await {
Ok(decrypted) => Ok(decrypted), Ok(decrypted) => Ok(decrypted),
Err(_) => Err(event.content.to_string()), Err(_) => Err(event.content.to_string()),
} }
} else { } else {
println!("get nstore key: {}", key);
Err("Value not found".into()) Err("Value not found".into())
} }
} else {
Err("Query nstore event failed".into())
} }
} else { Err(err) => Err(err.to_string()),
Err("Something is wrong".into())
} }
} else { } else {
Err("Signer is required".into()) Err("Signer is required".into())
+1 -1
View File
@@ -1,7 +1,7 @@
{ {
"$schema": "../node_modules/@tauri-apps/cli/schema.json", "$schema": "../node_modules/@tauri-apps/cli/schema.json",
"productName": "Lume", "productName": "Lume",
"version": "4.0.0", "version": "4.0.2",
"identifier": "nu.lume.Lume", "identifier": "nu.lume.Lume",
"build": { "build": {
"beforeBuildCommand": "pnpm desktop:build", "beforeBuildCommand": "pnpm desktop:build",