Skip to content

Conversation

sosweetham
Copy link
Member

@sosweetham sosweetham commented Apr 9, 2025

Description of change

Sets up base plugins, controllers, stores for logical

Issue Number

Closes #23 #42 #43 #44

Type of change

  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)

How the change has been tested

Manually

Change checklist

  • I have ensured that the CI Checks pass locally
  • I have removed any unnecessary logic
  • My code is well documented
  • I have signed my commits
  • My code follows the pattern of the application
  • I have self reviewed my code

Summary by CodeRabbit

  • New Features
    • Added live QR code scanning with camera permission handling and dynamic scan result display.
    • Introduced PIN-based and biometric authentication flows for login and registration.
    • Implemented persistent global state management with user and security controllers.
    • Added iOS permission prompts for Face ID and camera access.
  • Enhancements
    • Integrated Tauri plugins for barcode scanning, biometric authentication, and persistent storage.
    • Improved onboarding, verification, and registration flows with enhanced error handling and biometric availability detection.
  • Bug Fixes
    • Corrected input prop application in the PIN input component.
  • Chores
    • Added and updated configuration files for code formatting, linting, and workspace settings.
    • Updated package dependencies and development tools.
    • Added recommended VS Code extensions for improved developer experience.
  • Style
    • Standardized code formatting and indentation across the codebase for consistency.
  • Refactor
    • Modularized authentication and user state logic into dedicated controllers and global state management.

Copy link
Contributor

coderabbitai bot commented Apr 15, 2025

Walkthrough

This 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

Files/Paths Change Summary
.editorconfig, biome.json, .vscode/settings.json, .zed/settings.json, ... Added/updated project-wide formatting, linting, and editor config files for consistent code style and tooling.
package.json, infrastructure/eid-wallet/package.json, ... Added/updated dependencies for Tauri plugins (store, biometric, barcode scanner), Biome, and removed Prettier.
infrastructure/eid-wallet/src-tauri/Cargo.toml, Info.ios.plist, ... Added Rust dependencies and iOS permissions for biometric and barcode plugins; removed/added capability configs.
infrastructure/eid-wallet/src-tauri/src/errors.rs, funcs/mod.rs, lib.rs Added Rust error handling, Argon2 password hashing/verification, and exposed Tauri commands for PIN operations.
infrastructure/eid-wallet/src/lib/global/controllers/security.ts, ... Added SecurityController and UserController for PIN/biometric/user state management with persistent storage.
infrastructure/eid-wallet/src/lib/global/index.ts, state.ts, runtime.svelte.ts Introduced global state singleton, runtime state with biometry info, and export modules for global access.
infrastructure/eid-wallet/src/routes/+layout.svelte, +page.svelte, ... Initialized global state and biometric status in layout, updated landing page logic, and added clear PIN option.
infrastructure/eid-wallet/src/routes/(auth)/login/+page.svelte, ... Added/updated authentication flows: PIN and biometric login, registration, and verification with global state.
infrastructure/eid-wallet/src/routes/(app)/scan-qr/+page.svelte Integrated live barcode scanning using Tauri plugin, with permission handling and UI updates for scan results.
infrastructure/eid-wallet/src/lib/ui, fragments, utils, ... Widespread formatting and indentation standardization across UI and utility components; minor interface tweaks.
infrastructure/w3id/biome.json, package.json, ... Updated formatting config and added Biome as a devDependency in w3id package.

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
Loading

Assessment against linked issues

Objective Addressed Explanation
Setup Tauri + SvelteKit project structure, add required dependencies, basic functioning app (#23)
Integrate Tauri plugins: store, biometric, barcode scanner; configure permissions and platform-specific logic (#23)
Implement PIN-based authentication and biometric flows, with global state management for security and user data (#23)
Add barcode scanning feature using Tauri plugin, handle permissions, and update UI with live scan results (#23)

Possibly related PRs

  • feat: web3 adapter #115: Implements a Web3Adapter class and related tests for data transformation between platform-specific and universal formats, closely related to web3 adapter code in this PR.

Poem

A hop, a skip, a code refactor,
Tauri and Svelte now work together!
Biometric bunnies scan and store,
With PINs and QR codes galore.
Formatting neat, dependencies new,
eID-Wallet’s ready—thanks to this crew!
🐇✨


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.

❤️ Share
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

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)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@sosweetham sosweetham marked this pull request as ready for review April 22, 2025 10:31
@sosweetham sosweetham requested a review from coodos as a code owner April 22, 2025 10:31
Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 issue

Fix 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" and maxlength="1" are specified. Remove one of them.

🧹 Nitpick comments (17)
infrastructure/eid-wallet/src/routes/(app)/+layout.svelte (1)

12-16: Prefer using Svelte’s dev 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‑in dev 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 proposals

The date appears to be set in the future.

infrastructure/eid-wallet/src/routes/(auth)/verify/+page.svelte (2)

8-8: Initialize GlobalState with proper types

You've defined globalState with an explicit type but initialized it as undefined. 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 properly

This declaration is redundant as it's redefined in the onMount callback. Consider initializing it directly in the onMount 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 class

The GlobalState class manages resources but doesn't provide a way to clean up those resources when they're no longer needed. Consider adding a dispose() 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 initialization

The 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 naming

The 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 check

While 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 options

The 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 authentication

Consider 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 code

Production 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: Unconditional cancel() may throw when scanner inactive

@tauri-apps/plugin-barcode-scanner throws if cancel() 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’s on:click= directive instead of HTML onclick

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 to href for direct interaction

Showing 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

📥 Commits

Reviewing files that changed from the base of the PR and between 3c664a0 and 6da07bc.

⛔ 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 tooling

The 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 good

The indentation changes align with the project-wide formatting standardization effort mentioned in the PR summary.


13-17: Formatting changes look good

The 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 good

The 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 good

The 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 changes

These 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 unchanged

Spacing 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 changes

Indentation 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 modifications

Indentation 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 intact

All 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 in LogEvent, VerifierCallback, JWTHeader, JWTPayload, Signer, the option guards, or the CreateLogEventOptions union.

infrastructure/eid-wallet/src/lib/ui/Connection/Connection.stories.ts (1)

1-26: Storybook file reformatted for 4‑space indentation
The Connection.stories.ts file’s exported default and Primary 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 under devDependencies 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 in hash implementation
The hash 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 to getLanguageWithCountry
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 the handleClick 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 the destroy 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 entire IDLogManager 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 the runtime.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 the runtime.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 in handleGetStarted.
These comment and assignment lines were realigned to match the editorconfig settings.


14-15: Skip indentation-only formatting changes in handleNext.
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, and ssh2 have been added alphabetically under onlyBuiltDependencies, aligning with the plugin setup requirements.

infrastructure/eid-wallet/src/lib/ui/Button/ButtonNav.svelte (1)

7-8: Approve consistent indentation.
The IButtonNav interface properties (href and children) 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" under app.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.
The export default block has been reformatted to 4-space indentation, ensuring consistency with the rest of the codebase.


18-22: Approve consistent indentation for Basic story.
The args block of the Basic story now follows the 4-space indentation rule.


25-30: Approve consistent indentation for WithSettings story.
The args block of the WithSettings 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-level export 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 entire StorageSpec 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
The dummyData object and shareQR 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 in Default story
Indentation normalized to 4 spaces; behavior unchanged.


30-40: Consistent formatting in CustomSize story
Indentation normalized to 4 spaces; behavior unchanged.


44-54: Consistent formatting in Loading story
Indentation normalized to 4 spaces; behavior unchanged.


58-74: Consistent formatting in WithCallback story
Indentation normalized to 4 spaces; behavior unchanged.

infrastructure/w3id/src/errors/errors.ts (5)

2-5: Consistent formatting in MalformedIndexChainError
Constructor indentation aligned; logic untouched.


9-12: Consistent formatting in MalformedHashChainError
Constructor indentation aligned; logic untouched.


16-19: Consistent formatting in BadSignatureError
Constructor indentation aligned; logic untouched.


23-26: Consistent formatting in BadNextKeySpecifiedError
Constructor indentation aligned; logic untouched.


30-33: Consistent formatting in BadOptionsSpecifiedError
Constructor indentation aligned; logic untouched.

.zed/settings.json (1)

1-9: Approve new Zed editor settings
Configuration correctly links the Rust project for rust-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 in Primary story args
Indentation normalized to 4 spaces; story behavior unchanged.

infrastructure/eid-wallet/src/lib/ui/Selector/Selector.svelte (2)

10-15: Consistent formatting in ISelectorProps 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
The NSFaceIDUsageDescription and NSCameraUsageDescription 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‑exports GlobalState and runtime, 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 in handleClose.
These lines only adjust indentation/comments without altering behavior.


18-21: No functional changes in handleChangePIN.
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
The IHeroProps 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 into devDependencies 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 to devDependencies and retaining other dev tools supports consistent format, lint, and test workflows in the eid-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.json

Length of output: 124


Approved Tauri mobile capability configuration

The mobile-capability definition in infrastructure/eid-wallet/src-tauri/capabilities/mobile.json is correctly referenced in your infrastructure/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 of HTMLDivElement 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 imports

The 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 code

Good organization by separating errors and functions into their own modules, which promotes better code maintainability.


23-32: LGTM! Good implementation of conditional plugin initialization

The 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 readability

The 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 imports

The imports are well-organized and include all necessary modules for biometric authentication and global state management.


13-14: Proper Svelte context setup for global state

The 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 setup

The component properly initializes all necessary state variables using Svelte's reactive state syntax.


78-91: Well-structured login interface

The 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 availability

Adding the isBiometricsAvailable state variable and global state is a good approach for tracking and managing biometric capabilities.


135-138: Good UI feedback for biometric unavailability

Excellent implementation of UI feedback when biometrics are unavailable, with both disabling the button and showing an explanatory message.


57-68: 🛠️ Refactor suggestion

Logic 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 documentation

The 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 storage

The 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 expectations

Every 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‑in writable stores.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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

📥 Commits

Reviewing files that changed from the base of the PR and between 6da07bc and 14e726b.

⛔ 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
Setting rust-analyzer as the default formatter with formatOnSave 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 an organizeImports block for src/**/*.ts and src/**/*.svelte ensures imports are sorted and cleaned automatically.

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 FieldMapping

The 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 safety

The 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 variables

Using 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 test

The 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 and check 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 unused

If you standardize on Vitest and drop Jest dependencies, remove the "jest" section (lines 31–37) to avoid dead config. Vitest can be configured via vitest.config.ts or in package.json instead.

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2149ab2 and dbfafbd.

📒 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)

Comment on lines +17 to +21
"dependencies": {
"evault-core": "workspace:*",
"test": "^3.3.0",
"vitest": "^3.1.2"
},
Copy link
Contributor

@coderabbitai coderabbitai bot Apr 24, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue

Mismatched dependency vs. devDependency classification

  • Packages vitest and test 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.

Suggested change
"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"
}

Copy link
Member Author

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

Copy link
Contributor

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!

Comment on lines +22 to +30
"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"
},
Copy link
Contributor

@coderabbitai coderabbitai bot Apr 24, 2025

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 from vitest back to jest.

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

Copy link
Member Author

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

Copy link
Contributor

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!

Copy link
Contributor

@coderabbitai coderabbitai bot left a 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 variable

The 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

📥 Commits

Reviewing files that changed from the base of the PR and between dbfafbd and 0eedfb6.

📒 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 guards

The 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 management

The 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 closed

The 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 data

The 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:


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.

Comment on lines +41 to +81
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
}
Copy link
Contributor

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.

Suggested change
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
}
}

Comment on lines +50 to +53
// 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?
}
Copy link
Contributor

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:


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 calling requestPermissions() 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.

@coodos coodos merged commit 2fa85d4 into main Apr 24, 2025
4 of 5 checks passed
@coodos coodos deleted the feat/tauri-plugins-setup branch April 24, 2025 13:19
coodos pushed a commit that referenced this pull request Jul 7, 2025
* 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
coodos added a commit that referenced this pull request Jul 7, 2025
* 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]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[feature] EIDW: Setup Tauri+SvelteKit Project
4 participants