From f9fddf321d41c54b422e31ecb8b0cb2ed7b482ca Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Sun, 16 Apr 2023 21:08:13 +0200 Subject: [PATCH 1/4] feat: remove invitation code --- src/console/console.did | 2 +- src/console/src/lib.rs | 4 +- src/console/src/mission_control.rs | 16 +++----- src/declarations/console/console.did.d.ts | 2 +- .../console/console.factory.did.js | 2 +- .../console/console.factory.did.mjs | 2 +- .../src/lib/api/mission-control.api.ts | 7 +--- .../src/lib/components/core/SignIn.svelte | 39 +------------------ .../lib/services/mission-control.services.ts | 14 +++---- src/frontend/src/lib/stores/auth.store.ts | 8 +--- src/frontend/src/routes/+layout.svelte | 3 +- 11 files changed, 21 insertions(+), 78 deletions(-) diff --git a/src/console/console.did b/src/console/console.did index 05901ab25e..edabd35d0b 100644 --- a/src/console/console.did +++ b/src/console/console.did @@ -37,7 +37,7 @@ service : { get_credits : () -> (Tokens) query; get_releases_version : () -> (ReleasesVersion) query; get_user_mission_control_center : () -> (opt MissionControl) query; - init_user_mission_control_center : (opt text) -> (MissionControl); + init_user_mission_control_center : () -> (MissionControl); list_user_mission_control_centers : () -> ( vec record { principal; MissionControl }, ) query; diff --git a/src/console/src/lib.rs b/src/console/src/lib.rs index d45b60b9da..9a834ff43f 100644 --- a/src/console/src/lib.rs +++ b/src/console/src/lib.rs @@ -152,11 +152,11 @@ fn list_user_mission_control_centers() -> MissionControls { #[candid_method(update)] #[update] -async fn init_user_mission_control_center(invitation_code: Option) -> MissionControl { +async fn init_user_mission_control_center() -> MissionControl { let caller = caller(); let console = id(); - init_user_mission_control(&console, &caller, &invitation_code) + init_user_mission_control(&console, &caller) .await .unwrap_or_else(|e| trap(&e)) } diff --git a/src/console/src/mission_control.rs b/src/console/src/mission_control.rs index 1a63bd520b..dc65b9bb6c 100644 --- a/src/console/src/mission_control.rs +++ b/src/console/src/mission_control.rs @@ -1,7 +1,7 @@ use crate::controllers::update_mission_control_controllers; use crate::store::{ add_mission_control, delete_mission_control, get_mission_control, - increment_mission_controls_rate, init_empty_mission_control, redeem_invitation_code, + increment_mission_controls_rate, init_empty_mission_control, }; use crate::types::state::MissionControl; use crate::wasm::mission_control_wasm_arg; @@ -13,23 +13,17 @@ use shared::types::state::UserId; pub async fn init_user_mission_control( console: &Principal, caller: &Principal, - invitation_code: &Option, ) -> Result { let result = get_mission_control(caller); match result { Err(error) => Err(error.to_string()), Ok(mission_control) => match mission_control { Some(mission_control) => Ok(mission_control), - None => match invitation_code { - None => Err("No invitation code provided.".to_string()), - Some(invitation_code) => { - // Guard too many requests - increment_mission_controls_rate()?; + None => { + // Guard too many requests + increment_mission_controls_rate()?; - redeem_invitation_code(caller, invitation_code)?; - - create_mission_control(caller, console).await - } + create_mission_control(caller, console).await }, }, } diff --git a/src/declarations/console/console.did.d.ts b/src/declarations/console/console.did.d.ts index a8ccd07e38..4d3f8456fa 100644 --- a/src/declarations/console/console.did.d.ts +++ b/src/declarations/console/console.did.d.ts @@ -55,7 +55,7 @@ export interface _SERVICE { get_credits: ActorMethod<[], Tokens>; get_releases_version: ActorMethod<[], ReleasesVersion>; get_user_mission_control_center: ActorMethod<[], [] | [MissionControl]>; - init_user_mission_control_center: ActorMethod<[[] | [string]], MissionControl>; + init_user_mission_control_center: ActorMethod<[], MissionControl>; list_user_mission_control_centers: ActorMethod<[], Array<[Principal, MissionControl]>>; load_release: ActorMethod<[Segment, Uint8Array | number[], string], LoadRelease>; reset_release: ActorMethod<[Segment], undefined>; diff --git a/src/declarations/console/console.factory.did.js b/src/declarations/console/console.factory.did.js index 0ac03c3fa6..216151601e 100644 --- a/src/declarations/console/console.factory.did.js +++ b/src/declarations/console/console.factory.did.js @@ -49,7 +49,7 @@ export const idlFactory = ({ IDL }) => { get_credits: IDL.Func([], [Tokens], ['query']), get_releases_version: IDL.Func([], [ReleasesVersion], ['query']), get_user_mission_control_center: IDL.Func([], [IDL.Opt(MissionControl)], ['query']), - init_user_mission_control_center: IDL.Func([IDL.Opt(IDL.Text)], [MissionControl], []), + init_user_mission_control_center: IDL.Func([], [MissionControl], []), list_user_mission_control_centers: IDL.Func( [], [IDL.Vec(IDL.Tuple(IDL.Principal, MissionControl))], diff --git a/src/declarations/console/console.factory.did.mjs b/src/declarations/console/console.factory.did.mjs index 0ac03c3fa6..216151601e 100644 --- a/src/declarations/console/console.factory.did.mjs +++ b/src/declarations/console/console.factory.did.mjs @@ -49,7 +49,7 @@ export const idlFactory = ({ IDL }) => { get_credits: IDL.Func([], [Tokens], ['query']), get_releases_version: IDL.Func([], [ReleasesVersion], ['query']), get_user_mission_control_center: IDL.Func([], [IDL.Opt(MissionControl)], ['query']), - init_user_mission_control_center: IDL.Func([IDL.Opt(IDL.Text)], [MissionControl], []), + init_user_mission_control_center: IDL.Func([], [MissionControl], []), list_user_mission_control_centers: IDL.Func( [], [IDL.Vec(IDL.Tuple(IDL.Principal, MissionControl))], diff --git a/src/frontend/src/lib/api/mission-control.api.ts b/src/frontend/src/lib/api/mission-control.api.ts index 7a89440e0d..6029dda69d 100644 --- a/src/frontend/src/lib/api/mission-control.api.ts +++ b/src/frontend/src/lib/api/mission-control.api.ts @@ -8,25 +8,22 @@ import { Principal } from '@dfinity/principal'; export const initMissionControl = async ({ identity, - invitationCode, onInitMissionControlSuccess }: { identity: Identity; - invitationCode: string | undefined | null; onInitMissionControlSuccess: (missionControlId: Principal) => Promise; }) => // eslint-disable-next-line no-async-promise-executor new Promise(async (resolve, reject) => { try { const { actor, missionControlId } = await getMissionControl({ - identity, - invitationCode + identity }); if (!actor || !missionControlId) { setTimeout(async () => { try { - await initMissionControl({ identity, invitationCode, onInitMissionControlSuccess }); + await initMissionControl({ identity, onInitMissionControlSuccess }); resolve(); } catch (err: unknown) { reject(err); diff --git a/src/frontend/src/lib/components/core/SignIn.svelte b/src/frontend/src/lib/components/core/SignIn.svelte index 87367ad9b8..b529513107 100644 --- a/src/frontend/src/lib/components/core/SignIn.svelte +++ b/src/frontend/src/lib/components/core/SignIn.svelte @@ -1,7 +1,6 @@
@@ -48,41 +46,6 @@
- -
-

Redeem code

- -

- Join Juno's closed beta with an invitation code or reach out to - - David - to request one. -

- -

Sign in using Internet Identity once you have your code.

- -
- - - -
-
-
- diff --git a/src/frontend/src/lib/components/core/SignIn.svelte b/src/frontend/src/lib/components/core/SignIn.svelte index b529513107..63577969f2 100644 --- a/src/frontend/src/lib/components/core/SignIn.svelte +++ b/src/frontend/src/lib/components/core/SignIn.svelte @@ -1,28 +1,9 @@
@@ -35,14 +16,12 @@
@@ -69,14 +48,14 @@ h1 { color: var(--color-primary); - padding: 0 0 var(--padding-4x); + padding: 0 0 var(--padding-3x); --bigger-title: 1.2; font-size: calc(var(--font-size-h1) * var(--bigger-title)); } .sign-in { - padding: var(--padding-4x) 0 0; + padding: var(--padding-1_5x) 0 0; } .content { @@ -86,10 +65,4 @@ margin: 0; } } - - .sign-in-now { - padding: var(--padding-2x) 0; - font-size: var(--font-size-very-small); - max-width: 280px; - } diff --git a/src/frontend/src/lib/components/core/User.svelte b/src/frontend/src/lib/components/core/User.svelte index a624b0b060..1f246cef70 100644 --- a/src/frontend/src/lib/components/core/User.svelte +++ b/src/frontend/src/lib/components/core/User.svelte @@ -8,7 +8,6 @@ import IconSignIn from '$lib/components/icons/IconSignIn.svelte'; import { i18n } from '$lib/stores/i18n.store'; import IconMissionControl from '$lib/components/icons/IconMissionControl.svelte'; - import AlreadyRegistered from '$lib/components/core/AlreadyRegistered.svelte'; import IconTelescope from '$lib/components/icons/IconTelescope.svelte'; import IconRaygun from '$lib/components/icons/IconRaygun.svelte'; @@ -29,7 +28,7 @@ {$i18n.core.user_menu} {:else if signIn} - (visible = true)} bind:button> + {$i18n.core.sign_in} @@ -37,53 +36,43 @@
- {#if $authSignedInStore} - - - {$i18n.mission_control.title} - + + + {$i18n.mission_control.title} + - - - {$i18n.observatory.title} - + + + {$i18n.observatory.title} + - - - {$i18n.settings.title} - + + + {$i18n.settings.title} + - - {:else} - (visible = false)} /> - {/if} +
diff --git a/src/frontend/src/lib/components/icons/IconICMonochrome.svelte b/src/frontend/src/lib/components/icons/IconICMonochrome.svelte new file mode 100644 index 0000000000..a8bc7f3667 --- /dev/null +++ b/src/frontend/src/lib/components/icons/IconICMonochrome.svelte @@ -0,0 +1,27 @@ + + + + + + + + diff --git a/src/frontend/src/lib/stores/auth.store.ts b/src/frontend/src/lib/stores/auth.store.ts index d3128433aa..be940eeb86 100644 --- a/src/frontend/src/lib/stores/auth.store.ts +++ b/src/frontend/src/lib/stores/auth.store.ts @@ -29,7 +29,7 @@ export interface AuthStore extends Readable { const initAuthStore = (): AuthStore => { const { subscribe, set, update } = writable({ - identity: undefined, + identity: undefined }); return { @@ -40,7 +40,7 @@ const initAuthStore = (): AuthStore => { const isAuthenticated: boolean = await authClient.isAuthenticated(); set({ - identity: isAuthenticated ? authClient.getIdentity() : null, + identity: isAuthenticated ? authClient.getIdentity() : null }); }, @@ -58,7 +58,7 @@ const initAuthStore = (): AuthStore => { onSuccess: () => { update((state: AuthStoreData) => ({ ...state, - identity: authClient?.getIdentity(), + identity: authClient?.getIdentity() })); resolve(); @@ -79,7 +79,7 @@ const initAuthStore = (): AuthStore => { update((state: AuthStoreData) => ({ ...state, - identity: null, + identity: null })); } }; From 4694af57059b9c26e7b80e504b994c1cc2b866d0 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 20 Apr 2023 09:21:04 +0200 Subject: [PATCH 3/4] build: ignore --- scripts/update.types.mjs | 44 ++++++++++++++++++- src/declarations/cmc/cmc.factory.did.js | 2 + .../console/console.factory.did.js | 2 + .../console/console.factory.did.mjs | 2 + .../frontend/frontend.factory.did.js | 2 + .../internet_identity.factory.did.js | 2 + src/declarations/ledger/ledger.factory.did.js | 2 + .../mission_control.factory.did.js | 2 + .../observatory/observatory.factory.did.js | 2 + .../observatory/observatory.factory.did.mjs | 2 + .../satellite/satellite.factory.did.js | 2 + .../satellite/satellite.factory.did.mjs | 2 + 12 files changed, 65 insertions(+), 1 deletion(-) diff --git a/scripts/update.types.mjs b/scripts/update.types.mjs index ee86db533b..26bc704ca0 100644 --- a/scripts/update.types.mjs +++ b/scripts/update.types.mjs @@ -24,7 +24,47 @@ const cleanTypes = async ({ dest = `./src/declarations` }) => { '' ); - await writeFile(indexPath, clean, 'utf-8'); + const valid = clean.replace(/export const idlFactory = \({ IDL }\) => {/g, ''); + + await writeFile(indexPath, valid, 'utf-8'); + + resolve(); + }) + ); + + await Promise.all(promises); +}; + +/** + * We have to manipulate the factory otherwise the editor prompt for following TypeScript error: + * + * TS7031: Binding element 'IDL' implicitly has an 'any' type. + * + */ +const cleanFactory = async ({ dest = `./src/declarations` }) => { + const promises = readdirSync(dest).map( + (dir) => + new Promise(async (resolve) => { + const factoryPath = join(dest, dir, `${dir}.did.js`); + + if (!existsSync(factoryPath)) { + resolve(); + return; + } + + const content = await readFile(factoryPath, 'utf-8'); + const cleanFactory = content.replace( + /export const idlFactory = \({ IDL }\) => {/g, + `// @ts-ignore +export const idlFactory = ({ IDL }) => {` + ); + const cleanInit = cleanFactory.replace( + /export const init = \({ IDL }\) => {/g, + `// @ts-ignore +export const init = ({ IDL }) => {` + ); + + await writeFile(factoryPath, cleanInit, 'utf-8'); resolve(); }) @@ -58,6 +98,8 @@ const renameFactory = async ({ dest = `./src/declarations` }) => { try { await cleanTypes({}); + await cleanFactory({}); + await renameFactory({}); console.log(`Types declarations copied!`); diff --git a/src/declarations/cmc/cmc.factory.did.js b/src/declarations/cmc/cmc.factory.did.js index 7b7eac6987..92451f4f55 100644 --- a/src/declarations/cmc/cmc.factory.did.js +++ b/src/declarations/cmc/cmc.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const BlockIndex = IDL.Nat64; const CyclesCanisterInitPayload = IDL.Record({ @@ -53,6 +54,7 @@ export const idlFactory = ({ IDL }) => { notify_top_up: IDL.Func([NotifyTopUpArg], [NotifyTopUpResult], []) }); }; +// @ts-ignore export const init = ({ IDL }) => { const BlockIndex = IDL.Nat64; const CyclesCanisterInitPayload = IDL.Record({ diff --git a/src/declarations/console/console.factory.did.js b/src/declarations/console/console.factory.did.js index 216151601e..8b574117a9 100644 --- a/src/declarations/console/console.factory.did.js +++ b/src/declarations/console/console.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const AssertMissionControlCenterArgs = IDL.Record({ mission_control_id: IDL.Principal, @@ -62,6 +63,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/console/console.factory.did.mjs b/src/declarations/console/console.factory.did.mjs index 216151601e..8b574117a9 100644 --- a/src/declarations/console/console.factory.did.mjs +++ b/src/declarations/console/console.factory.did.mjs @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const AssertMissionControlCenterArgs = IDL.Record({ mission_control_id: IDL.Principal, @@ -62,6 +63,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/frontend/frontend.factory.did.js b/src/declarations/frontend/frontend.factory.did.js index ff3ab12179..e9def5f270 100644 --- a/src/declarations/frontend/frontend.factory.did.js +++ b/src/declarations/frontend/frontend.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const ClearArguments = IDL.Record({}); const BatchId = IDL.Nat; @@ -203,6 +204,7 @@ export const idlFactory = ({ IDL }) => { validate_revoke_permission: IDL.Func([RevokePermission], [ValidationResult], []) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/internet_identity/internet_identity.factory.did.js b/src/declarations/internet_identity/internet_identity.factory.did.js index 3089e49b53..ff9106f34f 100644 --- a/src/declarations/internet_identity/internet_identity.factory.did.js +++ b/src/declarations/internet_identity/internet_identity.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const ArchiveConfig = IDL.Record({ polling_interval_ns: IDL.Nat64, @@ -212,6 +213,7 @@ export const idlFactory = ({ IDL }) => { verify_tentative_device: IDL.Func([UserNumber, IDL.Text], [VerifyTentativeDeviceResponse], []) }); }; +// @ts-ignore export const init = ({ IDL }) => { const ArchiveConfig = IDL.Record({ polling_interval_ns: IDL.Nat64, diff --git a/src/declarations/ledger/ledger.factory.did.js b/src/declarations/ledger/ledger.factory.did.js index 6fdcf7de0f..fce29bcc68 100644 --- a/src/declarations/ledger/ledger.factory.did.js +++ b/src/declarations/ledger/ledger.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const AccountIdentifier = IDL.Vec(IDL.Nat8); const AccountBalanceArgs = IDL.Record({ account: AccountIdentifier }); @@ -93,6 +94,7 @@ export const idlFactory = ({ IDL }) => { transfer_fee: IDL.Func([TransferFeeArg], [TransferFee], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/mission_control/mission_control.factory.did.js b/src/declarations/mission_control/mission_control.factory.did.js index ac4ae30a94..9ce419ec19 100644 --- a/src/declarations/mission_control/mission_control.factory.did.js +++ b/src/declarations/mission_control/mission_control.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const Satellite = IDL.Record({ updated_at: IDL.Nat64, @@ -92,6 +93,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/observatory/observatory.factory.did.js b/src/declarations/observatory/observatory.factory.did.js index b1aa9b82ce..7e537bf46c 100644 --- a/src/declarations/observatory/observatory.factory.did.js +++ b/src/declarations/observatory/observatory.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) @@ -83,6 +84,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/observatory/observatory.factory.did.mjs b/src/declarations/observatory/observatory.factory.did.mjs index b1aa9b82ce..7e537bf46c 100644 --- a/src/declarations/observatory/observatory.factory.did.mjs +++ b/src/declarations/observatory/observatory.factory.did.mjs @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const DeleteControllersArgs = IDL.Record({ controllers: IDL.Vec(IDL.Principal) @@ -83,6 +84,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/satellite/satellite.factory.did.js b/src/declarations/satellite/satellite.factory.did.js index b012d4be38..5bdc961c77 100644 --- a/src/declarations/satellite/satellite.factory.did.js +++ b/src/declarations/satellite/satellite.factory.did.js @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const CommitBatch = IDL.Record({ batch_id: IDL.Nat, @@ -187,6 +188,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; diff --git a/src/declarations/satellite/satellite.factory.did.mjs b/src/declarations/satellite/satellite.factory.did.mjs index b012d4be38..5bdc961c77 100644 --- a/src/declarations/satellite/satellite.factory.did.mjs +++ b/src/declarations/satellite/satellite.factory.did.mjs @@ -1,3 +1,4 @@ +// @ts-ignore export const idlFactory = ({ IDL }) => { const CommitBatch = IDL.Record({ batch_id: IDL.Nat, @@ -187,6 +188,7 @@ export const idlFactory = ({ IDL }) => { version: IDL.Func([], [IDL.Text], ['query']) }); }; +// @ts-ignore export const init = ({ IDL }) => { return []; }; From 8bac2dfd1899789aa4edd131d8f06d1200799313 Mon Sep 17 00:00:00 2001 From: David Dal Busco Date: Thu, 20 Apr 2023 11:30:44 +0200 Subject: [PATCH 4/4] feat: wording --- src/frontend/src/lib/i18n/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/lib/i18n/en.json b/src/frontend/src/lib/i18n/en.json index b65841c0f1..4ef28a69e3 100644 --- a/src/frontend/src/lib/i18n/en.json +++ b/src/frontend/src/lib/i18n/en.json @@ -39,7 +39,7 @@ "sign_in": { "title": "Launch your first satellite", "overview_1": "A satellite is a Web3 container for your app.", - "overview_2": "It offers secure anonymous authentication, data storage, custom domain capabilities and more.", + "overview_2": "It offers secure anonymous authentication, datastore, file storage, and custom domain.", "overview_3": "100% on blockchain with low carbon footprint.", "internet_identity": "Continue with Internet Identity" },