-
Notifications
You must be signed in to change notification settings - Fork 4
feat: tauri plugins setup #97
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
WalkthroughThis set of changes introduces foundational infrastructure for a Tauri + SvelteKit project, focusing on establishing mobile-oriented capabilities for the eID-Wallet application. Key updates include the addition and configuration of Tauri plugins (store, biometric, barcode scanner), Rust-side error handling and password hashing/verification logic, and new Svelte components and controllers for PIN and biometric authentication. The project structure is enhanced with new configuration files for formatting, linting, and workspace management. The codebase also sees widespread formatting standardization and the addition of global state management for security and user data. Barcode scanning is now integrated into the app flow, and biometric support is detected and utilized in authentication flows. Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant SvelteApp
participant TauriBackend
participant Store
participant BiometricPlugin
participant BarcodeScanner
User->>SvelteApp: Enter PIN or trigger biometric
alt Biometric enabled
SvelteApp->>BiometricPlugin: checkStatus()/authenticate()
BiometricPlugin-->>SvelteApp: Success/Failure
alt Success
SvelteApp->>SvelteApp: Navigate to main page
else Failure
SvelteApp->>SvelteApp: Show error
end
else PIN entry
SvelteApp->>TauriBackend: invoke('verify', pin, hash)
TauriBackend->>TauriBackend: Argon2 verify
TauriBackend-->>SvelteApp: Result (true/false)
alt Success
SvelteApp->>SvelteApp: Navigate to main page
else Failure
SvelteApp->>SvelteApp: Show error
end
end
User->>SvelteApp: Initiate QR scan
SvelteApp->>BarcodeScanner: requestPermissions()/scan()
BarcodeScanner-->>SvelteApp: Scanned data or error
SvelteApp->>SvelteApp: Show scanned result
Assessment against linked issues
Possibly related PRs
Poem
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 17
🔭 Outside diff range comments (1)
infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.svelte (1)
114-133
:⚠️ Potential issueFix duplicate HTML ID attribute across inputs.
Each input element is using the same
id={uniqueId}
, but HTML IDs must be unique within a document. This causes accessibility issues and invalid HTML:<input bind:value={pins[i]} maxLength="1" class="pin-item w-[68px] h-[81px] rounded-[64px] border-[1px] border-transparent text-xl text-center bg-gray select-none" class:error={isError} - id={uniqueId} + id={`${uniqueId}-${i}`} type="tel" pattern="\d{1}" onfocusin={() => (inFocus = true)} onfocusout={() => { if (i === inputs.length - 1) inFocus = false }} maxlength="1" onkeydown={(event) => { event.preventDefault() changeHandler(event, i) }} placeholder="" {...restProps} />Also note that there's a duplicate attribute: both
maxLength="1"
andmaxlength="1"
are specified. Remove one of them.
🧹 Nitpick comments (17)
infrastructure/eid-wallet/src/routes/(app)/+layout.svelte (1)
12-16
: Prefer using Svelte’sdev
flag over HTML-commenting out dev-only code.
Commenting out the{#if currentRoute === "scan-qr"}
block disables the dummy scan overlay globally. It’s clearer to guard development-only UI with Svelte’s built‑indev
environment variable and remove dead code for production.Proposed refactor:
<script lang="ts"> + import { dev } from '$app/environment'; import { page } from "$app/state"; import type { Snippet } from "svelte"; import type { LayoutData } from "./$types"; let { data, children }: { data: LayoutData; children: Snippet } = $props(); let currentRoute = $derived(page.url.pathname.split("/").pop() || "home"); </script> -<!-- {#if currentRoute === "scan-qr"} -<div class="fixed -z-10 bg-black w-screen h-screen top-0"> - <img src="/images/dummyScan.png" class="opacity-40 w-screen h-screen object-cover" alt="dummy scan"> -</div> -{/if} --> +{#if dev && currentRoute === "scan-qr"} + <div class="fixed -z-10 bg-black w-screen h-screen top-0"> + <img + src="/images/dummyScan.png" + class="opacity-40 w-screen h-screen object-cover" + alt="dummy scan" + /> + </div> +{/if}This keeps development helpers out of production bundles and makes intent explicit.
infrastructure/eid-wallet/src-tauri/src/errors.rs (1)
11-19
: Consider a more structured error serialization approach.The current implementation serializes errors as simple strings, which loses type information when passed to the frontend. For more robust error handling, consider serializing with additional context:
impl serde::Serialize for Error { fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error> where S: serde::ser::Serializer, { - serializer.serialize_str(self.to_string().as_ref()) + let mut state = serializer.serialize_struct("Error", 2)?; + match self { + Error::Io(err) => { + state.serialize_field("type", "io")?; + state.serialize_field("message", &err.to_string())?; + } + Error::Other(msg) => { + state.serialize_field("type", "other")?; + state.serialize_field("message", msg)?; + } + } + state.end() } }This would allow frontend code to distinguish between different error types.
infrastructure/eid-wallet/src-tauri/src/funcs/mod.rs (2)
8-16
: Add documentation and consider customizing Argon2 parameters.While the implementation is secure, consider adding documentation and potentially customizing the Argon2 parameters:
+ /// Hashes a PIN using Argon2 with a random salt. + /// + /// # Arguments + /// + /// * `pin` - The PIN to hash + /// + /// # Returns + /// + /// * `Result<String, Error>` - The hashed PIN or an error pub fn hash(pin: String) -> Result<String, Error> { let salt = SaltString::generate(&mut OsRng); - let argon2 = Argon2::default(); + // Use custom parameters optimized for this application's security needs + let argon2 = Argon2::new( + argon2::Algorithm::Argon2id, + argon2::Version::V0x13, + argon2::Params::new(65536, 3, 4, None).unwrap(), + ); let pin_hash = argon2 .hash_password(pin.as_bytes(), &salt) .map_err(|err| Error::Other(err.to_string()))? .to_string(); Ok(pin_hash) }
18-23
: Add documentation to the verify function.The implementation correctly verifies a PIN against a hash, but documentation would improve maintainability:
+ /// Verifies a PIN against a stored hash. + /// + /// # Arguments + /// + /// * `pin` - The PIN to verify + /// * `hash` - The hash to verify against + /// + /// # Returns + /// + /// * `Result<bool, Error>` - Whether the PIN matches the hash pub fn verify(pin: String, hash: String) -> Result<bool, Error> { let argon2 = Argon2::default(); let parsed_hash = PasswordHash::new(&hash).map_err(|err| Error::Other(err.to_string()))?; let is_valid = argon2.verify_password(pin.as_bytes(), &parsed_hash).is_ok(); Ok(is_valid) }infrastructure/eid-wallet/src/lib/global/controllers/user.ts (1)
3-31
: Well-documented controller with comprehensive JSDoc.The documentation is thorough, providing clear explanations, usage examples, and intended integration with GlobalState. One minor issue:
/** * @author SoSweetHam <[email protected]> - * @version 0.0.1-alpha/Stub - * @date 2025-04-16 + * @version 0.0.1-alpha + * @date 2023-04-16 * Would evolve with w3id spec and implementation proposalsThe date appears to be set in the future.
infrastructure/eid-wallet/src/routes/(auth)/verify/+page.svelte (2)
8-8
: Initialize GlobalState with proper typesYou've defined
globalState
with an explicit type but initialized it asundefined
. Consider using a more type-safe approach.-let globalState: GlobalState | undefined = $state(undefined); +let globalState: GlobalState | undefined = $state<GlobalState | undefined>(undefined);
10-10
: Initialize handleVerification properlyThis declaration is redundant as it's redefined in the
onMount
callback. Consider initializing it directly in theonMount
callback to avoid linting warnings.-let handleVerification: () => Promise<void>;
infrastructure/eid-wallet/src/lib/global/state.ts (2)
22-30
: Consider adding a disposal method to the GlobalState classThe
GlobalState
class manages resources but doesn't provide a way to clean up those resources when they're no longer needed. Consider adding adispose()
method to handle proper resource cleanup.export class GlobalState { #store: Store; securityController: SecurityController; userController: UserController; private constructor(store: Store) { this.#store = store; this.securityController = new SecurityController(store); this.userController = new UserController(store); } + /** + * Clean up resources when the GlobalState is no longer needed + */ + async dispose(): Promise<void> { + // Close the store and perform any necessary cleanup + await this.#store.save(); + }
38-50
: Make store path configurable and improve initializationThe store path is hardcoded as "global-state.json" without any configuration option. Consider making this configurable and enhancing the initialization logic:
static async create() { - const store = await Store.load("global-state.json", { + const storePath = import.meta.env.TAURI_GLOBAL_STATE_PATH || "global-state.json"; + const store = await Store.load(storePath, { autoSave: true, }); const alreadyInitialized = await store.get<boolean>("initialized"); const instance = new GlobalState(store); if (!alreadyInitialized) { + // Consider adding more comprehensive initialization logic here + // for example, setting default values for various properties await instance.#store.set("initialized", true); } return instance; }infrastructure/eid-wallet/src/routes/+page.svelte (1)
9-10
: Improve state initialization and namingThe
clearPin
variable name is confusing as it represents a function, not a value. Consider renaming for clarity:-let clearPin = $state(async () => {}); +let clearPinFunction = $state(async () => {}); let cleared = $state(false);infrastructure/eid-wallet/src/routes/+layout.svelte (1)
31-41
: Improve error handling for biometric status checkWhile the code correctly handles the case where biometric check fails by defaulting to unavailable status, it swallows the error without logging it, which could make debugging difficult in production.
try { status = await checkStatus(); } catch (error) { + console.error("Biometric status check failed:", error); status = { biometryType: 0, isAvailable: false, }; }
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte (2)
20-32
: Consider documenting authentication optionsThe biometric authentication options are well structured, but consider adding comments explaining why
allowDeviceCredential
is set to false, as this might limit some authentication methods on certain devices.
61-74
: Clear waiting state during biometric authenticationConsider adding a loading indicator during biometric authentication and handling the waiting state to improve user experience.
+let isAuthenticating = $state(false); if ( (await globalState.securityController.biometricSupport) && (await checkStatus()).isAvailable ) { try { + isAuthenticating = true; await authenticate( "You must authenticate with PIN first", authOpts, ); await goto("/main"); } catch (e) { console.error("Biometric authentication failed", e); + } finally { + isAuthenticating = false; } }infrastructure/eid-wallet/src/routes/(auth)/register/+page.svelte (1)
50-56
: Remove debug logging in production codeProduction code should not contain console.log statements. Consider removing this or using a proper logging system with configurable levels.
isBiometricsAvailable = (await checkStatus()).isAvailable; -console.log("isBiometricsAvailable", isBiometricsAvailable);
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte (3)
79-82
: Unconditionalcancel()
may throw when scanner inactive
@tauri-apps/plugin-barcode-scanner
throws ifcancel()
is called while no active session exists.async function cancelScan() { - await cancel(); - scanning = false; + try { + await cancel(); + } catch (_) { + /* noop – already cancelled */ + } finally { + scanning = false; + } }This keeps teardown noise out of the console and avoids rejected promises during component destruction.
118-125
: Use Svelte’son:click=
directive instead of HTMLonclick
onclick=
is treated as a literal HTML attribute; the function will not be bound in SSR or hydration contexts. Prefer the Svelte directive for full compatibility.- icon={FlashlightIcon} - aria-label="Toggle flashlight" - bgSize="md" - iconSize={32} - bgColor={flashlightOn ? "white" : "secondary"} - iconColor="black" - onclick={() => (flashlightOn = !flashlightOn)} + icon={FlashlightIcon} + aria-label="Toggle flashlight" + bgSize="md" + iconSize={32} + bgColor={flashlightOn ? "white" : "secondary"} + iconColor="black" + on:click={() => (flashlightOn = !flashlightOn)}Minor, but prevents subtle client/SSR mismatches.
149-152
: Bind scanned URL tohref
for direct interactionShowing the raw text is informative, but allowing the user to open the URL (after confirmation) improves usability.
-<p class="text-black-700 font-normal underline">{scannedData?.content}</p> +{#if scannedData?.content} + <a + class="text-black-700 font-normal underline break-all" + href={scannedData.content} + target="_blank" + rel="noopener noreferrer" + > + {scannedData.content} + </a> +{/if}Also adds
break-all
to avoid overflow.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (35)
infrastructure/eid-wallet/src-tauri/Cargo.lock
is excluded by!**/*.lock
infrastructure/eid-wallet/src-tauri/gen/apple/.gitignore
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/[email protected]
is excluded by!**/*.png
,!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/AppIcon.appiconset/Contents.json
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Assets.xcassets/Contents.json
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/ExportOptions.plist
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/LaunchScreen.storyboard
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Podfile
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Sources/eid-wallet/bindings/bindings.h
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/Sources/eid-wallet/main.mm
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.pbxproj
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.xcworkspace/contents.xcworkspacedata
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet.xcodeproj/xcshareddata/xcschemes/eid-wallet_iOS.xcscheme
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/Info.plist
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/eid-wallet_iOS/eid-wallet_iOS.entitlements
is excluded by!**/gen/**
infrastructure/eid-wallet/src-tauri/gen/apple/project.yml
is excluded by!**/gen/**
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (77)
.editorconfig
(1 hunks).vscode/settings.json
(1 hunks).zed/settings.json
(1 hunks)biome.json
(1 hunks)infrastructure/eid-wallet/biome.json
(1 hunks)infrastructure/eid-wallet/package.json
(1 hunks)infrastructure/eid-wallet/src-tauri/Cargo.toml
(1 hunks)infrastructure/eid-wallet/src-tauri/Info.ios.plist
(1 hunks)infrastructure/eid-wallet/src-tauri/capabilities/default.json
(0 hunks)infrastructure/eid-wallet/src-tauri/capabilities/mobile.json
(1 hunks)infrastructure/eid-wallet/src-tauri/src/errors.rs
(1 hunks)infrastructure/eid-wallet/src-tauri/src/funcs/mod.rs
(1 hunks)infrastructure/eid-wallet/src-tauri/src/lib.rs
(1 hunks)infrastructure/eid-wallet/src-tauri/tauri.conf.json
(1 hunks)infrastructure/eid-wallet/src/app.css
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/AppNav/AppNav.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/AppNav/AppNav.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/Hero/Hero.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/Hero/Hero.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/IdentityCard/IdentityCard.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/IdentityCard/IdentityCard.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/SettingsNavigationBtn/SettingsNavigationBtn.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/fragments/SettingsNavigationBtn/SettingsNavigationBtn.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/global/controllers/security.ts
(1 hunks)infrastructure/eid-wallet/src/lib/global/controllers/user.ts
(1 hunks)infrastructure/eid-wallet/src/lib/global/index.ts
(1 hunks)infrastructure/eid-wallet/src/lib/global/runtime.svelte.ts
(1 hunks)infrastructure/eid-wallet/src/lib/global/state.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonAction.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonAction.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonIcon.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonIcon.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Connection/Connection.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Connection/Connection.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.svelte
(2 hunks)infrastructure/eid-wallet/src/lib/ui/Selector/Selector.stories.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/Selector/Selector.svelte
(1 hunks)infrastructure/eid-wallet/src/lib/utils/clickOutside.ts
(1 hunks)infrastructure/eid-wallet/src/lib/utils/getLanguage.ts
(1 hunks)infrastructure/eid-wallet/src/lib/utils/mergeClasses.ts
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/+layout.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/ePassport/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte
(7 hunks)infrastructure/eid-wallet/src/routes/(app)/settings/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/settings/history/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/settings/language/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/settings/pin/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(app)/settings/privacy/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(auth)/e-passport/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(auth)/onboarding/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(auth)/register/+page.svelte
(4 hunks)infrastructure/eid-wallet/src/routes/(auth)/review/+page.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/(auth)/verify/+page.svelte
(2 hunks)infrastructure/eid-wallet/src/routes/+layout.svelte
(1 hunks)infrastructure/eid-wallet/src/routes/+page.svelte
(1 hunks)infrastructure/w3id/biome.json
(1 hunks)infrastructure/w3id/package.json
(1 hunks)infrastructure/w3id/src/errors/errors.ts
(1 hunks)infrastructure/w3id/src/index.ts
(1 hunks)infrastructure/w3id/src/logs/log-manager.ts
(2 hunks)infrastructure/w3id/src/logs/log.types.ts
(1 hunks)infrastructure/w3id/src/logs/storage/storage-spec.ts
(1 hunks)infrastructure/w3id/src/utils/array.ts
(1 hunks)infrastructure/w3id/src/utils/codec.ts
(1 hunks)infrastructure/w3id/src/utils/hash.ts
(1 hunks)infrastructure/w3id/src/utils/jwt.ts
(6 hunks)infrastructure/w3id/src/utils/rand.ts
(1 hunks)infrastructure/w3id/src/utils/uuid.ts
(1 hunks)package.json
(1 hunks)pnpm-workspace.yaml
(1 hunks)
💤 Files with no reviewable changes (1)
- infrastructure/eid-wallet/src-tauri/capabilities/default.json
🧰 Additional context used
🧬 Code Graph Analysis (8)
infrastructure/w3id/src/logs/storage/storage-spec.ts (1)
infrastructure/evault-core/src/types/w3id.ts (1)
StorageSpec
(1-9)
infrastructure/w3id/src/utils/jwt.ts (2)
infrastructure/w3id/src/logs/log.types.ts (3)
Signer
(34-38)JWTPayload
(23-32)JWTHeader
(17-21)infrastructure/evault-core/src/types/w3id.ts (1)
Signer
(11-15)
infrastructure/w3id/src/utils/hash.ts (1)
infrastructure/w3id/src/utils/codec.ts (1)
uint8ArrayToHex
(1-5)
infrastructure/w3id/src/index.ts (6)
infrastructure/w3id/src/logs/log-manager.ts (1)
IDLogManager
(30-195)infrastructure/w3id/src/logs/log.types.ts (4)
JWTPayload
(23-32)JWTHeader
(17-21)Signer
(34-38)LogEvent
(1-9)infrastructure/w3id/src/utils/jwt.ts (1)
signJWT
(44-58)infrastructure/evault-core/src/types/w3id.ts (2)
Signer
(11-15)StorageSpec
(1-9)infrastructure/w3id/src/utils/rand.ts (1)
generateRandomAlphaNum
(8-22)infrastructure/w3id/src/utils/uuid.ts (1)
generateUuid
(12-17)
infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.stories.ts (3)
infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.stories.ts (1)
Default
(21-23)infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.stories.ts (1)
Default
(18-23)infrastructure/eid-wallet/src/lib/ui/Button/ButtonIcon.stories.ts (1)
Default
(15-27)
infrastructure/w3id/src/logs/log.types.ts (1)
infrastructure/evault-core/src/types/w3id.ts (1)
Signer
(11-15)
infrastructure/eid-wallet/src-tauri/src/funcs/mod.rs (2)
infrastructure/eid-wallet/src-tauri/src/lib.rs (2)
hash
(11-13)verify
(16-18)infrastructure/eid-wallet/src/lib/global/controllers/security.ts (1)
pin
(41-51)
infrastructure/eid-wallet/src-tauri/src/lib.rs (2)
infrastructure/eid-wallet/src-tauri/src/funcs/mod.rs (2)
hash
(8-16)verify
(18-23)infrastructure/eid-wallet/src/lib/global/controllers/security.ts (1)
pin
(41-51)
🔇 Additional comments (121)
biome.json (1)
1-9
: Looks good - appropriate configuration for Biome toolingThe configuration properly sets up Biome for code formatting and organizing imports. It references the correct schema location and enables EditorConfig support, which will help maintain consistent formatting across the project.
infrastructure/eid-wallet/src/lib/ui/Connection/Connection.svelte (2)
6-10
: Formatting changes look goodThe indentation changes align with the project-wide formatting standardization effort mentioned in the PR summary.
13-17
: Formatting changes look goodThe indentation adjustments for the props destructuring are consistent with the interface formatting above.
infrastructure/eid-wallet/src/lib/utils/mergeClasses.ts (1)
5-5
: Formatting changes look goodThe indentation adjustment to 4 spaces follows the project-wide formatting standards being implemented.
infrastructure/eid-wallet/src/lib/fragments/SettingsNavigationBtn/SettingsNavigationBtn.svelte (1)
9-11
: Formatting changes look goodThe indentation adjustments to 4 spaces in the interface definition align with the project-wide formatting standardization effort.
infrastructure/w3id/src/utils/array.ts (1)
14-27
: Consistent indentation only; no functional changesThese adjustments align the file with the project's
.editorconfig
indentation rules. No logic, control flow, or API has been modified.infrastructure/w3id/src/utils/uuid.ts (1)
13-17
: Indentation normalization only; functionality unchangedSpacing updated to adhere to the 4-space indentation standard. No behavior or API changes were introduced.
infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.stories.ts (1)
6-15
: Formatting standardization only; no semantic changesIndentation and spacing updated to match the project's style guidelines. All story definitions and parameters remain the same.
Also applies to: 19-23
infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.stories.ts (1)
5-14
: Spacing adjustments only; no logic modificationsIndentation normalized across all story exports to comply with the new style rules. No code behavior has been affected.
Also applies to: 18-21, 24-28, 30-35
infrastructure/w3id/src/utils/codec.ts (1)
2-4
: Indentation cleanup only; functionality intactAll exported functions have been reformatted for consistent 4-space indentation. Logic and API remain unchanged.
Also applies to: 8-15, 19-19
infrastructure/w3id/src/logs/log.types.ts (1)
1-62
: Consistent indentation applied across type declarations
All lines have been uniformly shifted to 4-space indentation per the new.editorconfig
. There are no changes to type names, signatures, or logic inLogEvent
,VerifierCallback
,JWTHeader
,JWTPayload
,Signer
, the option guards, or theCreateLogEventOptions
union.infrastructure/eid-wallet/src/lib/ui/Connection/Connection.stories.ts (1)
1-26
: Storybook file reformatted for 4‑space indentation
TheConnection.stories.ts
file’s exported default andPrimary
story blocks have been re-indented to match project style. No functional or API changes were introduced.infrastructure/w3id/package.json (1)
1-49
: package.json formatted and Biome added as a devDependency
Indentation and spacing have been normalized. The addition of@biomejs/biome@^1.9.4
underdevDependencies
aligns with the tooling setup in the root and other workspaces. No breaking changes to scripts or exports.infrastructure/w3id/src/utils/hash.ts (1)
1-27
: Whitespace normalization only inhash
implementation
Thehash
function retains its original signature and behavior. Indentation and line-wrapping have been updated for consistency, with no alterations to the error handling or digest logic.infrastructure/eid-wallet/src/lib/utils/getLanguage.ts (1)
1-24
: Formatting standardization applied togetLanguageWithCountry
Only indentation and comment alignment were modified. The function logic for splitting locale codes and assembling the display name remains unchanged.infrastructure/eid-wallet/src/lib/utils/clickOutside.ts (2)
3-12
: Stylistic formatting only: Indentation within thehandleClick
callback has been normalized to align with the new style rules. No changes to logic or behavior.
14-20
: Stylistic formatting only: Adjusted indentation for adding/removing the event listener and thedestroy
method. Functionality remains unchanged.infrastructure/w3id/src/utils/jwt.ts (1)
7-11
: Formatting normalization only: Updated all function bodies and chaining calls to use consistent 4‑space indentation per.editorconfig
. There are no logic or signature changes.Also applies to: 18-21, 31-33, 45-55
infrastructure/w3id/src/logs/log-manager.ts (1)
1-196
: Project-wide indentation update: The entireIDLogManager
class and related imports have been reformatted to adhere to the new 4‑space indentation style. All method signatures, control flows, and error handling remain exactly as before.infrastructure/eid-wallet/src/routes/(app)/settings/privacy/+page.svelte (1)
5-5
: Whitespace adjustment: Aligned the indentation of theruntime.header.title = "Privacy"
assignment with the updated style guide. No functional impact.infrastructure/eid-wallet/src/routes/(app)/settings/history/+page.svelte (1)
5-5
: Whitespace adjustment: Aligned the indentation of theruntime.header.title = "History"
assignment with the updated style guide. No functional impact.infrastructure/eid-wallet/src/routes/(auth)/review/+page.svelte (1)
7-7
: Skip indentation-only formatting change.
No functional change; this is purely adjusting whitespace to match the project’s.editorconfig
.infrastructure/eid-wallet/src/routes/(auth)/e-passport/+page.svelte (1)
8-8
: Skip indentation-only formatting change.
This update only aligns the indentation with the new style rules and does not affect behavior.infrastructure/eid-wallet/src/routes/(app)/settings/language/+page.svelte (2)
6-9
: Skip indentation-only formatting changes in the language array.
These lines were realigned to four-space indentation per the new style guide.
14-14
: Skip indentation-only formatting change in the reactive effect.
No logic or behavior has been modified.infrastructure/eid-wallet/src/routes/(auth)/onboarding/+page.svelte (2)
9-10
: Skip indentation-only formatting changes inhandleGetStarted
.
These comment and assignment lines were realigned to match the editorconfig settings.
14-15
: Skip indentation-only formatting changes inhandleNext
.
Only whitespace was updated, no functional impact.infrastructure/eid-wallet/src/routes/(app)/+layout.svelte (1)
20-20
: Skip indentation-only formatting change in the container<div>
.
Alignment updated to four spaces, with no behavioral change.pnpm-workspace.yaml (1)
7-12
: Approve built dependency additions.
The new entries for@biomejs/biome
,cpu-features
,protobufjs
, andssh2
have been added alphabetically underonlyBuiltDependencies
, aligning with the plugin setup requirements.infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.svelte (1)
7-8
: Approve consistent indentation.
TheIButtonNav
interface properties (href
andchildren
) are now uniformly indented with four spaces, matching the project's.editorconfig
standard.infrastructure/eid-wallet/src-tauri/tauri.conf.json (1)
20-23
: Approve mobile security capabilities configuration.
Adding"mobile-capability"
underapp.security.capabilities
correctly ties into the new mobile-specific capability definitions for iOS and Android.infrastructure/eid-wallet/src/lib/fragments/Hero/Hero.stories.ts (3)
5-14
: Approve formatting standardization for export default.
Theexport default
block has been reformatted to 4-space indentation, ensuring consistency with the rest of the codebase.
18-22
: Approve consistent indentation forBasic
story.
Theargs
block of theBasic
story now follows the 4-space indentation rule.
25-30
: Approve consistent indentation forWithSettings
story.
Theargs
block of theWithSettings
story is now uniformly indented, matching project style guidelines.infrastructure/eid-wallet/src/lib/ui/Button/ButtonAction.stories.ts (2)
6-15
: Approve formatting standardization for export default.
The top-levelexport default
block has been reformatted with consistent 4-space indentation, in line with the new style rules.
19-46
: Approve consistent indentation for all story definitions.
All individual story blocks (Solid
,Soft
,Danger
,DangerSoft
,Loading
,BlockingClick
) have been updated to 4-space indentation, improving readability and uniformity.infrastructure/eid-wallet/src/lib/fragments/AppNav/AppNav.stories.ts (1)
5-14
: Formatting consistency only
These changes adjust indentation and spacing to align with the newly introduced.editorconfig
. There are no functional or semantic modifications to the story definition or exported entities.Also applies to: 18-20
infrastructure/w3id/src/utils/rand.ts (1)
9-13
: Pure whitespace reformat
All altered lines reflect indentation and line‐break adjustments; the algorithm for generating a random alphanumeric string remains unchanged.Also applies to: 15-15, 17-19, 21-21
infrastructure/eid-wallet/src/lib/fragments/AppNav/AppNav.svelte (1)
7-9
: Indentation alignment only
Props interface and destructuring were reformatted for consistent 4‑space indentation. No changes to types, defaults, or component logic.Also applies to: 12-15
infrastructure/w3id/src/logs/storage/storage-spec.ts (1)
8-13
: Style normalization only
The entireStorageSpec
class declaration and JSDoc comments were realigned to the project’s 4‑space indentation standard. There are no behavioral or signature changes.Also applies to: 15-16, 18-23, 25-25, 27-32, 34-34, 36-41, 43-43
infrastructure/eid-wallet/src/routes/(app)/main/+page.svelte (1)
11-14
: Whitespace adjustment only
ThedummyData
object andshareQR
function body were reformatted for consistent indentation. Functionality and markup remain identical.Also applies to: 20-21
infrastructure/eid-wallet/src/lib/ui/Button/ButtonIcon.stories.ts (5)
6-12
: Consistent formatting in default export
Indentation normalized to 4 spaces; no functional changes introduced.
16-26
: Consistent formatting inDefault
story
Indentation normalized to 4 spaces; behavior unchanged.
30-40
: Consistent formatting inCustomSize
story
Indentation normalized to 4 spaces; behavior unchanged.
44-54
: Consistent formatting inLoading
story
Indentation normalized to 4 spaces; behavior unchanged.
58-74
: Consistent formatting inWithCallback
story
Indentation normalized to 4 spaces; behavior unchanged.infrastructure/w3id/src/errors/errors.ts (5)
2-5
: Consistent formatting inMalformedIndexChainError
Constructor indentation aligned; logic untouched.
9-12
: Consistent formatting inMalformedHashChainError
Constructor indentation aligned; logic untouched.
16-19
: Consistent formatting inBadSignatureError
Constructor indentation aligned; logic untouched.
23-26
: Consistent formatting inBadNextKeySpecifiedError
Constructor indentation aligned; logic untouched.
30-33
: Consistent formatting inBadOptionsSpecifiedError
Constructor indentation aligned; logic untouched..zed/settings.json (1)
1-9
: Approve new Zed editor settings
Configuration correctly links the Rust project forrust-analyzer
. No syntax issues detected.infrastructure/eid-wallet/src/lib/fragments/SettingsNavigationBtn/SettingsNavigationBtn.stories.ts (2)
6-9
: Consistent formatting in default export
Indentation normalized to 4 spaces; no logic changes.
19-22
: Consistent formatting inPrimary
story args
Indentation normalized to 4 spaces; story behavior unchanged.infrastructure/eid-wallet/src/lib/ui/Selector/Selector.svelte (2)
10-15
: Consistent formatting inISelectorProps
interface
Indentation aligned to project style; no semantic changes.
19-25
: Consistent formatting in props destructuring
Indentation aligned to project style; behavior unchanged.infrastructure/eid-wallet/src/lib/fragments/IdentityCard/IdentityCard.stories.ts (1)
4-17
: Formatting-only changes
The modifications strictly adjust whitespace and enforce 4‑space indentation; no interface, story definitions, or behavior were altered.Also applies to: 26-44, 47-53
infrastructure/eid-wallet/src/routes/(app)/ePassport/+page.svelte (1)
8-20
: Formatting-only updates
Indentation has been normalized to 4 spaces for object literals and function definitions. There are no logic or markup changes.infrastructure/eid-wallet/biome.json (1)
2-13
: Extend base biome configuration
Adding the"extends": ["../../biome.json"]
entry ensures this workspace inherits the root formatting and lint rules, promoting consistency across the project.Also applies to: 16-17
infrastructure/eid-wallet/src-tauri/Cargo.toml (1)
25-30
: Add Tauri plugin and security dependencies
The new dependencies (tauri-plugin-store
,argon2
,rand_core
,thiserror
) and conditional mobile plugins (barcode-scanner
,biometric
) align with the intended secure storage, PIN hashing, and scanning features.Also applies to: 32-34
infrastructure/eid-wallet/src-tauri/Info.ios.plist (1)
1-10
: Declare required iOS permissions
TheNSFaceIDUsageDescription
andNSCameraUsageDescription
keys correctly request Face ID and camera access for biometric authentication and QR scanning.infrastructure/w3id/src/index.ts (1)
1-143
: Formatting consistency verified.
These whitespace and indentation adjustments align with the project’s.editorconfig
settings. No changes to logic, control flow, or public API were introduced.infrastructure/eid-wallet/src/lib/ui/Selector/Selector.stories.ts (1)
1-47
: Story formatting aligned with project conventions.
The indentation and brace alignment updates conform to the new.editorconfig
rules. No functional or prop API changes detected in the Storybook setup.infrastructure/eid-wallet/src/lib/ui/Drawer/Drawer.svelte (1)
1-94
: Indentation and whitespace normalized.
All changes are purely cosmetic—adjusting to 4‑space indentation and consistent spacing. Component logic and reactive effects remain untouched.infrastructure/eid-wallet/src/routes/(app)/settings/+page.svelte (1)
1-24
: Imports and effect callback re‑indented for consistency.
The reformatting ensures uniform alignment of imports and$effect
usage, with no impact on runtime behavior or UI routes.infrastructure/eid-wallet/src/lib/global/index.ts (1)
1-3
: Centralized global exports approved.
This barrel file correctly re‑exportsGlobalState
andruntime
, providing a single entry point for global state consumers.infrastructure/eid-wallet/src/routes/(app)/settings/pin/+page.svelte (3)
13-16
: No functional changes inhandleClose
.
These lines only adjust indentation/comments without altering behavior.
18-21
: No functional changes inhandleChangePIN
.
Only indentation was updated; logic remains the same.
23-26
: No functional changes in reactive effect.
Indentation changes only; behavior unchanged..vscode/settings.json (1)
2-9
: Editor configuration for Svelte and Rust appears correct.
Enabling the Svelte TS plugin and linking the Rust analyzer to the Cargo.toml ensures consistent IDE support and formatting.infrastructure/w3id/biome.json (1)
2-4
: Biome configuration extension path is correct.
Adding"extends"
to inherit from the root config aligns with the project-wide formatting strategy.infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.stories.ts (4)
3-5
: Indentation in imports is consistent with project style.
No logic changes detected.
9-18
: Story metadata indentation updated for consistency.
Behavior and structure remain unchanged.
22-23
: Default story args indentation updated.
No functional modifications.
26-30
: ForSettings story args indentation updated.
Only formatting adjustments.infrastructure/eid-wallet/src/app.css (1)
1-172
: Formatting-only changes; no semantic or functional modifications detected.infrastructure/eid-wallet/src/lib/fragments/IdentityCard/IdentityCard.svelte (1)
5-8
: Whitespace and indentation normalization
The changes standardize 4‑space indentation and consistent formatting across imports, interface definitions, prop destructuring, reactive effects, and class computations without altering any behavior.Also applies to: 13-14, 16-23, 26-33, 36-42, 44-44
.editorconfig (1)
1-17
: Approve new EditorConfig for consistent formatting
This.editorconfig
enforces UTF‑8 charset, LF line endings, a 4‑space indent, max line length, and specific overrides for JS/TS/Svelte/Markdown—aligning with the project's formatting standards.infrastructure/eid-wallet/src/lib/fragments/Hero/Hero.svelte (1)
8-12
: Consistent indentation applied
TheIHeroProps
interface and$props()
destructuring have been reformatted to 4‑space indentation for readability. No functional changes.Also applies to: 14-20
package.json (2)
5-13
: Approve updated scripts configuration
The Docker Compose command’s extra whitespace has been trimmed, and scripts for build, dev, lint, format, and checks align with the Turbo monorepo workflow.
16-19
: Approve addition of@biomejs/biome
Introducing Biome intodevDependencies
centralizes formatting and linting tools in the monorepo.infrastructure/eid-wallet/package.json (2)
21-33
: Approve Tauri plugin additions in dependencies
The new@tauri-apps/plugin-barcode-scanner
,@tauri-apps/plugin-biometric
, and@tauri-apps/plugin-store
dependencies correctly align with the native plugin integration in Rust.
35-67
: Approve devDependencies update
Moving@biomejs/biome
todevDependencies
and retaining other dev tools supports consistent format, lint, and test workflows in theeid-wallet
package.infrastructure/eid-wallet/src/lib/global/runtime.svelte.ts (3)
1-1
: Good implementation of biometric plugin import.Adding the BiometryType import from the Tauri biometric plugin is a good step toward implementing biometric authentication features in the wallet.
8-14
: Well-documented biometry types.The documentation comments clearly explain the numeric values associated with each biometry type, which is helpful for developers who will be working with this code.
20-20
: Proper initialization of biometry state.Setting the initial biometry state to undefined is appropriate since the application will need to check device capabilities before determining the actual value.
infrastructure/eid-wallet/src/lib/ui/Button/ButtonAction.svelte (7)
5-12
: Consistent formatting applied.These formatting changes align with the project's code style standardization effort. No functional changes were made to the component interface.
14-24
: Consistent formatting applied to props destructuring.The indentation changes maintain consistency with the project's formatting standards.
29-40
: Consistent formatting applied to handleClick function.The error handling logic remains unchanged, only formatting has been adjusted.
42-48
: Consistent formatting applied to variant classes.The button styling definitions remain functionally unchanged.
50-56
: Consistent formatting applied to disabled variant classes.The disabled state styling remains functionally unchanged.
58-61
: Consistent formatting applied to size variants.The size definitions remain functionally unchanged.
63-76
: Consistent formatting applied to derived classes.The class composition logic remains functionally unchanged.
infrastructure/eid-wallet/src-tauri/capabilities/mobile.json (1)
1-19
:✅ Verification successful
Good implementation of mobile capabilities for Tauri plugins.
This capability definition properly configures the required permissions for mobile platforms (iOS and Android), enabling core functionality including biometric authentication and barcode scanning features.
Make sure this capability is referenced in your tauri.conf.json file's capabilities section to ensure it's correctly applied to the application.
🏁 Script executed:
#!/bin/bash # Check if the mobile-capability is referenced in tauri.conf.json grep -r "mobile-capability" infrastructure/eid-wallet/src-tauri/tauri.conf.jsonLength of output: 124
Approved Tauri mobile capability configuration
The
mobile-capability
definition ininfrastructure/eid-wallet/src-tauri/capabilities/mobile.json
is correctly referenced in yourinfrastructure/eid-wallet/src-tauri/tauri.conf.json
under the"capabilities"
array:
- infrastructure/eid-wallet/src-tauri/tauri.conf.json:
"capabilities": ["mobile-capability"],
No further changes required—this capability will now be applied to both iOS and Android builds.
infrastructure/eid-wallet/src/lib/ui/Button/ButtonIcon.svelte (10)
6-32
: Consistent formatting applied to button interface.These formatting changes align with the project's code style standardization effort. No functional changes were made to the component's interface.
34-48
: Consistent formatting applied to props destructuring.The indentation changes maintain consistency with the project's formatting standards.
53-64
: Consistent formatting applied to handleClick function.The error handling logic remains unchanged, only formatting has been adjusted.
66-70
: Consistent formatting applied to size variants.The size definitions remain functionally unchanged.
72-76
: Consistent formatting applied to icon size variants.The icon size definitions remain functionally unchanged.
78-85
: Consistent formatting applied to background color mapping.The background color definitions remain functionally unchanged.
87-94
: Consistent formatting applied to text color mapping.The text color definitions remain functionally unchanged.
96-103
: Consistent formatting applied to icon size resolution logic.The icon size resolution logic remains functionally unchanged.
105-113
: Consistent formatting applied to background size resolution logic.The background size resolution logic remains functionally unchanged.
114-123
: Consistent formatting applied to derived classes.The class composition logic remains functionally unchanged.
infrastructure/eid-wallet/src-tauri/src/errors.rs (1)
1-9
: Well-structured error handling using thiserror.The error enum is well-designed with appropriate variants for IO errors and custom messages. The use of
#[error(transparent)]
for IO errors maintains the original error details, which is good practice.infrastructure/eid-wallet/src-tauri/src/funcs/mod.rs (1)
1-7
: Good choice of Argon2 for secure password hashing.Using Argon2 with random salt generation is excellent for secure credential storage. The import structure is clean and the dependency on the custom error type is appropriate.
infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.svelte (1)
15-22
: Good improvement to component interface.Changing the interface to extend
HTMLAttributes<HTMLInputElement>
instead ofHTMLDivElement
is a better match for the component's behavior, allowing input attributes to be properly typed and passed through.infrastructure/eid-wallet/src/lib/global/state.ts (1)
1-3
: LGTM! Good implementation of controller importsThe file properly imports necessary dependencies and controllers for the global state implementation.
infrastructure/eid-wallet/src-tauri/src/lib.rs (2)
1-3
: LGTM! Good modularization of codeGood organization by separating errors and functions into their own modules, which promotes better code maintainability.
23-32
: LGTM! Good implementation of conditional plugin initializationThe code correctly initializes the barcode scanner and store plugins for all platforms, and conditionally initializes the biometric plugin for mobile platforms only. This is a good approach for platform-specific features.
infrastructure/eid-wallet/src/routes/+page.svelte (1)
19-27
: Improve navigation logic readabilityThe current nested if-statements could be more readable with early returns or a clearer structure:
if (!(await globalState.userController.user)) { await goto("/onboarding"); return; } if (!(await globalState.securityController.pinHash)) { await goto("/register"); return; } await goto("/login");infrastructure/eid-wallet/src/routes/+layout.svelte (2)
3-10
: Good addition of biometric and global state importsThe imports are well-organized and include all necessary modules for biometric authentication and global state management.
13-14
: Proper Svelte context setup for global stateThe global state is correctly declared with
$state
and properly exposed via Svelte's context API, making it accessible to all child components.Also applies to: 19-20
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte (2)
14-19
: Good state management setupThe component properly initializes all necessary state variables using Svelte's reactive state syntax.
78-91
: Well-structured login interfaceThe UI layout is clean and properly structured with semantic HTML. The error message is appropriately conditionally displayed.
infrastructure/eid-wallet/src/routes/(auth)/register/+page.svelte (3)
15-21
: Good state management for biometric availabilityAdding the
isBiometricsAvailable
state variable and global state is a good approach for tracking and managing biometric capabilities.
135-138
: Good UI feedback for biometric unavailabilityExcellent implementation of UI feedback when biometrics are unavailable, with both disabling the button and showing an explanatory message.
57-68
: 🛠️ Refactor suggestionLogic error in PIN confirmation flow
The PIN confirmation logic is not optimal. It checks if the PINs match but only after already processing them, which could lead to confusing behavior.
handleConfirm = async () => { //confirm pin logic goes here if (repeatPin && repeatPin.length === 4 && pin !== repeatPin) { firstStep = true; isError = true; + return; // Add early return to prevent further execution } else { isError = false; showDrawer = true; await globalState?.securityController.updatePin(pin, repeatPin); - return; } };Likely an incorrect or invalid review comment.
infrastructure/eid-wallet/src/lib/global/controllers/security.ts (2)
1-29
: Well-structured controller class with good documentationThe SecurityController class is well-documented with JSDoc comments that clearly explain its purpose, usage, and methods. The constructor properly initializes the store dependency.
41-51
: Good PIN validation and secure storageThe PIN validation using regex ensures a consistent 4-digit format, and invoking a native function to hash the PIN before storage is a good security practice.
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte (1)
11-21
:$state
helper is used but never imported – verify build tooling expectationsEvery reactive variable relies on
$state(...)
, yet the helper (normally exported from@nanostores/svelte
,svelte-use
, etc.) is not imported.
If the project uses a global Vite/Svelte macro to inject$state
, this is fine, otherwise this will raise a “$state
is not defined” error at compile time.+import { state as $state } from '@your‑store/pkg'; // ← only if not provided globally
Please confirm that the bundler really injects
$state
; if not, add the import or switch to Svelte’s built‑inwritable
stores.
infrastructure/eid-wallet/src/routes/(auth)/verify/+page.svelte
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (1)
pnpm-lock.yaml
is excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (6)
.vscode/extensions.json
(1 hunks).vscode/settings.json
(1 hunks)biome.json
(1 hunks)infrastructure/eid-wallet/biome.json
(1 hunks)infrastructure/w3id/src/logs/log-manager.ts
(2 hunks)infrastructure/w3id/src/logs/log.types.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (2)
- biome.json
- .vscode/extensions.json
🚧 Files skipped from review as they are similar to previous changes (2)
- infrastructure/w3id/src/logs/log.types.ts
- infrastructure/w3id/src/logs/log-manager.ts
🔇 Additional comments (5)
.vscode/settings.json (3)
2-2
: Enable Svelte TypeScript Plugin
Enabling"svelte.enable-ts-plugin": true
correctly activates the Svelte TypeScript language server feature.
3-5
: Verify Rust Analyzer Linked Project
Please confirm that the path"infrastructure/eid-wallet/src-tauri/Cargo.toml"
accurately points to your Tauri Rust project from the workspace root.
6-9
: Configure Rust Formatter on Save
Settingrust-analyzer
as the default formatter withformatOnSave
aligns with Rust formatting conventions and ensures consistent styling.infrastructure/eid-wallet/biome.json (2)
2-3
: Extend Root Biome Configuration
Extending from"../../biome.json"
centralizes shared linting and formatting rules. Please verify this path resolves correctly in your project structure.
4-6
: Configure Import Organization
Adding anorganizeImports
block forsrc/**/*.ts
andsrc/**/*.svelte
ensures imports are sorted and cleaned automatically.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (6)
infrastructure/web3-adapter/src/adapter.ts (2)
1-5
: Consider using generics for improved type safety in FieldMappingThe current implementation uses
any
types for the transform function, which bypasses TypeScript's type checking. Consider using generics to make this more type-safe.-export type FieldMapping = { - sourceField: string; - targetField: string; - transform?: (value: any) => any; -}; +export type FieldMapping<S = any, T = any> = { + sourceField: string; + targetField: string; + transform?: (value: S) => T; +};🧰 Tools
🪛 Biome (1.9.4)
[error] 4-4: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 4-4: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
7-59
: Enhance Web3Adapter with generics for better type safetyThe class uses
Record<string, any>
in multiple places, which is flagged by static analysis tools. Consider refactoring to use generics for better type safety while maintaining flexibility.-export class Web3Adapter { - private mappings: Map<string, FieldMapping[]>; +export class Web3Adapter<PlatformData extends Record<string, any> = Record<string, any>, UniversalData extends Record<string, any> = Record<string, any>> { + private mappings: Map<string, FieldMapping<any, any>[]>; constructor() { this.mappings = new Map(); } - public registerMapping(platform: string, mappings: FieldMapping[]): void { + public registerMapping(platform: string, mappings: FieldMapping<any, any>[]): void { this.mappings.set(platform, mappings); } - public toUniversal( - platform: string, - data: Record<string, any>, - ): Record<string, any> { + public toUniversal( + platform: string, + data: PlatformData, + ): UniversalData { const mappings = this.mappings.get(platform); if (!mappings) { throw new Error(`No mappings found for platform: ${platform}`); } - const result: Record<string, any> = {}; + const result = {} as UniversalData; for (const mapping of mappings) { if (data[mapping.sourceField] !== undefined) { const value = mapping.transform ? mapping.transform(data[mapping.sourceField]) : data[mapping.sourceField]; result[mapping.targetField] = value; } } return result; } - public fromUniversal( - platform: string, - data: Record<string, any>, - ): Record<string, any> { + public fromUniversal( + platform: string, + data: UniversalData, + ): PlatformData { const mappings = this.mappings.get(platform); if (!mappings) { throw new Error(`No mappings found for platform: ${platform}`); } - const result: Record<string, any> = {}; + const result = {} as PlatformData; for (const mapping of mappings) { if (data[mapping.targetField] !== undefined) { const value = mapping.transform ? mapping.transform(data[mapping.targetField]) : data[mapping.targetField]; result[mapping.sourceField] = value; } } return result; } }🧰 Tools
🪛 Biome (1.9.4)
[error] 20-20: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 21-21: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 27-27: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 41-41: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 42-42: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 48-48: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
infrastructure/web3-adapter/src/__tests__/evault.test.ts (2)
6-18
: Consider using a more specific type for GraphQL variablesUsing
any
type for variables can lead to type-safety issues. Consider a more specific type that aligns with your GraphQL schema.async function queryGraphQL( query: string, - variables: Record<string, any> = {}, + variables: Record<string, unknown> = {}, ) { const response = await fetch(EVaultEndpoint, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ query, variables }), }); return response.json(); }🧰 Tools
🪛 Biome (1.9.4)
[error] 8-8: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
28-97
: Add assertions to verify retrieved data in the first testThe first test stores and retrieves data but doesn't validate that the retrieved data matches the original data structure. Consider adding assertions similar to those in the second test to verify data integrity.
// Convert back to platform format const platformData = adapter.fromUniversal("twitter", retrievedData); + + // Verify data integrity + expect(platformData).toEqual({ + tweet: twitterData.tweet, + likes: twitterData.likes, + replies: twitterData.replies, + image: twitterData.image, + }); + + // Verify specific fields + expect(platformData.tweet).toBe(twitterData.tweet); + expect(platformData.likes).toEqual(twitterData.likes); + expect(platformData.replies).toEqual(twitterData.replies); + expect(platformData.image).toBe(twitterData.image);infrastructure/web3-adapter/package.json (2)
9-16
: Review scripts for clarity and flag collisions
- The
"check"
script name may collide with other CLI commands; consider renaming it (e.g.,"validate"
or"check-all"
).- For
check-format
, add--check
to ensure it only verifies formatting without modifying files:- "check-format": "npx @biomejs/biome format ./src", + "check-format": "npx @biomejs/biome format --check ./src",
- Confirm that
lint
andcheck
scripts use intended flags:lint
typically auto-fixes with--write
; if you want strict lint checks without writing, remove--write
.
31-37
: Remove stale Jest configuration if unusedIf you standardize on Vitest and drop Jest dependencies, remove the
"jest"
section (lines 31–37) to avoid dead config. Vitest can be configured viavitest.config.ts
or inpackage.json
instead.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (10)
infrastructure/eid-wallet/src/lib/global/controllers/user.ts
(1 hunks)infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.svelte
(2 hunks)infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
(1 hunks)infrastructure/w3id/src/logs/log-manager.ts
(2 hunks)infrastructure/w3id/src/logs/log.types.ts
(1 hunks)infrastructure/w3id/src/w3id.ts
(1 hunks)infrastructure/web3-adapter/package.json
(1 hunks)infrastructure/web3-adapter/src/__tests__/adapter.test.ts
(1 hunks)infrastructure/web3-adapter/src/__tests__/evault.test.ts
(5 hunks)infrastructure/web3-adapter/src/adapter.ts
(1 hunks)
✅ Files skipped from review due to trivial changes (3)
- infrastructure/web3-adapter/src/tests/adapter.test.ts
- infrastructure/w3id/src/w3id.ts
- infrastructure/w3id/src/logs/log-manager.ts
🚧 Files skipped from review as they are similar to previous changes (4)
- infrastructure/w3id/src/logs/log.types.ts
- infrastructure/eid-wallet/src/lib/global/controllers/user.ts
- infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte
- infrastructure/eid-wallet/src/lib/ui/InputPin/InputPin.svelte
🧰 Additional context used
🪛 Biome (1.9.4)
infrastructure/web3-adapter/src/__tests__/evault.test.ts
[error] 8-8: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
infrastructure/web3-adapter/src/adapter.ts
[error] 4-4: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 4-4: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 20-20: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 21-21: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 27-27: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 41-41: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 42-42: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
[error] 48-48: Unexpected any. Specify a different type.
any disables many type checking rules. Its use should be avoided.
(lint/suspicious/noExplicitAny)
"dependencies": { | ||
"evault-core": "workspace:*", | ||
"test": "^3.3.0", | ||
"vitest": "^3.1.2" | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Mismatched dependency vs. devDependency classification
- Packages
vitest
andtest
are declared under"dependencies"
, but they’re only used during development/testing. - Move them to
"devDependencies"
to prevent unnecessary installation in production. - Also, verify if the
"test"
dependency (^3.3.0
) is intentional; if it isn’t a required runtime module, remove it.
Apply this diff:
"dependencies": {
"evault-core": "workspace:*"
- ,"test": "^3.3.0"
- ,"vitest": "^3.1.2"
},
"devDependencies": {
+ "vitest": "^3.1.2",
"@types/jest": "^29.5.0",
"@typescript-eslint/eslint-plugin": "^5.59.0",
"@typescript-eslint/parser": "^5.59.0",
"eslint": "^8.38.0",
"jest": "^29.5.0",
"ts-jest": "^29.1.0",
"typescript": "^5.0.4"
}
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
"dependencies": { | |
"evault-core": "workspace:*", | |
"test": "^3.3.0", | |
"vitest": "^3.1.2" | |
}, | |
"dependencies": { | |
"evault-core": "workspace:*" | |
}, | |
"devDependencies": { | |
"vitest": "^3.1.2", | |
"@types/jest": "^29.5.0", | |
"@typescript-eslint/eslint-plugin": "^5.59.0", | |
"@typescript-eslint/parser": "^5.59.0", | |
"eslint": "^8.38.0", | |
"jest": "^29.5.0", | |
"ts-jest": "^29.1.0", | |
"typescript": "^5.0.4" | |
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
outside pr scope @coodos confirm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
"devDependencies": { | ||
"@types/jest": "^29.5.0", | ||
"@typescript-eslint/eslint-plugin": "^5.59.0", | ||
"@typescript-eslint/parser": "^5.59.0", | ||
"eslint": "^8.38.0", | ||
"jest": "^29.5.0", | ||
"ts-jest": "^29.1.0", | ||
"typescript": "^5.0.4" | ||
}, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Sync test dependencies with chosen test runner
You currently have both Jest (with ts-jest
and its config) and Vitest declared. Please confirm which framework you intend to use:
- If you prefer Vitest, remove Jest-related packages (
jest
,ts-jest
,@types/jest
) and the"jest"
configuration block. - If you stick with Jest, revert the
"test"
script fromvitest
back tojest
.
Keeping both can lead to confusion and bloat.
🏁 Script executed:
#!/bin/bash
# Verify references to both test frameworks
rg -n "vitest(" .
rg -n "preset.*ts-jest" .
Length of output: 187
Let’s verify whether Vitest is configured alongside Jest in your package.json:
🏁 Script executed:
#!/bin/bash
# Check for Vitest entries and the test script in package.json
rg -n '"vitest' infrastructure/web3-adapter/package.json
rg -n '"test"' infrastructure/web3-adapter/package.json -A 3
Length of output: 495
🏁 Script executed:
#!/bin/bash
# Print the entire package.json to verify test framework configurations
cat infrastructure/web3-adapter/package.json
Length of output: 1186
Unify Test Framework and Remove Unused Packages
Your infrastructure/web3-adapter/package.json
currently configures Vitest as the test runner ("test": "vitest"
) but retains Jest packages and config—and even a stray "test": "^3.3.0"
dependency. This overlap leads to confusion and unnecessary bloat. Please choose one of the following:
• If you intend to use Vitest:
– Remove Jest-related devDependencies (jest
, ts-jest
, @types/jest
)
– Delete the "jest"
configuration block at the bottom
– Move "vitest": "^3.1.2"
into devDependencies and remove the "test": "^3.3.0"
dependency
• If you intend to keep Jest:
– Change the "test"
script back to jest
– Remove vitest
from dependencies and delete the "vitest"
script
– Optionally add @types/jest
/ts-jest
only if you need TypeScript support
Pinpoint locations:
- Line 10:
"test": "vitest"
- Lines 19–20:
"test": "^3.3.0"
&"vitest": "^3.1.2"
in dependencies - Lines 22–30: Jest packages in devDependencies
- Bottom of file: Jest config block
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
outside pr scope @coodos confirm
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (1)
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte (1)
36-37
: Unused loading state variableThe
loading
state variable is declared but never used in the component. Either utilize it to provide loading feedback to the user or remove it.-let scanning = false; -let loading = false; +let scanning = false;Alternatively, implement visual feedback using the loading state:
<h4 class="text-white font-semibold text-center mt-20">Point the camera at the code</h4> +{#if loading} + <div class="text-white text-center mt-4">Loading camera...</div> +{/if}
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte
(8 hunks)
🔇 Additional comments (5)
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte (5)
62-76
: LGTM! Scanning implementation with proper guardsThe implementation includes an idempotency guard to prevent multiple concurrent scans and properly manages the scanning state. This addresses the concerns raised in previous reviews.
88-94
: LGTM! Proper component lifecycle managementThe component correctly initializes scanning on mount and cleans up resources on unmount, which is crucial for proper resource management.
161-171
: LGTM! Restart scanning when drawers are closedThe component correctly restarts scanning when drawers are closed or actions are confirmed, ensuring continuous scanning capabilities while the component is mounted.
Also applies to: 204-204
155-155
: LGTM! Display scanned dataThe component now correctly displays the content of the scanned QR code instead of static text.
122-129
:❌ Incorrect review comment
Flashlight toggle doesn't control the device flashlight
The flashlight button toggles a state variable but doesn't actually control the device flashlight.
Implement the flashlight control using the Tauri API:
<Button.Icon icon={FlashlightIcon} aria-label="Toggle flashlight" bgSize="md" iconSize={32} bgColor={flashlightOn ? "white" : "secondary"} iconColor="black" - onclick={() => (flashlightOn = !flashlightOn)} + onclick={async () => { + try { + flashlightOn = !flashlightOn; + // Use the Tauri barcode scanner plugin to toggle flashlight + // This is a placeholder - check the actual API for controlling flashlight + // await toggleFlashlight(flashlightOn); + } catch (error) { + console.error("Failed to toggle flashlight:", error); + flashlightOn = !flashlightOn; // Revert state on error + } + }} />
🌐 Web query:
Does Tauri barcode scanner plugin support controlling the device flashlight?
💡 Result:
The Tauri barcode scanner plugin does not currently support controlling the device flashlight. There is an enhancement request for this feature in the Tauri workspace, specifically asking for the addition of a method to turn on the flashlight in the barcode scanner plugin for Android and iOS platforms[1][2]. Therefore, as of now, the plugin only allows for barcode scanning without flashlight control.
Citations:
- 1: tauri-apps/plugins-workspace#1481
- 2: https://crates.io/crates/tauri-plugin-barcode-scanner
- 3: https://v2.tauri.app/plugin/barcode-scanner/
- 4: https://www.dynamsoft.com/codepool/tauri-document-scanning-desktop-app.html
- 5: https://v2.tauri.app/reference/javascript/barcode-scanner/
- 6: https://community.kodular.io/t/barcode-scanner-flashlight/131095
- 7: https://github.com/tauri-apps/plugins-workspace/blob/v2/README.md
- 8: https://tauri.app/reference/javascript/notification/
- 9: yuriy-budiyev/code-scanner#181
- 10: https://www.trackawesomelist.com/riderx/awesome-capacitor/
Flashlight control isn’t supported by the Tauri barcode-scanner plugin
The current Tauri barcode-scanner plugin does not expose any API to turn the device flashlight on or off. Your toggle only updates UI state and cannot affect the camera light. You have two options:
- Remove or disable the flashlight toggle until the plugin adds support (see issue tauri-apps/plugins-workspace#1481)
- Keep it as a “future enhancement” stub and track the upstream feature request
No code changes are required on our side until the plugin provides a flashlight API.
Likely an incorrect or invalid review comment.
async function startScan() { | ||
let permissions = await checkPermissions() | ||
.then((permissions) => { | ||
return permissions; | ||
}) | ||
.catch(() => { | ||
return null; // possibly return "denied"? or does that imply that the check has been successful, but was actively denied? | ||
}); | ||
// TODO: handle receiving "prompt-with-rationale" (issue: https://github.com/tauri-apps/plugins-workspace/issues/979) | ||
if (permissions === "prompt") { | ||
permissions = await requestPermissions(); // handle in more detail? | ||
} | ||
permissions_nullable = permissions; | ||
if (permissions === "granted") { | ||
// Scanning parameters | ||
const formats = [Format.QRCode]; | ||
const windowed = true; | ||
if (scanning) return; | ||
scanning = true; | ||
scan({ formats, windowed }) | ||
.then((res) => { | ||
console.log("Scan result:", res); | ||
scannedData = res; | ||
codeScannedDrawerOpen = true; | ||
}) | ||
.catch((error) => { | ||
// TODO: display error to user | ||
console.error("Scan error:", error); | ||
}) | ||
.finally(() => { | ||
scanning = false; | ||
}); | ||
} | ||
console.error("Permission denied or not granted"); | ||
// TODO: consider handling GUI for permission denied | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Improve user feedback for permission states
The startScan
function implements permission checking, but lacks user feedback when permissions are denied. The error message on line 79 is only logged to the console, leaving users without visual indicators when their camera can't be accessed.
Consider implementing a visual feedback mechanism for all permission states:
if (permissions === "granted") {
// Scanning parameters
...
+} else {
+ // Show visual feedback to the user instead of just console logging
+ // For example, display a toast notification or dialog
+ let message = permissions === "denied" ?
+ "Camera access was denied. Please enable it in your device settings." :
+ "Camera permission is required for scanning QR codes.";
+
+ // TODO: Implement showing the message to the user
}
-console.error("Permission denied or not granted");
-// TODO: consider handling GUI for permission denied
📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
async function startScan() { | |
let permissions = await checkPermissions() | |
.then((permissions) => { | |
return permissions; | |
}) | |
.catch(() => { | |
return null; // possibly return "denied"? or does that imply that the check has been successful, but was actively denied? | |
}); | |
// TODO: handle receiving "prompt-with-rationale" (issue: https://github.com/tauri-apps/plugins-workspace/issues/979) | |
if (permissions === "prompt") { | |
permissions = await requestPermissions(); // handle in more detail? | |
} | |
permissions_nullable = permissions; | |
if (permissions === "granted") { | |
// Scanning parameters | |
const formats = [Format.QRCode]; | |
const windowed = true; | |
if (scanning) return; | |
scanning = true; | |
scan({ formats, windowed }) | |
.then((res) => { | |
console.log("Scan result:", res); | |
scannedData = res; | |
codeScannedDrawerOpen = true; | |
}) | |
.catch((error) => { | |
// TODO: display error to user | |
console.error("Scan error:", error); | |
}) | |
.finally(() => { | |
scanning = false; | |
}); | |
} | |
console.error("Permission denied or not granted"); | |
// TODO: consider handling GUI for permission denied | |
} | |
async function startScan() { | |
let permissions = await checkPermissions() | |
.then((permissions) => { | |
return permissions; | |
}) | |
.catch(() => { | |
return null; // possibly return "denied"? or does that imply that the check has been successful, but was actively denied? | |
}); | |
// TODO: handle receiving "prompt-with-rationale" (issue: https://github.com/tauri-apps/plugins-workspace/issues/979) | |
if (permissions === "prompt") { | |
permissions = await requestPermissions(); // handle in more detail? | |
} | |
permissions_nullable = permissions; | |
if (permissions === "granted") { | |
// Scanning parameters | |
const formats = [Format.QRCode]; | |
const windowed = true; | |
if (scanning) return; | |
scanning = true; | |
scan({ formats, windowed }) | |
.then((res) => { | |
console.log("Scan result:", res); | |
scannedData = res; | |
codeScannedDrawerOpen = true; | |
}) | |
.catch((error) => { | |
// TODO: display error to user | |
console.error("Scan error:", error); | |
}) | |
.finally(() => { | |
scanning = false; | |
}); | |
} else { | |
// Show visual feedback to the user instead of just console logging | |
// For example, display a toast notification or dialog | |
let message = permissions === "denied" | |
? "Camera access was denied. Please enable it in your device settings." | |
: "Camera permission is required for scanning QR codes."; | |
// TODO: Implement showing the message to the user | |
} | |
} |
// TODO: handle receiving "prompt-with-rationale" (issue: https://github.com/tauri-apps/plugins-workspace/issues/979) | ||
if (permissions === "prompt") { | ||
permissions = await requestPermissions(); // handle in more detail? | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Address the TODO comment about "prompt-with-rationale"
There's a TODO comment about handling the "prompt-with-rationale" permission state, which is currently unimplemented.
This seems to be an ongoing issue with the Tauri plugin itself (referenced issue #979). You should either implement a workaround or document the limitation in your code.
🌐 Web query:
What is the "prompt-with-rationale" permission state in Tauri barcode scanner plugin?
💡 Result:
The "prompt-with-rationale" permission state in the Tauri barcode scanner plugin is an additional variant of the PermissionState
enum. This enum typically includes states such as "granted," "denied," or "prompt" to indicate the user's permissions status for accessing the camera. The "prompt-with-rationale" variant suggests that the system will prompt the user to grant permission with an explanation or rationale provided for why the permission is needed. This is particularly relevant on Android, where applications often need to justify why they require certain permissions, such as camera access[1][2][7].
However, there have been issues reported where the plugin might return "prompt-with-rationale" instead of the expected "granted," "denied," or "prompt" states on Android, indicating a bug or unexpected behavior[1].
To handle permissions effectively, developers can use functions like requestPermissions()
and checkPermissions()
provided by the plugin to manage and query the user's permission status[2][4]. If the user denies a permission, developers can use openAppSettings()
to guide the user to manually enable it in the app's settings[4].
Citations:
- 1: [barcode-scanner][v2] bug: Unhandled variant
prompt-with-rationale
in typePermissionState
tauri-apps/plugins-workspace#979 - 2: https://tauri.app/reference/javascript/barcode-scanner/
- 3: [BARCODE SCANNER] [BUG] Doesn't ask again when permission is set to ask every time on android. tauri-apps/plugins-workspace#2312
- 4: https://v2.tauri.app/plugin/barcode-scanner/
- 5: https://v2.tauri.app/reference/javascript/api/namespacecore/
- 6: https://v2.tauri.app/security/permissions/
- 7: https://tauri.app/develop/plugins/develop-mobile/
- 8: https://v2.tauri.app/reference/javascript/notification/
- 9: https://v2.tauri.app/learn/security/using-plugin-permissions/
- 10: https://v2.tauri.org.cn/reference/javascript/barcode-scanner/
Handle the “prompt-with-rationale” permission state
The barcode-scanner plugin can return a fourth PermissionState
("prompt-with-rationale") on Android (see tauri-apps/plugins-workspace#979). You need to either provide your own rationale UI before re-requesting permissions or explicitly document this limitation until the plugin is fixed.
• In infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte (around lines 50–53):
- Add a branch for
"prompt-with-rationale"
that shows a rationale dialog (e.g. “We need camera access to scan QR codes”) before callingrequestPermissions()
again. - Alternatively, update the TODO to note this is a known plugin issue and link the GitHub issue.
Example fix snippet:
// TODO: handle receiving "prompt-with-rationale" (issue: https://github.com/tauri-apps/plugins-workspace/issues/979)
- if (permissions === "prompt") {
+ if (permissions === "prompt-with-rationale") {
+ // Show user why we need camera access, then re-request permissions
+ await showCameraRationaleDialog();
+ permissions = await requestPermissions();
+ } else if (permissions === "prompt") {
permissions = await requestPermissions();
}
Committable suggestion skipped: line range outside the PR's diff.
* feat: tauri plugins setup * fix: add editorconfig * fix: add missing biome json * fix: run formatter * feat: biometry homework * feat: add pin set logic * feat: add biometric enabling logic * fix: sec controller qol * feat: stub user controller * fix: run format && lint * fix: sort imports * fix: import statement sort * feat: user controller * feat: pin flow * feat: biometrics unavailable * fix: pin input not working * feat: make checks pass * fix: scan works * fix: actions * feat: format on save * fix: coderabbit suggestions * chore: run format lint check * fix: scan on decline too
* initial commit * chore: add w3id readme (#3) * chore: add w3id readme * chore: bold text * chore: better formatting * docs: add w3id details * chore: format * chore: add links * fix: id spec considerations addressal (#8) * fix: id spec considerations addressal * fix: identity -> indentifier * chore: expand on trust list based recovery * chore: expand on AKA --------- Co-authored-by: Merul Dhiman <[email protected]> * Docs/eid wallet (#10) * chore: add eid-wallet folder * chore: add eid wallet docs * feat: add (#9) * feat(w3id): basic setup (#11) * feat(w3id): basic setup * fix(root): add infrastructure workspaces * update: lock file * feat(eidw): setup tauri (#40) * Feat/setup daisyui (#46) * feat: setup-daisyui * fix: index file * feat: colors added * feat: Archivo font added * fix: postcss added * fix: +layout.svelte file added * fix: packages * fix: fully migrating to tailwind v4 * feat: add Archivo font * feat: add danger colors * feat: twmerge and clsx added * feat: shadcn function added --------- Co-authored-by: Bekiboo <[email protected]> Co-authored-by: Julien <[email protected]> * feat: add storybook (#45) * feat: add storybook * update: lockfile * feat: created connection button (#48) * created connection button * added restprops to parent class * added onClick btn and storybook * fix: make font work in storybook (#54) * Feat/header (#55) * feat: add icons lib * fix: make font work in storybook * feat: Header * feat: runtime global added, icon library created, icons added, type file added * feat: header props added * fix: remove icons and type file as we are using lib for icons * fix: heading style * fix: color and icons, git merge branch 51, 54 * fix: color * fix: header-styling * fix: classes * chore: handlers added * chore: handlers added * fix: added heading --------- Co-authored-by: Soham Jaiswal <[email protected]> * Alternative w3id diagram (#52) * Feat/cupertino pane (#49) * feat: Drawer * feat: Drawer and added a function for clickoutside in utils * fix: classes * fix: drawer button position * fix: style and clickoutside * fix: pane height * fix: border-radius * fix: drawer as bulletin * fix: styling * fix: component with inbuilt features * fix: remove redundant code * fix: remove redundant code * fix: cancel button * fix: css in storybook * fix: position * fix: height of pane * fix: remove redundant code * feat: add button action component (#47) * feat: add button action component * fix: add correct weights to Archivo fontt * feat: add base button * fix: set prop classes last * feat: improve loading state * chore: cleanup * feat: add button action component * fix: add correct weights to Archivo fontt * feat: add base button * fix: set prop classes last * feat: improve loading state * chore: cleanup * chore: add documentation * fix: configure Storybook * chore: storybook gunk removal * feat: enhance ButtonAction component with type prop and better error handling --------- Co-authored-by: JulienAuvo <[email protected]> * Feat/splash screen (#63) * feat: SplashScreen * fix: remove redundant code * fix: as per given suggestion * fix: font-size * fix: logo * feat: input-pin (#56) * feat: input-pin * fix: styling as per our design * fix: added small variant * fix: hide pin on select * fix: gap between pins * fix: color of focus state * fix: removed legacy code and also fix some css to tailwind css * fix: css * fix: optional props * feat: added color variants * Feat/improve button component (#60) * feat: add white variant * feat: add small variant * chore: update doc and story for button * chore: rename cb into callback * update: improve small size * update: modify loading style * fix: return getAbsolutePath function to storybook (#58) Co-authored-by: Bekiboo <[email protected]> * feat: add selector component (#59) * feat: add selector component * feat: improve selector + add flag-icon lib * feat: improve selector + doc * feat: add utility function to get language with country name * feat: test page for language selectors * chore: add Selector Story * chore: clean test page * fix: types * fix: normalize custom tailwind colors (#71) * feat: workflows (#64) * feat: workflows * fix: node version * fix: use pnpm 10 * fix: check message * Fix/codebase linting (#73) * fix: Check Lint / lint * fix: Check Lint / lint * fix: Check Lint / lint * fix: Check Lint / lint * fix: Check Code / lint * fix: Check Format / lint * fix: Check Code / lint * fix: Check Format / lint * fix: Check Code / lint * fix: Check Format / lint * fix: Check Code / lint * fix: Check Code / lint * fix: Check Format / lint * fix: unknown property warning * fix: unknown property warning * chore: improve args type * settings nav button :) (#75) * setting bav button all done :) * lint fixski * added component to index.ts * Feat/#32 identity card fragment (#74) * identity card * identity card * lint fixski * lint fixski * lint fixski * fixed the font weight * added component to index.ts * changed span to buttton * feat: add icon button component (#68) * feat: add icon button component * feat: finish up buttonIcon + stories * fix: update with new color naming * feat: polish button icon (and button action too) * chore: format lint * chore: sort imports * chore: format, not sure why * Feat/onboarding flow (#67) * feat: onboarding-page * fix: line height and added handlers * fix: button variant * fix: text-decoration * fix: subtext * fix: underline * fix: padding and button spacing * fix: according to design update * feat: Drawer * feat: verify-pae * fix: verify-page styling * feat: drawer for both confirm pin and add bio metrics added * feat: modal added in fragments * fix: icons and flow * feat: Identifier Card * fix: copy to clipboard * feat: e-passport page * fix: error state * fix: colors * fix: lint error * fix: lint * feat: Typography * fix: typograpy * fix: as per given suggestion * fix: font-sizing * fix: identity card implementation * fix: spacing * fix: padding * fix: padding and spacing * fix: splashscreen * fix: error state * fix: styling to avoid * fix:typo * Fix/remove daisyui (#82) * refactoring: remove DaisyUI + refactor some tailwind classes and logic * refactoring: remove DaisyUI + refactor some tailwind classes and logic * feat: add Button.Nav (#77) * feat: add Button.Nav * chore: format * chore: sort imports * update: remove unused snippet and add missing props * feat: stick to fragment definition * update: documentation * fix: stories * chore: sort imports * Feat/splashscreen animation (#81) * feat: add animation to splashScreen * feat: implement data loading logic with splash screen delay * chore: sort import * update: use ButtonIcon is IdentityCard (#78) * update: use ButtonIcon is IdentityCard * feat: refactor ButtonIcon to be used anywhere in the app * chore: format indent * chore: remove useless change * feat: setup safe area (#80) * feat: setup safe area * chore: simplify implementation * chore: format * Feat/uuidv5 generation (#61) * feat: setup uuidv5 * chore: add test for deterministic UUID * feat: add Hero fragment (#88) * feat: add Hero fragment * chore: sort imports + add doc * feat: add storage specification abstract class (#92) * feat: add storage specification abstract class * chore: format and ignore lint * chore: change format checker on w3id * feat: settings-flow (#86) * feat: settings-flow * feat: settings and language page * feat : history page * feat: change pin page * fix: height of selector * fix: pin change page * fix: size of input pin * fix: spacing of pins * feat: AppNav fragment * fix: height of page * fix: padding * fix: remove redundant code * feat: privacy page * chore: add doc * fix: error state * feat: remove redundant code * chore: used app nav component --------- Co-authored-by: JulienAuvo <[email protected]> * feat: AppNav fragment (#90) * feat: AppNav fragment * chore: add doc * feat: Main page flow (#93) * feat: create root page + layout * feat: complete main page flow beta * chore: fix ts block * chore: sort imports * feat: integrate-flows (#94) * feat: intigrate-flows * fix: spacing in e-passport page * fix: page connectivity * feat: app page transitions * fix: z index * fix: pages * fix: view transition effect on splashscreen * fix: drawer pill and cancel button removed * fix: share button removed when onboarding * fix: remove share and view button when on onboarding flow * fix: remove view button * fix: ci checks * fix: transitions * fix: transititon according to direction * fix: lint error * fix: loop holes * Feat/w3id log generation (#98) * chore: create basic log generation mechanism * chore: add hashing utility function * chore: rotation event * feat: genesis entry * feat: generalize hash function * feat: append entry * chore: basic tests * chore: add tests for rotation * feat: add malform throws * chore: add the right errors * chore: fix CI stuff * chore: add missing file * chore: fix event type enum * chore: format * feat: add proper error * chore: format * chore: remove eventtypes enum * chore: add new error for bad options * chore: add options tests * feat: add codec tests * fix: err handling && jsdoc * fix: run format * fix: remove unused import * fix: improve default error messages * fix: move redundant logic to function * fix: run format * fix: type shadow * fix: useless conversion/cast * fix: run format --------- Co-authored-by: Soham Jaiswal <[email protected]> * Feat/core id creation logic (#99) * feat: create w3id builder * fix: w3id builder * feat: add global config var for w3id * chore: add docs * chore: change rand to crng * chore: add ts type again * chore: fix lint and format * chore: add w3id tests github workflow * Feat/evault core (#100) * feat: migrate neo4j * chore: envelope logic works * chore: envelope logic works * feat: parsed envelopes search * feat: generics * feat: protocol * feat: jwt sigs in w3id * chore: stuff works * chore: tests for evault core * chore: format * chore: fix test * Feat/docker compose and docs (#101) * chore: stash dockerfile progress * fix: getEnvelopesByOntology thing * chore: fix tests * Update infrastructure/evault-core/src/protocol/vault-access-guard.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: remove unused import * chore: remove package * chore: fix pnpm lock * chore: fix workflow * chore: fix port in dockerfile --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Feat/registry and evault provisioning (#106) * feat: evault provisioning * chore: fianlly fixed provisioner * feat: add logic for metadata in consul * feat: registry * chore: format * Feat/watchers logs (#114) * feat: alloc according to entropy and namespace * chore: move exports * chore: docs * feat: `whois` endpoint * feat: watcher endpoints * chore: fix format and lint * chore: fix tests * feat: web3 adapter (#115) * feat: tauri plugins setup (#97) * feat: tauri plugins setup * fix: add editorconfig * fix: add missing biome json * fix: run formatter * feat: biometry homework * feat: add pin set logic * feat: add biometric enabling logic * fix: sec controller qol * feat: stub user controller * fix: run format && lint * fix: sort imports * fix: import statement sort * feat: user controller * feat: pin flow * feat: biometrics unavailable * fix: pin input not working * feat: make checks pass * fix: scan works * fix: actions * feat: format on save * fix: coderabbit suggestions * chore: run format lint check * fix: scan on decline too * feat: documentation links (#117) * feat: bad namespace test (#116) * fix: layouts (#119) * fix: layouts * fix: Onboarding page scroll fixed * fix: page layout and prevent from scroll in all devices * fix: pages layout * chore: try to fix emulator * fix: units * fix: safezones for ios * fix: styling --------- Co-authored-by: Soham Jaiswal <[email protected]> * feat: setup-metagram (#121) * feat: setup-metagram * chore: tailwind css worked * feat: fonts added * feat: typography * fix: removed stories and fixed setup for icons lib * feat: icons and story file * fix: type of args in story * fix: lint errors * feat: colors added * feat: Button * fix: format and lint * fix: colors * fix: spinner * fix: code rebbit suggestions * fix: code rebbit suggestions * fix: paraglide removed * fix: lock file * feat: added user avatar. (#130) * feat: Button (#129) * feat: Button * fix: colors of variants * feat: Input (#131) * feat: Input * feat: styling added * fix: styling * fix: styling * fix: added a new story * fix: focus states * fix: input states * Feat/settings navigation button (#140) * feat: settings-navigation-button * fix: handler added * chore: another variant added * fix: as per given suggestion * feat: BottomNav (#132) * feat: BottomNav * fix: icons * feat: profile icons created * feat: handler added * feat: handler added * fix: correct tags * fix: as per given suggestion, bottomnav moved to fragments and also implemented on page * fix: handler * chore: routes added * feat: app transitions added * fix: direction of transition * fix: transition css * fix: directionable transition * fix: used button instead of label, and used page from state * feat: added post fragment. (#137) * feat: FileInput (#150) * feat: FileInput * fix: added icon * feat: cancel upload * fix: remove redundant code * fix: usage docs added and as per requirements ' * fix: moved to framents * feat: Toggle Switch (#143) * feat: Toggle Switch * feat: Toggle Switch * fix: as per our design * fix: as per our design * feat: Label (#146) * feat: Select (#148) * feat: Select * fix: as per our design * fix: code format and as per svelte 5 * fix: font-size * fix: font-size * fix: icon * feat: message-input (#144) * feat: message-input * fix: classes merge and a files as a prop * feat: variant added * feat: icon replaced * fix: as per code rabbit suggestions * fix: icon * fix: input file button * fix: as per suggestion * fix: classes * fix: no need of error and disabled classes * fix: input * feat: invalid inputs * feat: add number input storybook --------- Co-authored-by: Soham Jaiswal <[email protected]> * feat:Drawer (#152) * feat:Drawer * feat: Drawer with clickoutside * fix: settings * Feat/metagram header (#133) * feat: added metagram header primary linear gradient. * feat: added flash icon. * feat: added secondary state of header. * feat: added secondary state of header with menu. * chore: cleaned some code. * docs: updated component docs. --------- Co-authored-by: SoSweetHam <[email protected]> * Feat/metagram message (#135) * feat: added metagram message component. * feat: added both states of message component. * docs: added usage docs. * chore: exposed component from ui. * fix: component -> fragement --------- Co-authored-by: SoSweetHam <[email protected]> * feat: modal (#154) * fix: styling of modal * fix: modal props * fix: conflicting styles * fix: styles of drawer * fix: hide scrollbar in drawer * fix: padding * fix: used native method for dismissing of drawer * feat: Context-Menu (#156) * feat: Context-Menu * fix: name of component * fix: as per suggestion * fix: action menu position * fix: class * feat: responsive-setup (#157) * feat: responsive-setup * fix: background color * fix: added font fmaily * feat: responsive setup for mobile and desktop (#159) * feat: responsive setup for mobile and desktop * fix: width of sidebar and rightaside * fix: responsive layout * feat: SideBar * fix: added some finishing touches to sidebar and button * fix: prevent pages transition on desktop * fix: icon center * feat: settings page and icon added * feat/layout-enhancement (#168) * feat/infinite-scroll (#170) * feat/infinite-scroll * fix: aspect ratio of post * fix: bottom nav background * settings page (#169) * settings page layout done * settings page layout done * formt fix * format fix * format fix * routing for settings page fixed * settings page buttons * merge conflict * settings page tertiary pages * settings pages all done * settings pages unnecessary page deleted * requested changes done * requested changes done * Feat/comments pane (#171) * feat/comments-pane * fix: overflow and drawer swipe * feat: Comment fragment * fix: comments added * fix: comment fragment * feat: Comments reply * fix: message input position * fix: post type shifted to types file * fix: one level deep only * fix: drawer should only be render on mobile * fix: comments on layout page * fix: format * feat: messages (#174) * feat: messages * feat: ChatMessae * feat: messages by id * fix: messages page * fix: icon name * fix: hide bottom nav for chat * fix: header * fix: message bubble * fix: message bubble * fix: message bubble * fix: as per suggestion * fix: messaging * chore: change from nomad to k8s (#179) * chore: change from nomad to k8s * Update infrastructure/eid-wallet/src/routes/+layout.svelte Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat: uri extraction * feat: regitry stuff * feat: registry using local db * 📝 Add docstrings to `feat/switch-to-k8s` (#181) Docstrings generation was requested by @coodos. * #179 (comment) The following files were modified: * `infrastructure/evault-provisioner/src/templates/evault.nomad.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * chore: format --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * fix: make scan qr page work again (#185) * feat: Discover Page (#180) * refactor/Post (#186) * refactor/Post * fix: format and lint * fix: added dots for gallery * fix: added dots for gallery * fix: added dots for gallery * fix: plural name * feat: splash-screen (#187) * Feat/evault provisioning via phone (#188) * feat: eid wallet basic ui for verification * chore: evault provisioning * feat: working wallet with provisioning * feat: restrict people on dupes * 📝 Add docstrings to `feat/evault-provisioning-via-phone` (#189) Docstrings generation was requested by @coodos. * #188 (comment) The following files were modified: * `infrastructure/eid-wallet/src/lib/utils/capitalize.ts` * `infrastructure/evault-provisioner/src/utils/hmac.ts` Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * feat: added uploaded post view component. (#182) * feat: added uploaded post view component. * fix: fixed the outline and color. * fix: moved function to external definition. * fix: fixed the restProps. * profile page (#178) * basic layout for profile page * fixed alt text * merge conflict * profile page for other users implemented * fix: profile pages and logics * fixed all the pages of profile * fixed all the pages of profile * fix: format --------- Co-authored-by: gourav <[email protected]> * Feat/radio input (#176) * feat: added a radio button custom * docs: added name option in docs. * chore: cleaned the unnecessary classes and variables for input type radio. * fix: moved input radio to its own component. * fix: keydown events added. * feat: added settings tile component. (#184) * feat: added settings tile component. * chore: fixed the naming convention * chore: renamed callback to onclick * fix: fixed the use of restProps * fix: fixed the unnecessary onclick expose. * fix: fixed the join function params. * Feat/textarea (#194) * chore: removed redundant radio * feat: added textarea. * fix: tabindex * fix: removed type inconsitency. * Feat/mobile upload flow (#193) * fix: header logic in secondary * fix: fixed the text in header in post * feat: trying some hack to get file image input. * feat: added image input on clicking the post bottom nav * chore: got rid of non-required code. * feat: added the logic to get the images from user on clicking post tab. * feat: added store. * feat: added correct conversion of files. * feat: added the correct display of image when uploading. * feat: added settings tile to the post page and fixed the settingsTile component type of currentStatus * feat: added hte correct header for the audience page. * fix: fixed the page transition not happening to audience page. * feat: added audience setting * feat: added store to audience. * chore: removed console log * feat: added post button. * feat: correct button placement * fix: horizontal scroll * fix: positioning of the post button. * fix: protecting post route when no image is selected. * fix: improved type saftey * feat: added memory helper function * feat: added memory cleanup. * Feat/social media platforms (#195) * chore: this part works now wooohooo * chore: stash progress * chore: stash progress * chore: init message data models * feat: different socials * chore: blabsy ready for redesign * Feat/social media platforms (#196) * chore: this part works now wooohooo * chore: stash progress * chore: stash progress * chore: init message data models * feat: different socials * chore: blabsy ready for redesign * chore: add other socials * Feat/blabsy add clone (#198) * chore: clone twitter * feat: custom auth with firebase using w3ds * chore: add chat * feat: chat works with sync * feat: twittex * feat: global schemas * feat: blabsy adapter * refactor: shift some text messages to work on blabsy (#199) * chore: stash progress * chore: stash adapters * chore: stash working extractor * feat: adapter working properly for translating to global with globalIDs * feat: adapter toGlobal pristine * chore: stash * feat: adapter working * chore: stash until global translation from pictique * feat: bi-directional sync prestino * feat: bidir adapters * chore: login redir * chore: swap out for sqlite3 * chore: swap out for sqlite3 * chore: server conf * feat: messages one way * feat: ready to deploy * feat: ready to deploy * chore: auth thing pictique * chore: set adapter to node * chore: fix auth token thingy * chore: auth thing * chore: fix auth token thingy * chore: port for blabsy * feat: provision stuff * feat: provision * feat: provision * feat: provision * chore: fix sync * feat: temporary id thing * chore: android * chore: fix mapper sync * chore: fallback * feat: add error handling on stores * feat: fix issue with posts * chore: fix retry loop * Fix/author details (#229) * fix: author-details * fix: owner-details * fix: author avatar * fix: auth user avatar * fix: error handling * fix: author image in bottom nav --------- Co-authored-by: Merul Dhiman <[email protected]> * Fix/change name (#228) * fix: corrected the name to blabsy * fix: extra shit comming. * fix: fixed the alignment of the display in more to look more like current twitter. * fix: avatars (#226) * fix: avatars * fix: avatar in follow request page * fix: images uploaded shown in user profile * fix: button size * fix: avatar --------- Co-authored-by: Merul Dhiman <[email protected]> * chore: temp fix sync * chore: stash progress * Fix/post context menu (#231) * fix: post-context-menu * fix: user id with post * fix: removed redundant code * fix: images * fix: profile data * fix: profile data * fix: image cover * fix: logout * Fix/wallet text (#234) * changed text as per the request and fixed styling on pages with useless scroll * added settings button in main page which went missing somehow * fix: consistent padding * chore: change tags * feat: change icon * feat: webhook dynamic registry * feat: make camera permission work properlyh * chore: removed all locking mechanism thing from platforms * feat: synchronization works perfectly * feat: fixed everything up * feat: changes * chore: stats fix * chore: fix pictique visual issues * chore: fix cosmetic name issue * feat: fix sync issue * chore: fix logical issue here * chore: add qrcode ename * feat: add packages (#235) * feat: add packages * feat: add sample funcs + docs * fixed the filled color on like icon for liked post (#239) * feat: fake passport name * feat: double confirmation * chore: fix pictique login issue * fix: make no user case redir to login * fix: issues with wallet --------- Co-authored-by: Soham Jaiswal <[email protected]> Co-authored-by: SoSweetHam <[email protected]> Co-authored-by: Gourav Saini <[email protected]> Co-authored-by: Bekiboo <[email protected]> Co-authored-by: Julien <[email protected]> Co-authored-by: Ananya Rana <[email protected]> Co-authored-by: Sergey <[email protected]> Co-authored-by: Julien Connault <[email protected]> Co-authored-by: Ananya Rana <[email protected]> Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> Co-authored-by: Sahil Garg <[email protected]> Co-authored-by: Sahil Garg <[email protected]>
Description of change
Sets up base plugins, controllers, stores for logical
Issue Number
Closes #23 #42 #43 #44
Type of change
How the change has been tested
Manually
Change checklist
Summary by CodeRabbit