From 9fb6fbdf24dd08a096cd7435ca173383a72c8ec1 Mon Sep 17 00:00:00 2001 From: Dawid Urbas Date: Thu, 23 May 2024 15:17:23 +0200 Subject: [PATCH 1/4] Add possibility to add default data when publishing happ --- .husky/pre-commit | 3 +- README.md | 6 + package.json | 4 + src/main/index.ts | 50 +-- src/renderer/src/app.postcss | 4 + src/renderer/src/lib/const/launcher.ts | 3 +- src/renderer/src/lib/icons/Publisher.svelte | 10 + src/renderer/src/lib/icons/index.ts | 1 + src/renderer/src/lib/locale/en/common.json | 5 + .../src/lib/modal/AddNewHappVersion.svelte | 11 +- .../src/lib/modal/AddPublisher.svelte | 69 ----- src/renderer/src/lib/modal/index.ts | 1 - src/renderer/src/lib/types/components.ts | 2 - src/renderer/src/routes/+layout.svelte | 9 +- .../src/routes/settings/(menu)/+layout.svelte | 27 ++ .../routes/settings/{ => (menu)}/+page.svelte | 0 .../settings/{ => (menu)}/[slug]/+layout.ts | 0 .../settings/{ => (menu)}/[slug]/+page.svelte | 2 +- .../settings/{ => (menu)}/dev/+page.svelte | 27 +- .../dev/app}/[slug]/+layout.svelte | 0 .../{dev => (menu)/dev/app}/[slug]/+layout.ts | 0 .../dev/app}/[slug]/+page.svelte | 0 .../dev/publisher/+layout@settings.svelte | 5 + .../(menu)/dev/publisher/+page.svelte | 22 ++ .../(menu)/dev/publisher/add/+page.svelte | 64 ++++ .../src/routes/settings/+layout.svelte | 31 +- .../routes/settings/components/DevMenu.svelte | 4 +- .../{TopBar.svelte => TopBarSettings.svelte} | 21 +- .../src/routes/settings/components/index.ts | 2 +- src/renderer/tailwind.config.ts | 2 +- yarn.lock | 292 +++++++++++++++++- 31 files changed, 505 insertions(+), 172 deletions(-) create mode 100644 src/renderer/src/lib/icons/Publisher.svelte delete mode 100644 src/renderer/src/lib/modal/AddPublisher.svelte create mode 100644 src/renderer/src/routes/settings/(menu)/+layout.svelte rename src/renderer/src/routes/settings/{ => (menu)}/+page.svelte (100%) rename src/renderer/src/routes/settings/{ => (menu)}/[slug]/+layout.ts (100%) rename src/renderer/src/routes/settings/{ => (menu)}/[slug]/+page.svelte (99%) rename src/renderer/src/routes/settings/{ => (menu)}/dev/+page.svelte (74%) rename src/renderer/src/routes/settings/{dev => (menu)/dev/app}/[slug]/+layout.svelte (100%) rename src/renderer/src/routes/settings/{dev => (menu)/dev/app}/[slug]/+layout.ts (100%) rename src/renderer/src/routes/settings/{dev => (menu)/dev/app}/[slug]/+page.svelte (100%) create mode 100644 src/renderer/src/routes/settings/(menu)/dev/publisher/+layout@settings.svelte create mode 100644 src/renderer/src/routes/settings/(menu)/dev/publisher/+page.svelte create mode 100644 src/renderer/src/routes/settings/(menu)/dev/publisher/add/+page.svelte rename src/renderer/src/routes/settings/components/{TopBar.svelte => TopBarSettings.svelte} (73%) diff --git a/.husky/pre-commit b/.husky/pre-commit index 7ce7052c..1a1f1f06 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,2 +1 @@ -yarn lintAndFormatAllPrePush - +yarn lint-staged \ No newline at end of file diff --git a/README.md b/README.md index dc905c8a..520e408f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,12 @@ Build the sidecar binaries (requires Rust and Go installed): bash ./scripts/setup-binaries.sh ``` +or fetch with + +```bash +yarn fetch:binaries +``` + Build the Node Rust-add-ons ```bash diff --git a/package.json b/package.json index ea1a11bd..801d3d4d 100644 --- a/package.json +++ b/package.json @@ -70,6 +70,9 @@ "winston": "3.13.0", "zod": "^3.23.6" }, + "lint-staged": { + "*.{js,ts,svelte,json,postcss,html}": "yarn lintAndFormatAllPrePush" + }, "devDependencies": { "@electron-toolkit/eslint-config-prettier": "^2.0.0", "@electron-toolkit/eslint-config-ts": "^2.0.0", @@ -91,6 +94,7 @@ "get-port": "7.1.0", "husky": "^9.0.11", "js-yaml": "^4.1.0", + "lint-staged": "^15.2.4", "mocha": "10.4.0", "prettier": "^3.1.1", "rimraf": "5.0.5", diff --git a/src/main/index.ts b/src/main/index.ts index 722e55b7..1b1d1792 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -4,7 +4,7 @@ import { AppWebsocket, type CallZomeRequest } from '@holochain/client'; import { decode } from '@msgpack/msgpack'; import { initTRPC } from '@trpc/server'; import type { AppVersionEntry } from 'appstore-tools'; -import { AppstoreAppClient, DevhubAppClient } from 'appstore-tools'; +import { AppstoreAppClient } from 'appstore-tools'; import { webhappToHappAndUi } from 'appstore-tools'; import * as childProcess from 'child_process'; import { Command, Option } from 'commander'; @@ -206,7 +206,7 @@ const WINDOW_INFO_MAP: WindowInfoRecord = {}; // WindowInfo by webContents.id - const APP_CLIENTS: Record = {}; let APPSTORE_APP_CLIENT: AppstoreAppClient | undefined; -let DEVHUB_APP_CLIENT: DevhubAppClient | undefined; +// let DEVHUB_APP_CLIENT: DevhubAppClient | undefined; const handleSignZomeCall = async (e: IpcMainInvokeEvent, request: CallZomeRequest) => { // TODO check here that cellId belongs to the installedAppId that the window belongs to @@ -466,15 +466,14 @@ const getAppstoreAppClient = async () => { return APPSTORE_APP_CLIENT; }; -// eslint-disable-next-line @typescript-eslint/no-unused-vars -const getDevhubAppClient = async () => { - if (DEVHUB_APP_CLIENT) return DEVHUB_APP_CLIENT; - if (!DEFAULT_HOLOCHAIN_DATA_ROOT) throw new Error('Default holochain data root is not defined.'); - const appClient = await getAppClient(DEVHUB_APP_ID); - const devhubAppClient = new DevhubAppClient(appClient); - DEVHUB_APP_CLIENT = devhubAppClient; - return DEVHUB_APP_CLIENT; -}; +// const getDevhubAppClient = async () => { +// if (DEVHUB_APP_CLIENT) return DEVHUB_APP_CLIENT; +// if (!DEFAULT_HOLOCHAIN_DATA_ROOT) throw new Error('Default holochain data root is not defined.'); +// const appClient = await getAppClient(DEVHUB_APP_ID); +// const devhubAppClient = new DevhubAppClient(appClient); +// DEVHUB_APP_CLIENT = devhubAppClient; +// return DEVHUB_APP_CLIENT; +// }; const router = t.router({ openSettings: t.procedure.mutation(() => { @@ -664,18 +663,23 @@ const router = t.router({ launch: handlePasswordInput(handleLaunch), initializeDefaultAppPorts: t.procedure.query(async () => { const defaultHolochainManager = HOLOCHAIN_MANAGERS[DEFAULT_HOLOCHAIN_DATA_ROOT!.name]; - const appstoreAuthenticationToken = await defaultHolochainManager.getAppToken(APP_STORE_APP_ID); - const devhubAuthenticationToken = await defaultHolochainManager.getAppToken(DEVHUB_APP_ID); - if (!appstoreAuthenticationToken) { - return throwTRPCErrorError({ - message: NO_APPSTORE_AUTHENTICATION_TOKEN_FOUND, - }); - } - if (isDevhubInstalled(HOLOCHAIN_MANAGERS) && !devhubAuthenticationToken) { - return throwTRPCErrorError({ - message: NO_DEVHUB_AUTHENTICATION_TOKEN_FOUND, - }); - } + + const getTokenOrThrow = async (appId: string, errorMessage: string) => { + const token = await defaultHolochainManager.getAppToken(appId); + if (!token) { + throwTRPCErrorError({ message: errorMessage }); + } + return token; + }; + + const appstoreAuthenticationToken = await getTokenOrThrow( + APP_STORE_APP_ID, + NO_APPSTORE_AUTHENTICATION_TOKEN_FOUND, + ); + const devhubAuthenticationToken = isDevhubInstalled(HOLOCHAIN_MANAGERS) + ? await getTokenOrThrow(DEVHUB_APP_ID, NO_DEVHUB_AUTHENTICATION_TOKEN_FOUND) + : undefined; + return validateWithZod({ schema: InitializeAppPortsSchema, data: { diff --git a/src/renderer/src/app.postcss b/src/renderer/src/app.postcss index 76784a17..6c567b6e 100644 --- a/src/renderer/src/app.postcss +++ b/src/renderer/src/app.postcss @@ -56,6 +56,10 @@ body { @apply bg-button-gradient font-semibold; } +.btn-happ-button { + @apply btn bg-add-happ-button font-semibold; +} + .btn-secondary, .btn-install { @apply border border-surface-400 bg-transparent !text-sm; diff --git a/src/renderer/src/lib/const/launcher.ts b/src/renderer/src/lib/const/launcher.ts index 4878d9cf..854f4d56 100644 --- a/src/renderer/src/lib/const/launcher.ts +++ b/src/renderer/src/lib/const/launcher.ts @@ -2,13 +2,14 @@ import { SETTINGS_SCREEN } from '$shared/const'; export const MODAL_INSTALL_FROM_FILE = 'modalInstallFromFile'; export const MODAL_INSTALL_KANDO = 'modalInstallKando'; -export const MODAL_ADD_PUBLISHER = 'modalAddPublisher'; export const MODAL_ADD_NEW_HAPP_VERSION = 'modalAddNewHappVersion'; export const MODAL_DEVHUB_INSTALLATION_CONFIRMATION = 'modalDevHubInstallationConfirmation'; export const SELECTED_ICON_STYLE = 'fill-light-primary dark:fill-white'; export const DEV_PAGE = `${SETTINGS_SCREEN}/dev`; +export const DEV_APP_PAGE = `${DEV_PAGE}/app`; +export const PUBLISHER_SCREEN = `${DEV_PAGE}/publisher`; export const SEARCH_URL_QUERY = 'search'; export const PRESEARCH_URL_QUERY = 'presearch'; diff --git a/src/renderer/src/lib/icons/Publisher.svelte b/src/renderer/src/lib/icons/Publisher.svelte new file mode 100644 index 00000000..8f8eb0e1 --- /dev/null +++ b/src/renderer/src/lib/icons/Publisher.svelte @@ -0,0 +1,10 @@ + + + + diff --git a/src/renderer/src/lib/icons/index.ts b/src/renderer/src/lib/icons/index.ts index 0ae61c3f..73828bf3 100644 --- a/src/renderer/src/lib/icons/index.ts +++ b/src/renderer/src/lib/icons/index.ts @@ -11,6 +11,7 @@ export { default as MenuGear } from './Menu-Gear.svelte'; export { default as MenuInfo } from './Menu-Info.svelte'; export { default as PasswordEye } from './PasswordEye.svelte'; export { default as Plus } from './Plus.svelte'; +export { default as Publisher } from './Publisher.svelte'; export { default as Rocket } from './Rocket.svelte'; export { default as Upload } from './Upload.svelte'; export { default as UploadImage } from './UploadImage.svelte'; diff --git a/src/renderer/src/lib/locale/en/common.json b/src/renderer/src/lib/locale/en/common.json index 2e30e66c..6bb597d1 100644 --- a/src/renderer/src/lib/locale/en/common.json +++ b/src/renderer/src/lib/locale/en/common.json @@ -48,9 +48,12 @@ "passwordPlaceholder": "Enter your password", "passwordWarning": "Your password can not be reset, recovered or changed. Save it in your password manager or some other secure location.", "passwordsDontMatch": "Passwords don't match!", + "publishYourApp": "Publish your App", + "publishingDashboard": "Publishing Dashboard", "region": "Region", "releases": "Releases", "searchForApps": "Search for apps", + "setUpYourPublisherAccount": "Set up your publisher account", "setYourPassword": "Set your password", "setupError": "Setup Error", "setupProgress": "Setup Progress", @@ -62,9 +65,11 @@ "uninstall": "Uninstall", "updateAvailable": "Update available", "uploadAndPublish": "upload and publish apps", + "uploadYourBundle": "Upload your bundle", "useWebhappFileToAddHapp": "Use a webhapp file to add your hApp", "versionHistory": "Version History", "website": "Website", + "welcomeToTheHolochainLauncherDeveloperDashboard": "Welcome to the Holochain Launcher Developer Dashboard! Sharing your app with the world begins with creating a publisher account.", "whatDoYouWantToInstall": "What do you want to install?", "yourHapps": "Your hApps" } diff --git a/src/renderer/src/lib/modal/AddNewHappVersion.svelte b/src/renderer/src/lib/modal/AddNewHappVersion.svelte index e26a111f..4242034a 100644 --- a/src/renderer/src/lib/modal/AddNewHappVersion.svelte +++ b/src/renderer/src/lib/modal/AddNewHappVersion.svelte @@ -1,5 +1,7 @@ - -{#if $modalStore[0]} -
-
- {$i18n.t('addPublisher')} -
-
-{/if} diff --git a/src/renderer/src/lib/modal/index.ts b/src/renderer/src/lib/modal/index.ts index 8e0e9fb1..093b9f6e 100644 --- a/src/renderer/src/lib/modal/index.ts +++ b/src/renderer/src/lib/modal/index.ts @@ -1,5 +1,4 @@ export { default as AddNewHappVersion } from './AddNewHappVersion.svelte'; -export { default as AddPublisher } from './AddPublisher.svelte'; export { default as DevHubInstallationConfirmation } from './DevHubInstallationConfirmation.svelte'; export { default as InstallAppFromHashes } from './InstallAppFromHashes.svelte'; export { default as InstallFromFile } from './InstallFromFile.svelte'; diff --git a/src/renderer/src/lib/types/components.ts b/src/renderer/src/lib/types/components.ts index fa43f5a9..518bb114 100644 --- a/src/renderer/src/lib/types/components.ts +++ b/src/renderer/src/lib/types/components.ts @@ -1,6 +1,5 @@ import { MODAL_ADD_NEW_HAPP_VERSION, - MODAL_ADD_PUBLISHER, MODAL_DEVHUB_INSTALLATION_CONFIRMATION, MODAL_INSTALL_FROM_FILE, MODAL_INSTALL_KANDO @@ -25,7 +24,6 @@ type TextProps = { export type Modals = | typeof MODAL_INSTALL_FROM_FILE | typeof MODAL_INSTALL_KANDO - | typeof MODAL_ADD_PUBLISHER | typeof MODAL_ADD_NEW_HAPP_VERSION | typeof MODAL_DEVHUB_INSTALLATION_CONFIRMATION; diff --git a/src/renderer/src/routes/+layout.svelte b/src/renderer/src/routes/+layout.svelte index ae57f564..4575d69c 100644 --- a/src/renderer/src/routes/+layout.svelte +++ b/src/renderer/src/routes/+layout.svelte @@ -5,24 +5,17 @@ import { QueryClient, QueryClientProvider } from '@tanstack/svelte-query'; import { - MODAL_ADD_PUBLISHER, MODAL_DEVHUB_INSTALLATION_CONFIRMATION, MODAL_INSTALL_FROM_FILE, MODAL_INSTALL_KANDO } from '$const'; - import { - AddPublisher, - DevHubInstallationConfirmation, - InstallFromFile, - InstallKando - } from '$modal'; + import { DevHubInstallationConfirmation, InstallFromFile, InstallKando } from '$modal'; const queryClient = new QueryClient(); const modalRegistry: Record = { [MODAL_INSTALL_FROM_FILE]: { ref: InstallFromFile }, [MODAL_INSTALL_KANDO]: { ref: InstallKando }, - [MODAL_ADD_PUBLISHER]: { ref: AddPublisher }, [MODAL_DEVHUB_INSTALLATION_CONFIRMATION]: { ref: DevHubInstallationConfirmation } }; diff --git a/src/renderer/src/routes/settings/(menu)/+layout.svelte b/src/renderer/src/routes/settings/(menu)/+layout.svelte new file mode 100644 index 00000000..77483f29 --- /dev/null +++ b/src/renderer/src/routes/settings/(menu)/+layout.svelte @@ -0,0 +1,27 @@ + + +
+
+
+
+ {#if isDevPage} + + {:else} + + {/if} +
+
+
+
+ +
+
diff --git a/src/renderer/src/routes/settings/+page.svelte b/src/renderer/src/routes/settings/(menu)/+page.svelte similarity index 100% rename from src/renderer/src/routes/settings/+page.svelte rename to src/renderer/src/routes/settings/(menu)/+page.svelte diff --git a/src/renderer/src/routes/settings/[slug]/+layout.ts b/src/renderer/src/routes/settings/(menu)/[slug]/+layout.ts similarity index 100% rename from src/renderer/src/routes/settings/[slug]/+layout.ts rename to src/renderer/src/routes/settings/(menu)/[slug]/+layout.ts diff --git a/src/renderer/src/routes/settings/[slug]/+page.svelte b/src/renderer/src/routes/settings/(menu)/[slug]/+page.svelte similarity index 99% rename from src/renderer/src/routes/settings/[slug]/+page.svelte rename to src/renderer/src/routes/settings/(menu)/[slug]/+page.svelte index 69045c7b..f38b88a7 100644 --- a/src/renderer/src/routes/settings/[slug]/+page.svelte +++ b/src/renderer/src/routes/settings/(menu)/[slug]/+page.svelte @@ -24,7 +24,7 @@ import { getErrorMessage } from '$shared/helpers'; import type { UpdateUiFromHash } from '$shared/types'; - import { DashedSection } from '../components'; + import { DashedSection } from '../../components'; const client = trpc(); diff --git a/src/renderer/src/routes/settings/dev/+page.svelte b/src/renderer/src/routes/settings/(menu)/dev/+page.svelte similarity index 74% rename from src/renderer/src/routes/settings/dev/+page.svelte rename to src/renderer/src/routes/settings/(menu)/dev/+page.svelte index c8e8edfd..11f3767c 100644 --- a/src/renderer/src/routes/settings/dev/+page.svelte +++ b/src/renderer/src/routes/settings/(menu)/dev/+page.svelte @@ -1,9 +1,11 @@ + + +

{$i18n.t('publishingDashboard')}

+

+ {$i18n.t('welcomeToTheHolochainLauncherDeveloperDashboard')} +

+ diff --git a/src/renderer/src/routes/settings/(menu)/dev/publisher/add/+page.svelte b/src/renderer/src/routes/settings/(menu)/dev/publisher/add/+page.svelte new file mode 100644 index 00000000..9fb380c2 --- /dev/null +++ b/src/renderer/src/routes/settings/(menu)/dev/publisher/add/+page.svelte @@ -0,0 +1,64 @@ + + +
+ {$i18n.t('setUpYourPublisherAccount')} +
+