From ec11ab0817117341a4ef366ff322be955d50be63 Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Wed, 11 Jun 2025 15:28:50 +0200 Subject: [PATCH] Move shared projects to dist/shared (#900) --- .github/workflows/browser-extension-build.yml | 14 +- .github/workflows/mobile-app-build.yml | 14 +- .../workflows/sonarcloud-code-analysis.yml | 4 +- apps/browser-extension/.gitignore | 1 + apps/browser-extension/eslint.config.js | 2 +- .../src/entrypoints/background/ContextMenu.ts | 2 +- .../background/VaultMessageHandler.ts | 2 +- .../src/entrypoints/contentScript/Filter.ts | 2 +- .../src/entrypoints/contentScript/Form.ts | 2 +- .../src/entrypoints/contentScript/Popup.ts | 6 +- .../popup/components/CredentialCard.tsx | 2 +- .../CredentialDetails/AliasBlock.tsx | 4 +- .../CredentialDetails/HeaderBlock.tsx | 2 +- .../LoginCredentialsBlock.tsx | 2 +- .../CredentialDetails/TotpBlock.tsx | 2 +- .../popup/components/EmailPreview.tsx | 2 +- .../entrypoints/popup/context/DbContext.tsx | 4 +- .../entrypoints/popup/hooks/useVaultSync.ts | 2 +- .../popup/pages/CredentialAddEdit.tsx | 6 +- .../popup/pages/CredentialDetails.tsx | 2 +- .../popup/pages/CredentialsList.tsx | 2 +- .../entrypoints/popup/pages/EmailDetails.tsx | 2 +- .../entrypoints/popup/pages/EmailsList.tsx | 2 +- .../src/entrypoints/popup/pages/Login.tsx | 2 +- .../src/entrypoints/popup/pages/Unlock.tsx | 2 +- .../src/entrypoints/popup/utils/SrpUtility.ts | 2 +- .../src/utils/EncryptionUtility.ts | 4 +- .../src/utils/SqliteClient.ts | 2 +- .../src/utils/WebApiService.ts | 2 +- .../shared/identity-generator/README.md | 0 .../shared/identity-generator/index.d.ts | 0 .../shared/identity-generator/index.js | 0 .../shared/identity-generator/index.mjs | 0 .../utils/{ => dist}/shared/models/README.md | 0 .../shared/models/metadata/index.d.ts | 0 .../shared/models/metadata}/index.js | 0 .../{ => dist}/shared/models/vault/index.d.ts | 0 .../shared/models/vault}/index.js | 0 .../shared/models/webapi/index.d.ts | 0 .../{ => dist}/shared/models/webapi/index.js | 0 .../shared/password-generator/README.md | 0 .../shared/password-generator/index.d.ts | 0 .../shared/password-generator/index.js | 0 .../shared/password-generator/index.mjs | 0 .../src/utils/formDetector/FormFiller.ts | 4 +- .../__tests__/FormFiller.en.test.ts | 2 +- .../__tests__/FormFiller.generic.test.ts | 2 +- .../__tests__/FormFiller.nl.test.ts | 2 +- .../utils/formDetector/__tests__/TestUtils.ts | 4 +- .../src/utils/shared/models/index.d.ts | 2 - .../types/messaging/CredentialsResponse.ts | 2 +- .../messaging/PasswordSettingsResponse.ts | 2 +- apps/mobile-app/.eslintrc.js | 2 +- apps/mobile-app/.gitignore | 1 + .../app/(tabs)/credentials/[id].tsx | 2 +- .../app/(tabs)/credentials/add-edit.tsx | 8 +- .../app/(tabs)/credentials/index.tsx | 2 +- apps/mobile-app/app/(tabs)/emails/[id].tsx | 2 +- apps/mobile-app/app/(tabs)/emails/index.tsx | 2 +- .../settings/security/active-sessions.tsx | 2 +- .../(tabs)/settings/security/auth-logs.tsx | 4 +- .../settings/security/delete-account.tsx | 2 +- apps/mobile-app/app/login.tsx | 4 +- apps/mobile-app/components/EmailCard.tsx | 4 +- .../components/credentials/CredentialCard.tsx | 2 +- .../credentials/details/AliasDetails.tsx | 4 +- .../credentials/details/EmailPreview.tsx | 2 +- .../credentials/details/LoginCredentials.tsx | 2 +- .../credentials/details/NotesSection.tsx | 2 +- .../credentials/details/TotpSection.tsx | 2 +- apps/mobile-app/context/DbContext.tsx | 4 +- apps/mobile-app/hooks/useVaultMutate.ts | 4 +- apps/mobile-app/hooks/useVaultSync.ts | 2 +- apps/mobile-app/utils/EncryptionUtility.tsx | 4 +- apps/mobile-app/utils/SqliteClient.tsx | 4 +- apps/mobile-app/utils/SrpUtility.tsx | 2 +- apps/mobile-app/utils/WebApiService.ts | 2 +- .../shared/identity-generator/README.md | 0 .../shared/identity-generator/index.d.ts | 142 +++++++++--------- .../shared/identity-generator/index.js | 0 .../shared/identity-generator/index.mjs | 0 .../utils/{ => dist}/shared/models/README.md | 0 .../shared/models/metadata/index.d.ts | 0 .../dist/shared/models/metadata}/index.js | 0 .../{ => dist}/shared/models/vault/index.d.ts | 0 .../shared/models/vault}/index.js | 0 .../shared/models/webapi/index.d.ts | 0 .../{ => dist}/shared/models/webapi/index.js | 0 .../shared/password-generator/README.md | 0 .../dist/shared/password-generator/index.d.ts | 120 +++++++++++++++ .../shared/password-generator/index.js | 0 .../shared/password-generator/index.mjs | 0 .../utils/shared/models/vault/index.js | 3 - .../Services/JsInteropService.cs | 4 +- .../wwwroot/css/tailwind.css | 12 ++ .../shared/identity-generator/README.md | 0 .../shared/identity-generator/index.d.ts | 0 .../shared/identity-generator/index.js | 0 .../shared/identity-generator/index.mjs | 0 .../shared/password-generator/README.md | 0 .../shared/password-generator/index.d.ts | 0 .../shared/password-generator/index.js | 0 .../shared/password-generator/index.mjs | 0 .../js/shared/password-generator/index.d.ts | 120 --------------- shared/identity-generator/build.sh | 6 +- shared/models/build.sh | 4 +- shared/password-generator/build.sh | 6 +- 107 files changed, 299 insertions(+), 306 deletions(-) rename apps/browser-extension/src/utils/{ => dist}/shared/identity-generator/README.md (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/identity-generator/index.d.ts (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/identity-generator/index.js (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/identity-generator/index.mjs (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/models/README.md (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/models/metadata/index.d.ts (100%) rename apps/browser-extension/src/utils/{shared/models => dist/shared/models/metadata}/index.js (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/models/vault/index.d.ts (100%) rename apps/browser-extension/src/utils/{shared/models/metadata => dist/shared/models/vault}/index.js (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/models/webapi/index.d.ts (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/models/webapi/index.js (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/password-generator/README.md (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/password-generator/index.d.ts (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/password-generator/index.js (100%) rename apps/browser-extension/src/utils/{ => dist}/shared/password-generator/index.mjs (100%) delete mode 100644 apps/browser-extension/src/utils/shared/models/index.d.ts rename apps/mobile-app/utils/{ => dist}/shared/identity-generator/README.md (100%) rename apps/{server/AliasVault.Client/wwwroot/js => mobile-app/utils/dist}/shared/identity-generator/index.d.ts (53%) rename apps/mobile-app/utils/{ => dist}/shared/identity-generator/index.js (100%) rename apps/mobile-app/utils/{ => dist}/shared/identity-generator/index.mjs (100%) rename apps/mobile-app/utils/{ => dist}/shared/models/README.md (100%) rename apps/mobile-app/utils/{ => dist}/shared/models/metadata/index.d.ts (100%) rename apps/{browser-extension/src/utils/shared/models/vault => mobile-app/utils/dist/shared/models/metadata}/index.js (100%) rename apps/mobile-app/utils/{ => dist}/shared/models/vault/index.d.ts (100%) rename apps/mobile-app/utils/{shared/models/metadata => dist/shared/models/vault}/index.js (100%) rename apps/mobile-app/utils/{ => dist}/shared/models/webapi/index.d.ts (100%) rename apps/mobile-app/utils/{ => dist}/shared/models/webapi/index.js (100%) rename apps/mobile-app/utils/{ => dist}/shared/password-generator/README.md (100%) create mode 100644 apps/mobile-app/utils/dist/shared/password-generator/index.d.ts rename apps/mobile-app/utils/{ => dist}/shared/password-generator/index.js (100%) rename apps/mobile-app/utils/{ => dist}/shared/password-generator/index.mjs (100%) delete mode 100644 apps/mobile-app/utils/shared/models/vault/index.js rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/identity-generator/README.md (100%) rename apps/{mobile-app/utils => server/AliasVault.Client/wwwroot/js/dist}/shared/identity-generator/index.d.ts (100%) rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/identity-generator/index.js (100%) rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/identity-generator/index.mjs (100%) rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/password-generator/README.md (100%) rename apps/{mobile-app/utils => server/AliasVault.Client/wwwroot/js/dist}/shared/password-generator/index.d.ts (100%) rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/password-generator/index.js (100%) rename apps/server/AliasVault.Client/wwwroot/js/{ => dist}/shared/password-generator/index.mjs (100%) delete mode 100644 apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.d.ts diff --git a/.github/workflows/browser-extension-build.yml b/.github/workflows/browser-extension-build.yml index 872a684a8..f56187af6 100644 --- a/.github/workflows/browser-extension-build.yml +++ b/.github/workflows/browser-extension-build.yml @@ -32,8 +32,9 @@ jobs: run: | # Check if files exist and were recently modified TARGET_DIRS=( - "apps/browser-extension/src/utils/shared/identity-generator" - "apps/browser-extension/src/utils/shared/password-generator" + "apps/browser-extension/src/utils/dist/shared/identity-generator" + "apps/browser-extension/src/utils/dist/shared/password-generator" + "apps/browser-extension/src/utils/dist/shared/models" ) for dir in "${TARGET_DIRS[@]}"; do @@ -42,15 +43,6 @@ jobs: exit 1 fi - # Check for required files - REQUIRED_FILES=("index.js" "index.mjs" "index.d.ts" "index.js.map" "index.mjs.map") - for file in "${REQUIRED_FILES[@]}"; do - if [ ! -f "$dir/$file" ]; then - echo "❌ Required file $dir/$file does not exist" - exit 1 - fi - done - # Check if files were modified in the last 5 minutes find "$dir" -type f -mmin -5 | grep -q . || { echo "❌ Files in $dir were not recently modified" diff --git a/.github/workflows/mobile-app-build.yml b/.github/workflows/mobile-app-build.yml index 9d4f44ff0..40dce1711 100644 --- a/.github/workflows/mobile-app-build.yml +++ b/.github/workflows/mobile-app-build.yml @@ -53,8 +53,9 @@ jobs: run: | # Check if files exist and were recently modified TARGET_DIRS=( - "utils/shared/identity-generator" - "utils/shared/password-generator" + "utils/dist/shared/identity-generator" + "utils/dist/shared/password-generator" + "utils/dist/shared/models" ) for dir in "${TARGET_DIRS[@]}"; do @@ -63,15 +64,6 @@ jobs: exit 1 fi - # Check for required files - REQUIRED_FILES=("index.js" "index.mjs" "index.d.ts" "index.js.map" "index.mjs.map") - for file in "${REQUIRED_FILES[@]}"; do - if [ ! -f "$dir/$file" ]; then - echo "❌ Required file $dir/$file does not exist" - exit 1 - fi - done - # Check if files were modified in the last 5 minutes find "$dir" -type f -mmin -5 | grep -q . || { echo "❌ Files in $dir were not recently modified" diff --git a/.github/workflows/sonarcloud-code-analysis.yml b/.github/workflows/sonarcloud-code-analysis.yml index 1437a2486..47de81671 100644 --- a/.github/workflows/sonarcloud-code-analysis.yml +++ b/.github/workflows/sonarcloud-code-analysis.yml @@ -66,9 +66,9 @@ jobs: run: | $scanner = "${{ github.workspace }}\.sonar\scanner\dotnet-sonarscanner" if ('${{ github.event_name }}' -eq 'pull_request_target') { - & $scanner begin /k:"lanedirt_AliasVault" /o:"lanedirt" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.coverage.exclusions="**Tests*.cs" /d:sonar.exclusions="**/__tests__/test-forms/*.html,**/shared/identity-generator/*.js,**/shared/password-generator/*.js" + & $scanner begin /k:"lanedirt_AliasVault" /o:"lanedirt" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.pullrequest.key=${{ github.event.pull_request.number }} /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.coverage.exclusions="**Tests*.cs" /d:sonar.exclusions="**/__tests__/test-forms/*.html,**/dist/shared/**" } else { - & $scanner begin /k:"lanedirt_AliasVault" /o:"lanedirt" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.coverage.exclusions="**Tests*.cs" /d:sonar.exclusions="**/__tests__/test-forms/*.html,**/shared/identity-generator/*.js,**/shared/password-generator/*.js" + & $scanner begin /k:"lanedirt_AliasVault" /o:"lanedirt" /d:sonar.token="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="**/coverage.opencover.xml" /d:sonar.coverage.exclusions="**Tests*.cs" /d:sonar.exclusions="**/__tests__/test-forms/*.html,**/dist/shared/**" } dotnet build dotnet test -c Release /p:CollectCoverage=true /p:CoverletOutput=coverage /p:CoverletOutputFormat=opencover --filter 'FullyQualifiedName!~AliasVault.E2ETests' diff --git a/apps/browser-extension/.gitignore b/apps/browser-extension/.gitignore index c2820a1d4..718d286bf 100644 --- a/apps/browser-extension/.gitignore +++ b/apps/browser-extension/.gitignore @@ -10,6 +10,7 @@ lerna-debug.log* node_modules .output dist +!src/utils/dist stats.html stats-*.json .wxt diff --git a/apps/browser-extension/eslint.config.js b/apps/browser-extension/eslint.config.js index a75e74892..e9877920c 100644 --- a/apps/browser-extension/eslint.config.js +++ b/apps/browser-extension/eslint.config.js @@ -12,7 +12,7 @@ export default [ ignores: [ "dist/**", "node_modules/**", - "src/utils/shared/**", + "src/utils/dist/**", ] }, js.configs.recommended, diff --git a/apps/browser-extension/src/entrypoints/background/ContextMenu.ts b/apps/browser-extension/src/entrypoints/background/ContextMenu.ts index 466b1a73a..6b6dba1e3 100644 --- a/apps/browser-extension/src/entrypoints/background/ContextMenu.ts +++ b/apps/browser-extension/src/entrypoints/background/ContextMenu.ts @@ -1,7 +1,7 @@ import { type Browser } from '@wxt-dev/browser'; import { sendMessage } from 'webext-bridge/background'; -import { PasswordGenerator } from '@/utils/shared/password-generator'; +import { PasswordGenerator } from '@/utils/dist/shared/password-generator'; import { browser } from "#imports"; diff --git a/apps/browser-extension/src/entrypoints/background/VaultMessageHandler.ts b/apps/browser-extension/src/entrypoints/background/VaultMessageHandler.ts index 57cca153b..85b86e965 100644 --- a/apps/browser-extension/src/entrypoints/background/VaultMessageHandler.ts +++ b/apps/browser-extension/src/entrypoints/background/VaultMessageHandler.ts @@ -1,8 +1,8 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { storage } from 'wxt/utils/storage'; +import type { Vault, VaultResponse, VaultPostResponse } from '@/utils/dist/shared/models/webapi'; import { EncryptionUtility } from '@/utils/EncryptionUtility'; -import type { Vault, VaultResponse, VaultPostResponse } from '@/utils/shared/models/webapi'; import { SqliteClient } from '@/utils/SqliteClient'; import { BoolResponse as messageBoolResponse } from '@/utils/types/messaging/BoolResponse'; import { CredentialsResponse as messageCredentialsResponse } from '@/utils/types/messaging/CredentialsResponse'; diff --git a/apps/browser-extension/src/entrypoints/contentScript/Filter.ts b/apps/browser-extension/src/entrypoints/contentScript/Filter.ts index 68e2eca45..32a20c4f1 100644 --- a/apps/browser-extension/src/entrypoints/contentScript/Filter.ts +++ b/apps/browser-extension/src/entrypoints/contentScript/Filter.ts @@ -1,5 +1,5 @@ +import type { Credential } from '@/utils/dist/shared/models/vault'; import { CombinedStopWords } from '@/utils/formDetector/FieldPatterns'; -import type { Credential } from '@/utils/shared/models/vault'; type CredentialWithPriority = Credential & { priority: number; diff --git a/apps/browser-extension/src/entrypoints/contentScript/Form.ts b/apps/browser-extension/src/entrypoints/contentScript/Form.ts index 5af73bf9f..8d4ec58ac 100644 --- a/apps/browser-extension/src/entrypoints/contentScript/Form.ts +++ b/apps/browser-extension/src/entrypoints/contentScript/Form.ts @@ -1,8 +1,8 @@ import { openAutofillPopup } from '@/entrypoints/contentScript/Popup'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { FormDetector } from '@/utils/formDetector/FormDetector'; import { FormFiller } from '@/utils/formDetector/FormFiller'; -import type { Credential } from '@/utils/shared/models/vault'; /** * Global timestamp to track popup debounce time. diff --git a/apps/browser-extension/src/entrypoints/contentScript/Popup.ts b/apps/browser-extension/src/entrypoints/contentScript/Popup.ts index d9ad02cbe..926874176 100644 --- a/apps/browser-extension/src/entrypoints/contentScript/Popup.ts +++ b/apps/browser-extension/src/entrypoints/contentScript/Popup.ts @@ -4,10 +4,10 @@ import { filterCredentials } from '@/entrypoints/contentScript/Filter'; import { fillCredential } from '@/entrypoints/contentScript/Form'; import { DISABLED_SITES_KEY, TEMPORARY_DISABLED_SITES_KEY, GLOBAL_AUTOFILL_POPUP_ENABLED_KEY, VAULT_LOCKED_DISMISS_UNTIL_KEY, LAST_CUSTOM_EMAIL_KEY, LAST_CUSTOM_USERNAME_KEY } from '@/utils/Constants'; +import { CreateIdentityGenerator } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; +import { CreatePasswordGenerator, PasswordGenerator } from '@/utils/dist/shared/password-generator'; import { FormDetector } from '@/utils/formDetector/FormDetector'; -import { CreateIdentityGenerator } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; -import { CreatePasswordGenerator, PasswordGenerator } from '@/utils/shared/password-generator'; import { SqliteClient } from '@/utils/SqliteClient'; import { CredentialsResponse } from '@/utils/types/messaging/CredentialsResponse'; import { PasswordSettingsResponse } from '@/utils/types/messaging/PasswordSettingsResponse'; diff --git a/apps/browser-extension/src/entrypoints/popup/components/CredentialCard.tsx b/apps/browser-extension/src/entrypoints/popup/components/CredentialCard.tsx index ba6048f8d..efad36d7b 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/CredentialCard.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/CredentialCard.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { useNavigate } from 'react-router-dom'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import SqliteClient from '@/utils/SqliteClient'; type CredentialCardProps = { diff --git a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/AliasBlock.tsx b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/AliasBlock.tsx index 878f5585c..c435aebcc 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/AliasBlock.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/AliasBlock.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { FormInputCopyToClipboard } from '@/entrypoints/popup/components/FormInputCopyToClipboard'; -import { IdentityHelperUtils } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; +import { IdentityHelperUtils } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; type AliasBlockProps = { credential: Credential; diff --git a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/HeaderBlock.tsx b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/HeaderBlock.tsx index 9655e9a7b..141deb238 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/HeaderBlock.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/HeaderBlock.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import SqliteClient from '@/utils/SqliteClient'; type HeaderBlockProps = { diff --git a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/LoginCredentialsBlock.tsx b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/LoginCredentialsBlock.tsx index 2255a6473..35e1ac282 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/LoginCredentialsBlock.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/LoginCredentialsBlock.tsx @@ -2,7 +2,7 @@ import React from 'react'; import { FormInputCopyToClipboard } from '@/entrypoints/popup/components/FormInputCopyToClipboard'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; type LoginCredentialsBlockProps = { credential: Credential; diff --git a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/TotpBlock.tsx b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/TotpBlock.tsx index 7523978f2..e75922a33 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/TotpBlock.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/CredentialDetails/TotpBlock.tsx @@ -3,7 +3,7 @@ import React, { useState, useEffect } from 'react'; import { useDb } from '@/entrypoints/popup/context/DbContext'; -import type { TotpCode } from '@/utils/shared/models/vault'; +import type { TotpCode } from '@/utils/dist/shared/models/vault'; type TotpBlockProps = { credentialId: string; diff --git a/apps/browser-extension/src/entrypoints/popup/components/EmailPreview.tsx b/apps/browser-extension/src/entrypoints/popup/components/EmailPreview.tsx index bb1cad4f4..894ed57a4 100644 --- a/apps/browser-extension/src/entrypoints/popup/components/EmailPreview.tsx +++ b/apps/browser-extension/src/entrypoints/popup/components/EmailPreview.tsx @@ -5,8 +5,8 @@ import { useDb } from '@/entrypoints/popup/context/DbContext'; import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import { AppInfo } from '@/utils/AppInfo'; +import type { MailboxEmail } from '@/utils/dist/shared/models/webapi'; import { EncryptionUtility } from '@/utils/EncryptionUtility'; -import type { MailboxEmail } from '@/utils/shared/models/webapi'; import { storage } from '#imports'; diff --git a/apps/browser-extension/src/entrypoints/popup/context/DbContext.tsx b/apps/browser-extension/src/entrypoints/popup/context/DbContext.tsx index 66a7f1b6b..fbffddb18 100644 --- a/apps/browser-extension/src/entrypoints/popup/context/DbContext.tsx +++ b/apps/browser-extension/src/entrypoints/popup/context/DbContext.tsx @@ -1,9 +1,9 @@ import React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react'; import { sendMessage } from 'webext-bridge/popup'; +import type { VaultMetadata } from '@/utils/dist/shared/models/metadata'; +import type { VaultResponse } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { VaultMetadata } from '@/utils/shared/models/metadata'; -import type { VaultResponse } from '@/utils/shared/models/webapi'; import SqliteClient from '@/utils/SqliteClient'; import { StoreVaultRequest } from '@/utils/types/messaging/StoreVaultRequest'; import type { VaultResponse as messageVaultResponse } from '@/utils/types/messaging/VaultResponse'; diff --git a/apps/browser-extension/src/entrypoints/popup/hooks/useVaultSync.ts b/apps/browser-extension/src/entrypoints/popup/hooks/useVaultSync.ts index e3b1109fa..d111783fc 100644 --- a/apps/browser-extension/src/entrypoints/popup/hooks/useVaultSync.ts +++ b/apps/browser-extension/src/entrypoints/popup/hooks/useVaultSync.ts @@ -5,7 +5,7 @@ import { useAuth } from '@/entrypoints/popup/context/AuthContext'; import { useDb } from '@/entrypoints/popup/context/DbContext'; import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; -import type { VaultResponse } from '@/utils/shared/models/webapi'; +import type { VaultResponse } from '@/utils/dist/shared/models/webapi'; /** * Utility function to ensure a minimum time has elapsed for an operation diff --git a/apps/browser-extension/src/entrypoints/popup/pages/CredentialAddEdit.tsx b/apps/browser-extension/src/entrypoints/popup/pages/CredentialAddEdit.tsx index 012f402ad..d421ab83c 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/CredentialAddEdit.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/CredentialAddEdit.tsx @@ -14,9 +14,9 @@ import { useHeaderButtons } from '@/entrypoints/popup/context/HeaderButtonsConte import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import { useVaultMutate } from '@/entrypoints/popup/hooks/useVaultMutate'; -import { IdentityHelperUtils, CreateIdentityGenerator, CreateUsernameEmailGenerator, Identity, Gender } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; -import { CreatePasswordGenerator } from '@/utils/shared/password-generator'; +import { IdentityHelperUtils, CreateIdentityGenerator, CreateUsernameEmailGenerator, Identity, Gender } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; +import { CreatePasswordGenerator } from '@/utils/dist/shared/password-generator'; import LoadingSpinner from '../components/LoadingSpinner'; import { useLoading } from '../context/LoadingContext'; diff --git a/apps/browser-extension/src/entrypoints/popup/pages/CredentialDetails.tsx b/apps/browser-extension/src/entrypoints/popup/pages/CredentialDetails.tsx index ee9526f88..dec8d49e0 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/CredentialDetails.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/CredentialDetails.tsx @@ -15,7 +15,7 @@ import { useDb } from '@/entrypoints/popup/context/DbContext'; import { useHeaderButtons } from '@/entrypoints/popup/context/HeaderButtonsContext'; import { useLoading } from '@/entrypoints/popup/context/LoadingContext'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; /** * Credential details page. diff --git a/apps/browser-extension/src/entrypoints/popup/pages/CredentialsList.tsx b/apps/browser-extension/src/entrypoints/popup/pages/CredentialsList.tsx index 7620b1051..37818ddd4 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/CredentialsList.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/CredentialsList.tsx @@ -12,7 +12,7 @@ import { useLoading } from '@/entrypoints/popup/context/LoadingContext'; import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import { useVaultSync } from '@/entrypoints/popup/hooks/useVaultSync'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/browser-extension/src/entrypoints/popup/pages/EmailDetails.tsx b/apps/browser-extension/src/entrypoints/popup/pages/EmailDetails.tsx index fef503b0f..1f27fbbd3 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/EmailDetails.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/EmailDetails.tsx @@ -8,8 +8,8 @@ import { useLoading } from '@/entrypoints/popup/context/LoadingContext'; import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import ConversionUtility from '@/entrypoints/popup/utils/ConversionUtility'; +import type { EmailAttachment, Email } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { EmailAttachment, Email } from '@/utils/shared/models/webapi'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/browser-extension/src/entrypoints/popup/pages/EmailsList.tsx b/apps/browser-extension/src/entrypoints/popup/pages/EmailsList.tsx index 8252382b2..bd5374aa0 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/EmailsList.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/EmailsList.tsx @@ -6,8 +6,8 @@ import ReloadButton from '@/entrypoints/popup/components/ReloadButton'; import { useDb } from '@/entrypoints/popup/context/DbContext'; import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; +import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/shared/models/webapi'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/browser-extension/src/entrypoints/popup/pages/Login.tsx b/apps/browser-extension/src/entrypoints/popup/pages/Login.tsx index ebb2ed107..c46a23558 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/Login.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/Login.tsx @@ -11,8 +11,8 @@ import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import SrpUtility from '@/entrypoints/popup/utils/SrpUtility'; import { AppInfo } from '@/utils/AppInfo'; +import type { VaultResponse, LoginResponse } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { VaultResponse, LoginResponse } from '@/utils/shared/models/webapi'; import { ApiAuthError } from '@/utils/types/errors/ApiAuthError'; import ConversionUtility from '../utils/ConversionUtility'; diff --git a/apps/browser-extension/src/entrypoints/popup/pages/Unlock.tsx b/apps/browser-extension/src/entrypoints/popup/pages/Unlock.tsx index 73d6eb512..4e8dc8ac8 100644 --- a/apps/browser-extension/src/entrypoints/popup/pages/Unlock.tsx +++ b/apps/browser-extension/src/entrypoints/popup/pages/Unlock.tsx @@ -11,8 +11,8 @@ import { useWebApi } from '@/entrypoints/popup/context/WebApiContext'; import SrpUtility from '@/entrypoints/popup/utils/SrpUtility'; import { VAULT_LOCKED_DISMISS_UNTIL_KEY } from '@/utils/Constants'; +import type { VaultResponse } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { VaultResponse } from '@/utils/shared/models/webapi'; import { storage } from '#imports'; diff --git a/apps/browser-extension/src/entrypoints/popup/utils/SrpUtility.ts b/apps/browser-extension/src/entrypoints/popup/utils/SrpUtility.ts index 80b518d0e..5db814ff0 100644 --- a/apps/browser-extension/src/entrypoints/popup/utils/SrpUtility.ts +++ b/apps/browser-extension/src/entrypoints/popup/utils/SrpUtility.ts @@ -1,6 +1,6 @@ import srp from 'secure-remote-password/client' -import type { LoginRequest, LoginResponse, ValidateLoginRequest, ValidateLoginRequest2Fa, ValidateLoginResponse, BadRequestResponse } from '@/utils/shared/models/webapi'; +import type { LoginRequest, LoginResponse, ValidateLoginRequest, ValidateLoginRequest2Fa, ValidateLoginResponse, BadRequestResponse } from '@/utils/dist/shared/models/webapi'; import { ApiAuthError } from '@/utils/types/errors/ApiAuthError'; import { WebApiService } from '@/utils/WebApiService'; diff --git a/apps/browser-extension/src/utils/EncryptionUtility.ts b/apps/browser-extension/src/utils/EncryptionUtility.ts index 32df339f2..7ad9136c0 100644 --- a/apps/browser-extension/src/utils/EncryptionUtility.ts +++ b/apps/browser-extension/src/utils/EncryptionUtility.ts @@ -2,8 +2,8 @@ import { Buffer } from 'buffer'; import argon2 from 'argon2-browser/dist/argon2-bundled.min.js'; -import type { EncryptionKey } from '@/utils/shared/models/vault'; -import type { Email, MailboxEmail } from '@/utils/shared/models/webapi'; +import type { EncryptionKey } from '@/utils/dist/shared/models/vault'; +import type { Email, MailboxEmail } from '@/utils/dist/shared/models/webapi'; /** * Utility class for encryption operations including: diff --git a/apps/browser-extension/src/utils/SqliteClient.ts b/apps/browser-extension/src/utils/SqliteClient.ts index 75e944480..8c9742fea 100644 --- a/apps/browser-extension/src/utils/SqliteClient.ts +++ b/apps/browser-extension/src/utils/SqliteClient.ts @@ -1,6 +1,6 @@ import initSqlJs, { Database } from 'sql.js'; -import type { Credential, EncryptionKey, PasswordSettings, TotpCode } from '@/utils/shared/models/vault'; +import type { Credential, EncryptionKey, PasswordSettings, TotpCode } from '@/utils/dist/shared/models/vault'; /** * Placeholder base64 image for credentials without a logo. diff --git a/apps/browser-extension/src/utils/WebApiService.ts b/apps/browser-extension/src/utils/WebApiService.ts index 425a06aa0..aa0ae0dfe 100644 --- a/apps/browser-extension/src/utils/WebApiService.ts +++ b/apps/browser-extension/src/utils/WebApiService.ts @@ -1,4 +1,4 @@ -import type { StatusResponse, VaultResponse } from '@/utils/shared/models/webapi'; +import type { StatusResponse, VaultResponse } from '@/utils/dist/shared/models/webapi'; import { AppInfo } from "./AppInfo"; diff --git a/apps/browser-extension/src/utils/shared/identity-generator/README.md b/apps/browser-extension/src/utils/dist/shared/identity-generator/README.md similarity index 100% rename from apps/browser-extension/src/utils/shared/identity-generator/README.md rename to apps/browser-extension/src/utils/dist/shared/identity-generator/README.md diff --git a/apps/browser-extension/src/utils/shared/identity-generator/index.d.ts b/apps/browser-extension/src/utils/dist/shared/identity-generator/index.d.ts similarity index 100% rename from apps/browser-extension/src/utils/shared/identity-generator/index.d.ts rename to apps/browser-extension/src/utils/dist/shared/identity-generator/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/identity-generator/index.js b/apps/browser-extension/src/utils/dist/shared/identity-generator/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/identity-generator/index.js rename to apps/browser-extension/src/utils/dist/shared/identity-generator/index.js diff --git a/apps/browser-extension/src/utils/shared/identity-generator/index.mjs b/apps/browser-extension/src/utils/dist/shared/identity-generator/index.mjs similarity index 100% rename from apps/browser-extension/src/utils/shared/identity-generator/index.mjs rename to apps/browser-extension/src/utils/dist/shared/identity-generator/index.mjs diff --git a/apps/browser-extension/src/utils/shared/models/README.md b/apps/browser-extension/src/utils/dist/shared/models/README.md similarity index 100% rename from apps/browser-extension/src/utils/shared/models/README.md rename to apps/browser-extension/src/utils/dist/shared/models/README.md diff --git a/apps/browser-extension/src/utils/shared/models/metadata/index.d.ts b/apps/browser-extension/src/utils/dist/shared/models/metadata/index.d.ts similarity index 100% rename from apps/browser-extension/src/utils/shared/models/metadata/index.d.ts rename to apps/browser-extension/src/utils/dist/shared/models/metadata/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/models/index.js b/apps/browser-extension/src/utils/dist/shared/models/metadata/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/models/index.js rename to apps/browser-extension/src/utils/dist/shared/models/metadata/index.js diff --git a/apps/browser-extension/src/utils/shared/models/vault/index.d.ts b/apps/browser-extension/src/utils/dist/shared/models/vault/index.d.ts similarity index 100% rename from apps/browser-extension/src/utils/shared/models/vault/index.d.ts rename to apps/browser-extension/src/utils/dist/shared/models/vault/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/models/metadata/index.js b/apps/browser-extension/src/utils/dist/shared/models/vault/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/models/metadata/index.js rename to apps/browser-extension/src/utils/dist/shared/models/vault/index.js diff --git a/apps/browser-extension/src/utils/shared/models/webapi/index.d.ts b/apps/browser-extension/src/utils/dist/shared/models/webapi/index.d.ts similarity index 100% rename from apps/browser-extension/src/utils/shared/models/webapi/index.d.ts rename to apps/browser-extension/src/utils/dist/shared/models/webapi/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/models/webapi/index.js b/apps/browser-extension/src/utils/dist/shared/models/webapi/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/models/webapi/index.js rename to apps/browser-extension/src/utils/dist/shared/models/webapi/index.js diff --git a/apps/browser-extension/src/utils/shared/password-generator/README.md b/apps/browser-extension/src/utils/dist/shared/password-generator/README.md similarity index 100% rename from apps/browser-extension/src/utils/shared/password-generator/README.md rename to apps/browser-extension/src/utils/dist/shared/password-generator/README.md diff --git a/apps/browser-extension/src/utils/shared/password-generator/index.d.ts b/apps/browser-extension/src/utils/dist/shared/password-generator/index.d.ts similarity index 100% rename from apps/browser-extension/src/utils/shared/password-generator/index.d.ts rename to apps/browser-extension/src/utils/dist/shared/password-generator/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/password-generator/index.js b/apps/browser-extension/src/utils/dist/shared/password-generator/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/password-generator/index.js rename to apps/browser-extension/src/utils/dist/shared/password-generator/index.js diff --git a/apps/browser-extension/src/utils/shared/password-generator/index.mjs b/apps/browser-extension/src/utils/dist/shared/password-generator/index.mjs similarity index 100% rename from apps/browser-extension/src/utils/shared/password-generator/index.mjs rename to apps/browser-extension/src/utils/dist/shared/password-generator/index.mjs diff --git a/apps/browser-extension/src/utils/formDetector/FormFiller.ts b/apps/browser-extension/src/utils/formDetector/FormFiller.ts index d7d8a9cfd..b41c582fe 100644 --- a/apps/browser-extension/src/utils/formDetector/FormFiller.ts +++ b/apps/browser-extension/src/utils/formDetector/FormFiller.ts @@ -1,7 +1,7 @@ +import { Gender, IdentityHelperUtils } from "@/utils/dist/shared/identity-generator"; +import type { Credential } from "@/utils/dist/shared/models/vault"; import { CombinedDateOptionPatterns, CombinedGenderOptionPatterns } from "@/utils/formDetector/FieldPatterns"; import { FormFields } from "@/utils/formDetector/types/FormFields"; -import { Gender, IdentityHelperUtils } from "@/utils/shared/identity-generator"; -import type { Credential } from "@/utils/shared/models/vault"; /** * Class to fill the fields of a form with the given credential. */ diff --git a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.en.test.ts b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.en.test.ts index c5eba59f4..20f7f96cc 100644 --- a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.en.test.ts +++ b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.en.test.ts @@ -1,7 +1,7 @@ import { JSDOM } from 'jsdom'; import { describe, it, expect, beforeEach, vi } from 'vitest'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { FormFiller } from '../FormFiller'; import { FormFields } from '../types/FormFields'; diff --git a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.generic.test.ts b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.generic.test.ts index 40680588b..050cc8857 100644 --- a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.generic.test.ts +++ b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.generic.test.ts @@ -1,7 +1,7 @@ import { JSDOM } from 'jsdom'; import { describe, it, expect, beforeEach, vi } from 'vitest'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { FormFiller } from '../FormFiller'; import { FormFields } from '../types/FormFields'; diff --git a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.nl.test.ts b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.nl.test.ts index dd416e664..49dff5cba 100644 --- a/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.nl.test.ts +++ b/apps/browser-extension/src/utils/formDetector/__tests__/FormFiller.nl.test.ts @@ -1,7 +1,7 @@ import { JSDOM } from 'jsdom'; import { describe, it, expect, beforeEach, vi } from 'vitest'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { FormFiller } from '../FormFiller'; import { FormFields } from '../types/FormFields'; diff --git a/apps/browser-extension/src/utils/formDetector/__tests__/TestUtils.ts b/apps/browser-extension/src/utils/formDetector/__tests__/TestUtils.ts index 0c15eb213..53688f3e1 100644 --- a/apps/browser-extension/src/utils/formDetector/__tests__/TestUtils.ts +++ b/apps/browser-extension/src/utils/formDetector/__tests__/TestUtils.ts @@ -4,10 +4,10 @@ import { join } from 'path'; import { JSDOM, DOMWindow } from 'jsdom'; import { it, expect, vi } from 'vitest'; +import { Gender } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { FormDetector } from '@/utils/formDetector/FormDetector'; import { FormFields } from '@/utils/formDetector/types/FormFields'; -import { Gender } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; export enum FormField { Username = 'username', diff --git a/apps/browser-extension/src/utils/shared/models/index.d.ts b/apps/browser-extension/src/utils/shared/models/index.d.ts deleted file mode 100644 index 223e65e89..000000000 --- a/apps/browser-extension/src/utils/shared/models/index.d.ts +++ /dev/null @@ -1,2 +0,0 @@ - -export { } diff --git a/apps/browser-extension/src/utils/types/messaging/CredentialsResponse.ts b/apps/browser-extension/src/utils/types/messaging/CredentialsResponse.ts index 3e0b5c5d6..5628c8e1b 100644 --- a/apps/browser-extension/src/utils/types/messaging/CredentialsResponse.ts +++ b/apps/browser-extension/src/utils/types/messaging/CredentialsResponse.ts @@ -1,4 +1,4 @@ -import type { Credential } from "@/utils/shared/models/vault"; +import type { Credential } from "@/utils/dist/shared/models/vault"; export type CredentialsResponse = { success: boolean, diff --git a/apps/browser-extension/src/utils/types/messaging/PasswordSettingsResponse.ts b/apps/browser-extension/src/utils/types/messaging/PasswordSettingsResponse.ts index f532ad8fc..06427a685 100644 --- a/apps/browser-extension/src/utils/types/messaging/PasswordSettingsResponse.ts +++ b/apps/browser-extension/src/utils/types/messaging/PasswordSettingsResponse.ts @@ -1,4 +1,4 @@ -import type { PasswordSettings } from "@/utils/shared/models/vault"; +import type { PasswordSettings } from "@/utils/dist/shared/models/vault"; export type PasswordSettingsResponse = { success: boolean, diff --git a/apps/mobile-app/.eslintrc.js b/apps/mobile-app/.eslintrc.js index aea97ce78..0748e1eab 100644 --- a/apps/mobile-app/.eslintrc.js +++ b/apps/mobile-app/.eslintrc.js @@ -1,6 +1,6 @@ module.exports = { root: true, - ignorePatterns: ["dist/**", "node_modules/**", "utils/shared/**", "expo-env.d.ts", "*.js"], + ignorePatterns: ["dist/**", "node_modules/**", "utils/dist/shared/**", "expo-env.d.ts", "*.js"], parser: "@typescript-eslint/parser", parserOptions: { ecmaFeatures: { jsx: true }, diff --git a/apps/mobile-app/.gitignore b/apps/mobile-app/.gitignore index ff64aa880..6d26df642 100644 --- a/apps/mobile-app/.gitignore +++ b/apps/mobile-app/.gitignore @@ -6,6 +6,7 @@ node_modules/ # Expo .expo/ dist/ +!utils/dist web-build/ expo-env.d.ts diff --git a/apps/mobile-app/app/(tabs)/credentials/[id].tsx b/apps/mobile-app/app/(tabs)/credentials/[id].tsx index a76317fbc..d51015b1c 100644 --- a/apps/mobile-app/app/(tabs)/credentials/[id].tsx +++ b/apps/mobile-app/app/(tabs)/credentials/[id].tsx @@ -4,8 +4,8 @@ import { useCallback, useEffect, useState } from 'react'; import { ActivityIndicator, View, Text, StyleSheet, TouchableOpacity, Linking, Pressable } from 'react-native'; import Toast from 'react-native-toast-message'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import emitter from '@/utils/EventEmitter'; -import type { Credential } from '@/utils/shared/models/vault'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/app/(tabs)/credentials/add-edit.tsx b/apps/mobile-app/app/(tabs)/credentials/add-edit.tsx index 8810ccce9..be3a703cf 100644 --- a/apps/mobile-app/app/(tabs)/credentials/add-edit.tsx +++ b/apps/mobile-app/app/(tabs)/credentials/add-edit.tsx @@ -8,11 +8,11 @@ import { StyleSheet, View, TouchableOpacity, Alert, Keyboard, KeyboardAvoidingVi import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; import Toast from 'react-native-toast-message'; +import { CreateIdentityGenerator, IdentityHelperUtils, IdentityGenerator } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; +import type { FaviconExtractModel } from '@/utils/dist/shared/models/webapi'; +import { CreatePasswordGenerator, PasswordGenerator } from '@/utils/dist/shared/password-generator'; import emitter from '@/utils/EventEmitter'; -import { CreateIdentityGenerator, IdentityHelperUtils, IdentityGenerator } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; -import type { FaviconExtractModel } from '@/utils/shared/models/webapi'; -import { CreatePasswordGenerator, PasswordGenerator } from '@/utils/shared/password-generator'; import { extractServiceNameFromUrl } from '@/utils/UrlUtility'; import { credentialSchema } from '@/utils/ValidationSchema'; diff --git a/apps/mobile-app/app/(tabs)/credentials/index.tsx b/apps/mobile-app/app/(tabs)/credentials/index.tsx index c03099528..3b2d7c308 100644 --- a/apps/mobile-app/app/(tabs)/credentials/index.tsx +++ b/apps/mobile-app/app/(tabs)/credentials/index.tsx @@ -7,8 +7,8 @@ import { StyleSheet, Text, FlatList, TouchableOpacity, TextInput, RefreshControl import { useSafeAreaInsets } from 'react-native-safe-area-context'; import Toast from 'react-native-toast-message'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import emitter from '@/utils/EventEmitter'; -import type { Credential } from '@/utils/shared/models/vault'; import { useColors } from '@/hooks/useColorScheme'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/mobile-app/app/(tabs)/emails/[id].tsx b/apps/mobile-app/app/(tabs)/emails/[id].tsx index b3147eb4a..851b1eeab 100644 --- a/apps/mobile-app/app/(tabs)/emails/[id].tsx +++ b/apps/mobile-app/app/(tabs)/emails/[id].tsx @@ -5,9 +5,9 @@ import React, { useEffect, useState, useCallback } from 'react'; import { StyleSheet, View, TouchableOpacity, ActivityIndicator, Alert, Share, useColorScheme, TextInput, Linking } from 'react-native'; import { WebView } from 'react-native-webview'; +import type { Email } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; import emitter from '@/utils/EventEmitter'; -import type { Email } from '@/utils/shared/models/webapi'; import type { Credential } from '@/utils/types/Credential'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/app/(tabs)/emails/index.tsx b/apps/mobile-app/app/(tabs)/emails/index.tsx index aa47baaca..97e1c1a36 100644 --- a/apps/mobile-app/app/(tabs)/emails/index.tsx +++ b/apps/mobile-app/app/(tabs)/emails/index.tsx @@ -5,9 +5,9 @@ import { StyleSheet, View, ScrollView, RefreshControl, Animated , Platform } fro import { useSafeAreaInsets } from 'react-native-safe-area-context'; import Toast from 'react-native-toast-message'; +import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; import emitter from '@/utils/EventEmitter'; -import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/mobile-app/app/(tabs)/settings/security/active-sessions.tsx b/apps/mobile-app/app/(tabs)/settings/security/active-sessions.tsx index 1273b6def..254943701 100644 --- a/apps/mobile-app/app/(tabs)/settings/security/active-sessions.tsx +++ b/apps/mobile-app/app/(tabs)/settings/security/active-sessions.tsx @@ -3,7 +3,7 @@ import { useState, useEffect, useCallback } from 'react'; import { StyleSheet, View, TouchableOpacity, Alert, RefreshControl, Platform } from 'react-native'; import Toast from 'react-native-toast-message'; -import type { RefreshToken } from '@/utils/shared/models/webapi'; +import type { RefreshToken } from '@/utils/dist/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/mobile-app/app/(tabs)/settings/security/auth-logs.tsx b/apps/mobile-app/app/(tabs)/settings/security/auth-logs.tsx index 5f4379360..6cba47bdb 100644 --- a/apps/mobile-app/app/(tabs)/settings/security/auth-logs.tsx +++ b/apps/mobile-app/app/(tabs)/settings/security/auth-logs.tsx @@ -3,8 +3,8 @@ import { useState, useEffect, useCallback } from 'react'; import { StyleSheet, View, RefreshControl, Platform } from 'react-native'; import Toast from 'react-native-toast-message'; -import type { AuthLogModel } from '@/utils/shared/models/webapi'; -import { AuthEventType } from '@/utils/shared/models/webapi'; +import type { AuthLogModel } from '@/utils/dist/shared/models/webapi'; +import { AuthEventType } from '@/utils/dist/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; import { useMinDurationLoading } from '@/hooks/useMinDurationLoading'; diff --git a/apps/mobile-app/app/(tabs)/settings/security/delete-account.tsx b/apps/mobile-app/app/(tabs)/settings/security/delete-account.tsx index fc2344aa9..57ff4359f 100644 --- a/apps/mobile-app/app/(tabs)/settings/security/delete-account.tsx +++ b/apps/mobile-app/app/(tabs)/settings/security/delete-account.tsx @@ -3,7 +3,7 @@ import { useState } from 'react'; import { StyleSheet, View, Alert, KeyboardAvoidingView, Platform } from 'react-native'; import srp from 'secure-remote-password/client'; -import type { DeleteAccountInitiateRequest, DeleteAccountInitiateResponse, DeleteAccountRequest } from '@/utils/shared/models/webapi'; +import type { DeleteAccountInitiateRequest, DeleteAccountInitiateResponse, DeleteAccountRequest } from '@/utils/dist/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/app/login.tsx b/apps/mobile-app/app/login.tsx index 56b8982f2..5203fd7a4 100644 --- a/apps/mobile-app/app/login.tsx +++ b/apps/mobile-app/app/login.tsx @@ -10,9 +10,9 @@ import { StyleSheet, View, Text, SafeAreaView, TextInput, TouchableOpacity, Acti import { AppInfo } from '@/utils/AppInfo'; import ConversionUtility from '@/utils/ConversionUtility'; +import type { EncryptionKeyDerivationParams } from '@/utils/dist/shared/models/metadata'; +import type { LoginResponse, VaultResponse } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { EncryptionKeyDerivationParams } from '@/utils/shared/models/metadata'; -import type { LoginResponse, VaultResponse } from '@/utils/shared/models/webapi'; import { SrpUtility } from '@/utils/SrpUtility'; import { ApiAuthError } from '@/utils/types/errors/ApiAuthError'; diff --git a/apps/mobile-app/components/EmailCard.tsx b/apps/mobile-app/components/EmailCard.tsx index cafa4c8c6..00cf294ef 100644 --- a/apps/mobile-app/components/EmailCard.tsx +++ b/apps/mobile-app/components/EmailCard.tsx @@ -2,8 +2,8 @@ import { router } from 'expo-router'; import { useEffect, useState } from 'react'; import { StyleSheet, View, TouchableOpacity } from 'react-native'; -import type { Credential } from '@/utils/shared/models/vault'; -import type { MailboxEmail } from '@/utils/shared/models/webapi'; +import type { Credential } from '@/utils/dist/shared/models/vault'; +import type { MailboxEmail } from '@/utils/dist/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/components/credentials/CredentialCard.tsx b/apps/mobile-app/components/credentials/CredentialCard.tsx index 71f582971..ae84c15f6 100644 --- a/apps/mobile-app/components/credentials/CredentialCard.tsx +++ b/apps/mobile-app/components/credentials/CredentialCard.tsx @@ -4,7 +4,7 @@ import { StyleSheet, View, Text, TouchableOpacity, Keyboard, Platform, Alert } f import ContextMenu, { OnPressMenuItemEvent } from 'react-native-context-menu-view'; import Toast from 'react-native-toast-message'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/components/credentials/details/AliasDetails.tsx b/apps/mobile-app/components/credentials/details/AliasDetails.tsx index b8582b626..3e67b5ad4 100644 --- a/apps/mobile-app/components/credentials/details/AliasDetails.tsx +++ b/apps/mobile-app/components/credentials/details/AliasDetails.tsx @@ -1,5 +1,5 @@ -import { IdentityHelperUtils } from '@/utils/shared/identity-generator'; -import type { Credential } from '@/utils/shared/models/vault'; +import { IdentityHelperUtils } from '@/utils/dist/shared/identity-generator'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import FormInputCopyToClipboard from '@/components/form/FormInputCopyToClipboard'; import { ThemedText } from '@/components/themed/ThemedText'; diff --git a/apps/mobile-app/components/credentials/details/EmailPreview.tsx b/apps/mobile-app/components/credentials/details/EmailPreview.tsx index 0f8915379..61a95889b 100644 --- a/apps/mobile-app/components/credentials/details/EmailPreview.tsx +++ b/apps/mobile-app/components/credentials/details/EmailPreview.tsx @@ -4,8 +4,8 @@ import React, { useState, useEffect, useCallback } from 'react'; import { View, StyleSheet, TouchableOpacity, Linking, AppState } from 'react-native'; import { AppInfo } from '@/utils/AppInfo'; +import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { MailboxBulkRequest, MailboxBulkResponse, MailboxEmail } from '@/utils/shared/models/webapi'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/components/credentials/details/LoginCredentials.tsx b/apps/mobile-app/components/credentials/details/LoginCredentials.tsx index d9baa1350..13e45ce5f 100644 --- a/apps/mobile-app/components/credentials/details/LoginCredentials.tsx +++ b/apps/mobile-app/components/credentials/details/LoginCredentials.tsx @@ -1,4 +1,4 @@ -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import FormInputCopyToClipboard from '@/components/form/FormInputCopyToClipboard'; import { ThemedText } from '@/components/themed/ThemedText'; diff --git a/apps/mobile-app/components/credentials/details/NotesSection.tsx b/apps/mobile-app/components/credentials/details/NotesSection.tsx index c03dd276c..568ebb3a9 100644 --- a/apps/mobile-app/components/credentials/details/NotesSection.tsx +++ b/apps/mobile-app/components/credentials/details/NotesSection.tsx @@ -1,6 +1,6 @@ import { View, Text, StyleSheet, Linking, Pressable } from 'react-native'; -import type { Credential } from '@/utils/shared/models/vault'; +import type { Credential } from '@/utils/dist/shared/models/vault'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/components/credentials/details/TotpSection.tsx b/apps/mobile-app/components/credentials/details/TotpSection.tsx index a8e4d3682..e4619f1ba 100644 --- a/apps/mobile-app/components/credentials/details/TotpSection.tsx +++ b/apps/mobile-app/components/credentials/details/TotpSection.tsx @@ -4,7 +4,7 @@ import React, { useState, useEffect } from 'react'; import { View, StyleSheet, TouchableOpacity, Platform } from 'react-native'; import Toast from 'react-native-toast-message'; -import type { Credential, TotpCode } from '@/utils/shared/models/vault'; +import type { Credential, TotpCode } from '@/utils/dist/shared/models/vault'; import { useColors } from '@/hooks/useColorScheme'; diff --git a/apps/mobile-app/context/DbContext.tsx b/apps/mobile-app/context/DbContext.tsx index d3c2dfe70..9793573c9 100644 --- a/apps/mobile-app/context/DbContext.tsx +++ b/apps/mobile-app/context/DbContext.tsx @@ -1,7 +1,7 @@ import React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from 'react'; -import type { EncryptionKeyDerivationParams, VaultMetadata } from '@/utils/shared/models/metadata'; -import type { VaultResponse } from '@/utils/shared/models/webapi'; +import type { EncryptionKeyDerivationParams, VaultMetadata } from '@/utils/dist/shared/models/metadata'; +import type { VaultResponse } from '@/utils/dist/shared/models/webapi'; import SqliteClient from '@/utils/SqliteClient'; import NativeVaultManager from '@/specs/NativeVaultManager'; diff --git a/apps/mobile-app/hooks/useVaultMutate.ts b/apps/mobile-app/hooks/useVaultMutate.ts index ba2e048b8..c1df67f72 100644 --- a/apps/mobile-app/hooks/useVaultMutate.ts +++ b/apps/mobile-app/hooks/useVaultMutate.ts @@ -2,9 +2,9 @@ import { useCallback, useState } from 'react'; import Toast from 'react-native-toast-message'; import srp from 'secure-remote-password/client'; +import type { EncryptionKeyDerivationParams } from '@/utils/dist/shared/models/metadata'; +import type { PasswordChangeInitiateResponse, Vault, VaultPasswordChangeRequest } from '@/utils/dist/shared/models/webapi'; import EncryptionUtility from '@/utils/EncryptionUtility'; -import type { EncryptionKeyDerivationParams } from '@/utils/shared/models/metadata'; -import type { PasswordChangeInitiateResponse, Vault, VaultPasswordChangeRequest } from '@/utils/shared/models/webapi'; import { useVaultSync } from '@/hooks/useVaultSync'; diff --git a/apps/mobile-app/hooks/useVaultSync.ts b/apps/mobile-app/hooks/useVaultSync.ts index c4cd00108..d364fd17b 100644 --- a/apps/mobile-app/hooks/useVaultSync.ts +++ b/apps/mobile-app/hooks/useVaultSync.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import { AppInfo } from '@/utils/AppInfo'; -import type { VaultResponse } from '@/utils/shared/models/webapi'; +import type { VaultResponse } from '@/utils/dist/shared/models/webapi'; import { useAuth } from '@/context/AuthContext'; import { useDb } from '@/context/DbContext'; diff --git a/apps/mobile-app/utils/EncryptionUtility.tsx b/apps/mobile-app/utils/EncryptionUtility.tsx index 1af50a9d0..d1cd84b16 100644 --- a/apps/mobile-app/utils/EncryptionUtility.tsx +++ b/apps/mobile-app/utils/EncryptionUtility.tsx @@ -3,8 +3,8 @@ import { Buffer } from 'buffer'; import AesGcmCrypto from 'react-native-aes-gcm-crypto'; import argon2 from 'react-native-argon2'; -import type { EncryptionKey } from '@/utils/shared/models/vault'; -import type { Email, MailboxEmail } from '@/utils/shared/models/webapi'; +import type { EncryptionKey } from '@/utils/dist/shared/models/vault'; +import type { Email, MailboxEmail } from '@/utils/dist/shared/models/webapi'; /** * Utility class for encryption operations including: diff --git a/apps/mobile-app/utils/SqliteClient.tsx b/apps/mobile-app/utils/SqliteClient.tsx index 09ceb01e1..fa1320a77 100644 --- a/apps/mobile-app/utils/SqliteClient.tsx +++ b/apps/mobile-app/utils/SqliteClient.tsx @@ -1,5 +1,5 @@ -import type { EncryptionKeyDerivationParams, VaultMetadata } from '@/utils/shared/models/metadata'; -import type { Credential, EncryptionKey, PasswordSettings, TotpCode } from '@/utils/shared/models/vault'; +import type { EncryptionKeyDerivationParams, VaultMetadata } from '@/utils/dist/shared/models/metadata'; +import type { Credential, EncryptionKey, PasswordSettings, TotpCode } from '@/utils/dist/shared/models/vault'; import NativeVaultManager from '@/specs/NativeVaultManager'; diff --git a/apps/mobile-app/utils/SrpUtility.tsx b/apps/mobile-app/utils/SrpUtility.tsx index 4304e37fb..b475e7e69 100644 --- a/apps/mobile-app/utils/SrpUtility.tsx +++ b/apps/mobile-app/utils/SrpUtility.tsx @@ -1,6 +1,6 @@ import srp from 'secure-remote-password/client'; -import type { BadRequestResponse, LoginResponse, ValidateLoginRequest2Fa, ValidateLoginResponse } from '@/utils/shared/models/webapi'; +import type { BadRequestResponse, LoginResponse, ValidateLoginRequest2Fa, ValidateLoginResponse } from '@/utils/dist/shared/models/webapi'; import { ApiAuthError } from '@/utils/types/errors/ApiAuthError'; import { WebApiService } from '@/utils/WebApiService'; diff --git a/apps/mobile-app/utils/WebApiService.ts b/apps/mobile-app/utils/WebApiService.ts index 5e19d31eb..c7950e81b 100644 --- a/apps/mobile-app/utils/WebApiService.ts +++ b/apps/mobile-app/utils/WebApiService.ts @@ -1,7 +1,7 @@ import AsyncStorage from '@react-native-async-storage/async-storage'; import { AppInfo } from '@/utils/AppInfo'; -import type { StatusResponse, VaultResponse, AuthLogModel, RefreshToken } from '@/utils/shared/models/webapi'; +import type { StatusResponse, VaultResponse, AuthLogModel, RefreshToken } from '@/utils/dist/shared/models/webapi'; type RequestInit = globalThis.RequestInit; diff --git a/apps/mobile-app/utils/shared/identity-generator/README.md b/apps/mobile-app/utils/dist/shared/identity-generator/README.md similarity index 100% rename from apps/mobile-app/utils/shared/identity-generator/README.md rename to apps/mobile-app/utils/dist/shared/identity-generator/README.md diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.d.ts b/apps/mobile-app/utils/dist/shared/identity-generator/index.d.ts similarity index 53% rename from apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.d.ts rename to apps/mobile-app/utils/dist/shared/identity-generator/index.d.ts index 0bfea65ed..c15c50d9f 100644 --- a/apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.d.ts +++ b/apps/mobile-app/utils/dist/shared/identity-generator/index.d.ts @@ -24,14 +24,14 @@ interface IIdentityGenerator { * Base identity generator. */ declare abstract class IdentityGenerator implements IIdentityGenerator { - protected firstNamesMale: string[]; - protected firstNamesFemale: string[]; - protected lastNames: string[]; - private readonly random; - /** - * Constructor. - */ - constructor(); + protected firstNamesMale: string[]; + protected firstNamesFemale: string[]; + protected lastNames: string[]; + private readonly random; + /** + * Constructor. + */ + constructor(); protected abstract getFirstNamesMaleJson(): string[]; protected abstract getFirstNamesFemaleJson(): string[]; protected abstract getLastNamesJson(): string[]; @@ -49,87 +49,87 @@ declare abstract class IdentityGenerator implements IIdentityGenerator { * Identity generator for English language using English word dictionaries. */ declare class IdentityGeneratorEn extends IdentityGenerator { - /** - * Get the male first names. - */ - protected getFirstNamesMaleJson(): string[]; - /** - * Get the female first names. - */ - protected getFirstNamesFemaleJson(): string[]; - /** - * Get the last names. - */ - protected getLastNamesJson(): string[]; + /** + * Get the male first names. + */ + protected getFirstNamesMaleJson(): string[]; + /** + * Get the female first names. + */ + protected getFirstNamesFemaleJson(): string[]; + /** + * Get the last names. + */ + protected getLastNamesJson(): string[]; } /** * Identity generator for Dutch language using Dutch word dictionaries. */ declare class IdentityGeneratorNl extends IdentityGenerator { - /** - * Get the male first names. - */ - protected getFirstNamesMaleJson(): string[]; - /** - * Get the female first names. - */ - protected getFirstNamesFemaleJson(): string[]; - /** - * Get the last names. - */ - protected getLastNamesJson(): string[]; + /** + * Get the male first names. + */ + protected getFirstNamesMaleJson(): string[]; + /** + * Get the female first names. + */ + protected getFirstNamesFemaleJson(): string[]; + /** + * Get the last names. + */ + protected getLastNamesJson(): string[]; } /** * Helper utilities for identity generation that can be used by multiple client applications. */ declare class IdentityHelperUtils { - /** - * Normalize a birth date for display. - */ - static normalizeBirthDateForDisplay(birthDate: string | undefined): string; - /** - * Normalize a birth date for database. - */ - static normalizeBirthDateForDb(input: string | undefined): string; - /** - * Check if a birth date is valid. - */ - static isValidBirthDate(input: string | undefined): boolean; + /** + * Normalize a birth date for display. + */ + static normalizeBirthDateForDisplay(birthDate: string | undefined): string; + /** + * Normalize a birth date for database. + */ + static normalizeBirthDateForDb(input: string | undefined): string; + /** + * Check if a birth date is valid. + */ + static isValidBirthDate(input: string | undefined): boolean; } /** * Generate a username or email prefix. */ declare class UsernameEmailGenerator { - private static readonly MIN_LENGTH; - private static readonly MAX_LENGTH; - private readonly symbols; - /** - * Generate a username based on an identity. - */ - generateUsername(identity: Identity): string; - /** - * Generate an email prefix based on an identity. - */ - generateEmailPrefix(identity: Identity): string; - /** - * Sanitize an email prefix. - */ - private sanitizeEmailPrefix; - /** - * Get a random symbol. - */ - private getRandomSymbol; - /** - * Generate a random string. - */ - private generateRandomString; - /** - * Generate a secure random integer between 0 (inclusive) and max (exclusive) - */ - private getSecureRandom; + private static readonly MIN_LENGTH; + private static readonly MAX_LENGTH; + private readonly symbols; + /** + * Generate a username based on an identity. + */ + generateUsername(identity: Identity): string; + /** + * Generate an email prefix based on an identity. + */ + generateEmailPrefix(identity: Identity): string; + /** + * Sanitize an email prefix. + */ + private sanitizeEmailPrefix; + /** + * Get a random symbol. + */ + private getRandomSymbol; + /** + * Generate a random string. + */ + private generateRandomString; + /** + * Generate a secure random integer between 0 (inclusive) and max (exclusive) + */ + private getSecureRandom; } /** diff --git a/apps/mobile-app/utils/shared/identity-generator/index.js b/apps/mobile-app/utils/dist/shared/identity-generator/index.js similarity index 100% rename from apps/mobile-app/utils/shared/identity-generator/index.js rename to apps/mobile-app/utils/dist/shared/identity-generator/index.js diff --git a/apps/mobile-app/utils/shared/identity-generator/index.mjs b/apps/mobile-app/utils/dist/shared/identity-generator/index.mjs similarity index 100% rename from apps/mobile-app/utils/shared/identity-generator/index.mjs rename to apps/mobile-app/utils/dist/shared/identity-generator/index.mjs diff --git a/apps/mobile-app/utils/shared/models/README.md b/apps/mobile-app/utils/dist/shared/models/README.md similarity index 100% rename from apps/mobile-app/utils/shared/models/README.md rename to apps/mobile-app/utils/dist/shared/models/README.md diff --git a/apps/mobile-app/utils/shared/models/metadata/index.d.ts b/apps/mobile-app/utils/dist/shared/models/metadata/index.d.ts similarity index 100% rename from apps/mobile-app/utils/shared/models/metadata/index.d.ts rename to apps/mobile-app/utils/dist/shared/models/metadata/index.d.ts diff --git a/apps/browser-extension/src/utils/shared/models/vault/index.js b/apps/mobile-app/utils/dist/shared/models/metadata/index.js similarity index 100% rename from apps/browser-extension/src/utils/shared/models/vault/index.js rename to apps/mobile-app/utils/dist/shared/models/metadata/index.js diff --git a/apps/mobile-app/utils/shared/models/vault/index.d.ts b/apps/mobile-app/utils/dist/shared/models/vault/index.d.ts similarity index 100% rename from apps/mobile-app/utils/shared/models/vault/index.d.ts rename to apps/mobile-app/utils/dist/shared/models/vault/index.d.ts diff --git a/apps/mobile-app/utils/shared/models/metadata/index.js b/apps/mobile-app/utils/dist/shared/models/vault/index.js similarity index 100% rename from apps/mobile-app/utils/shared/models/metadata/index.js rename to apps/mobile-app/utils/dist/shared/models/vault/index.js diff --git a/apps/mobile-app/utils/shared/models/webapi/index.d.ts b/apps/mobile-app/utils/dist/shared/models/webapi/index.d.ts similarity index 100% rename from apps/mobile-app/utils/shared/models/webapi/index.d.ts rename to apps/mobile-app/utils/dist/shared/models/webapi/index.d.ts diff --git a/apps/mobile-app/utils/shared/models/webapi/index.js b/apps/mobile-app/utils/dist/shared/models/webapi/index.js similarity index 100% rename from apps/mobile-app/utils/shared/models/webapi/index.js rename to apps/mobile-app/utils/dist/shared/models/webapi/index.js diff --git a/apps/mobile-app/utils/shared/password-generator/README.md b/apps/mobile-app/utils/dist/shared/password-generator/README.md similarity index 100% rename from apps/mobile-app/utils/shared/password-generator/README.md rename to apps/mobile-app/utils/dist/shared/password-generator/README.md diff --git a/apps/mobile-app/utils/dist/shared/password-generator/index.d.ts b/apps/mobile-app/utils/dist/shared/password-generator/index.d.ts new file mode 100644 index 000000000..9ccceba69 --- /dev/null +++ b/apps/mobile-app/utils/dist/shared/password-generator/index.d.ts @@ -0,0 +1,120 @@ +/** + * Settings for password generation stored in SQLite database settings table as string. + */ +type PasswordSettings = { + /** + * The length of the password. + */ + Length: number; + /** + * Whether to use lowercase letters. + */ + UseLowercase: boolean; + /** + * Whether to use uppercase letters. + */ + UseUppercase: boolean; + /** + * Whether to use numbers. + */ + UseNumbers: boolean; + /** + * Whether to use special characters. + */ + UseSpecialChars: boolean; + /** + * Whether to use non-ambiguous characters. + */ + UseNonAmbiguousChars: boolean; +}; + +/** + * Generate a random password. + */ +declare class PasswordGenerator { + private readonly lowercaseChars; + private readonly uppercaseChars; + private readonly numberChars; + private readonly specialChars; + private readonly ambiguousChars; + private length; + private useLowercase; + private useUppercase; + private useNumbers; + private useSpecial; + private useNonAmbiguous; + /** + * Create a new instance of PasswordGenerator. + * @param settings Optional password settings to initialize with. + */ + constructor(settings?: PasswordSettings); + /** + * Apply password settings to this generator. + */ + applySettings(settings: PasswordSettings): this; + /** + * Set the length of the password. + */ + setLength(length: number): this; + /** + * Set if lowercase letters should be used. + */ + useLowercaseLetters(use: boolean): this; + /** + * Set if uppercase letters should be used. + */ + useUppercaseLetters(use: boolean): this; + /** + * Set if numeric characters should be used. + */ + useNumericCharacters(use: boolean): this; + /** + * Set if special characters should be used. + */ + useSpecialCharacters(use: boolean): this; + /** + * Set if only non-ambiguous characters should be used. + */ + useNonAmbiguousCharacters(use: boolean): this; + /** + * Get a random index from the crypto module. + */ + private getUnbiasedRandomIndex; + /** + * Generate a random password. + */ + generateRandomPassword(): string; + /** + * Build character set based on selected options. + */ + private buildCharacterSet; + /** + * Remove ambiguous characters from a character set. + */ + private removeAmbiguousCharacters; + /** + * Generate initial random password. + */ + private generateInitialPassword; + /** + * Ensure the generated password meets all specified requirements. + */ + private ensureRequirements; + /** + * Get a character set with ambiguous characters removed if needed. + */ + private getSafeCharacterSet; + /** + * Add a character from the given set at a random position in the password. + */ + private addCharacterFromSet; +} + +/** + * Creates a new password generator. + * @param settings - The settings for the password generator. + * @returns A new password generator instance. + */ +declare const CreatePasswordGenerator: (settings: PasswordSettings) => PasswordGenerator; + +export { CreatePasswordGenerator, PasswordGenerator, type PasswordSettings }; diff --git a/apps/mobile-app/utils/shared/password-generator/index.js b/apps/mobile-app/utils/dist/shared/password-generator/index.js similarity index 100% rename from apps/mobile-app/utils/shared/password-generator/index.js rename to apps/mobile-app/utils/dist/shared/password-generator/index.js diff --git a/apps/mobile-app/utils/shared/password-generator/index.mjs b/apps/mobile-app/utils/dist/shared/password-generator/index.mjs similarity index 100% rename from apps/mobile-app/utils/shared/password-generator/index.mjs rename to apps/mobile-app/utils/dist/shared/password-generator/index.mjs diff --git a/apps/mobile-app/utils/shared/models/vault/index.js b/apps/mobile-app/utils/shared/models/vault/index.js deleted file mode 100644 index a41e52c7b..000000000 --- a/apps/mobile-app/utils/shared/models/vault/index.js +++ /dev/null @@ -1,3 +0,0 @@ - -//# sourceMappingURL=index.js.map -//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/apps/server/AliasVault.Client/Services/JsInteropService.cs b/apps/server/AliasVault.Client/Services/JsInteropService.cs index 5c551329c..6835985a5 100644 --- a/apps/server/AliasVault.Client/Services/JsInteropService.cs +++ b/apps/server/AliasVault.Client/Services/JsInteropService.cs @@ -26,8 +26,8 @@ public sealed class JsInteropService(IJSRuntime jsRuntime) /// A task representing the asynchronous operation. public async Task InitializeAsync() { - _identityGeneratorModule = await jsRuntime.InvokeAsync("import", "./js/shared/identity-generator/index.mjs"); - _passwordGeneratorModule = await jsRuntime.InvokeAsync("import", "./js/shared/password-generator/index.mjs"); + _identityGeneratorModule = await jsRuntime.InvokeAsync("import", "./js/dist/shared/identity-generator/index.mjs"); + _passwordGeneratorModule = await jsRuntime.InvokeAsync("import", "./js/dist/shared/password-generator/index.mjs"); } /// diff --git a/apps/server/AliasVault.Client/wwwroot/css/tailwind.css b/apps/server/AliasVault.Client/wwwroot/css/tailwind.css index d8b56aafd..14fb6e75d 100644 --- a/apps/server/AliasVault.Client/wwwroot/css/tailwind.css +++ b/apps/server/AliasVault.Client/wwwroot/css/tailwind.css @@ -945,6 +945,14 @@ video { height: 1px; } +.h-32 { + height: 8rem; +} + +.h-screen { + height: 100vh; +} + .max-h-\[90vh\] { max-height: 90vh; } @@ -1041,6 +1049,10 @@ video { width: 100vw; } +.w-32 { + width: 8rem; +} + .min-w-0 { min-width: 0px; } diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/README.md b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/README.md similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/README.md rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/README.md diff --git a/apps/mobile-app/utils/shared/identity-generator/index.d.ts b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.d.ts similarity index 100% rename from apps/mobile-app/utils/shared/identity-generator/index.d.ts rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.d.ts diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.js b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.js similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.js rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.js diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.mjs b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.mjs similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator/index.mjs rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator/index.mjs diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/README.md b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/README.md similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/README.md rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/README.md diff --git a/apps/mobile-app/utils/shared/password-generator/index.d.ts b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.d.ts similarity index 100% rename from apps/mobile-app/utils/shared/password-generator/index.d.ts rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.d.ts diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.js b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.js similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.js rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.js diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.mjs b/apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.mjs similarity index 100% rename from apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.mjs rename to apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator/index.mjs diff --git a/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.d.ts b/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.d.ts deleted file mode 100644 index 723e4f172..000000000 --- a/apps/server/AliasVault.Client/wwwroot/js/shared/password-generator/index.d.ts +++ /dev/null @@ -1,120 +0,0 @@ -/** - * Settings for password generation stored in SQLite database settings table as string. - */ -type PasswordSettings = { - /** - * The length of the password. - */ - Length: number; - /** - * Whether to use lowercase letters. - */ - UseLowercase: boolean; - /** - * Whether to use uppercase letters. - */ - UseUppercase: boolean; - /** - * Whether to use numbers. - */ - UseNumbers: boolean; - /** - * Whether to use special characters. - */ - UseSpecialChars: boolean; - /** - * Whether to use non-ambiguous characters. - */ - UseNonAmbiguousChars: boolean; -}; - -/** - * Generate a random password. - */ -declare class PasswordGenerator { - private readonly lowercaseChars; - private readonly uppercaseChars; - private readonly numberChars; - private readonly specialChars; - private readonly ambiguousChars; - private length; - private useLowercase; - private useUppercase; - private useNumbers; - private useSpecial; - private useNonAmbiguous; - /** - * Create a new instance of PasswordGenerator. - * @param settings Optional password settings to initialize with. - */ - constructor(settings?: PasswordSettings); - /** - * Apply password settings to this generator. - */ - applySettings(settings: PasswordSettings): this; - /** - * Set the length of the password. - */ - setLength(length: number): this; - /** - * Set if lowercase letters should be used. - */ - useLowercaseLetters(use: boolean): this; - /** - * Set if uppercase letters should be used. - */ - useUppercaseLetters(use: boolean): this; - /** - * Set if numeric characters should be used. - */ - useNumericCharacters(use: boolean): this; - /** - * Set if special characters should be used. - */ - useSpecialCharacters(use: boolean): this; - /** - * Set if only non-ambiguous characters should be used. - */ - useNonAmbiguousCharacters(use: boolean): this; - /** - * Get a random index from the crypto module. - */ - private getUnbiasedRandomIndex; - /** - * Generate a random password. - */ - generateRandomPassword(): string; - /** - * Build character set based on selected options. - */ - private buildCharacterSet; - /** - * Remove ambiguous characters from a character set. - */ - private removeAmbiguousCharacters; - /** - * Generate initial random password. - */ - private generateInitialPassword; - /** - * Ensure the generated password meets all specified requirements. - */ - private ensureRequirements; - /** - * Get a character set with ambiguous characters removed if needed. - */ - private getSafeCharacterSet; - /** - * Add a character from the given set at a random position in the password. - */ - private addCharacterFromSet; -} - -/** - * Creates a new password generator. - * @param settings - The settings for the password generator. - * @returns A new password generator instance. - */ -declare const CreatePasswordGenerator: (settings: PasswordSettings) => PasswordGenerator; - -export { CreatePasswordGenerator, PasswordGenerator, type PasswordSettings }; diff --git a/shared/identity-generator/build.sh b/shared/identity-generator/build.sh index a9b5963cc..942615a0b 100755 --- a/shared/identity-generator/build.sh +++ b/shared/identity-generator/build.sh @@ -5,9 +5,9 @@ set -u # Treat unset variables as errors # Define output targets for identity-generator TARGETS=( - "../../apps/browser-extension/src/utils/shared/identity-generator" - "../../apps/mobile-app/utils/shared/identity-generator" - "../../apps/server/AliasVault.Client/wwwroot/js/shared/identity-generator" + "../../apps/browser-extension/src/utils/dist/shared/identity-generator" + "../../apps/mobile-app/utils/dist/shared/identity-generator" + "../../apps/server/AliasVault.Client/wwwroot/js/dist/shared/identity-generator" ) # Build and distribute identity-generator diff --git a/shared/models/build.sh b/shared/models/build.sh index 51449797c..0074b5c4b 100755 --- a/shared/models/build.sh +++ b/shared/models/build.sh @@ -5,8 +5,8 @@ set -u # Treat unset variables as errors # Define output targets for models TARGETS=( - "../../apps/browser-extension/src/utils/shared/models" - "../../apps/mobile-app/utils/shared/models" + "../../apps/browser-extension/src/utils/dist/shared/models" + "../../apps/mobile-app/utils/dist/shared/models" ) # Build and distribute models diff --git a/shared/password-generator/build.sh b/shared/password-generator/build.sh index 5de549041..542b7d4aa 100755 --- a/shared/password-generator/build.sh +++ b/shared/password-generator/build.sh @@ -5,9 +5,9 @@ set -u # Treat unset variables as errors # Define output targets for password-generator TARGETS=( - "../../apps/browser-extension/src/utils/shared/password-generator" - "../../apps/mobile-app/utils/shared/password-generator" - "../../apps/server/AliasVault.Client/wwwroot/js/shared/password-generator" + "../../apps/browser-extension/src/utils/dist/shared/password-generator" + "../../apps/mobile-app/utils/dist/shared/password-generator" + "../../apps/server/AliasVault.Client/wwwroot/js/dist/shared/password-generator" ) # Build and distribute password-generator