- Upgrade vault encryption from PBKDF2 (1000 iterations) to Argon2id
(256MB memory, 8 iterations, 4 threads, ~3 second derivation)
- Add automatic migration from v1 to v2 vault format on unlock
- Add WebAssembly CSP support for hash-wasm Argon2id implementation
- Add NIP-42 relay authentication support for auth-required relays
- Add profile edit feature with pencil icon on identity page
- Add direct NIP-05 validation (removes NDK dependency for validation)
- Add deriving modal with progress timer during key derivation
- Add client tag "plebeian-signer" to profile events
- Fix modal colors (dark theme for visibility)
- Fix NIP-05 badge styling to include check/error indicator
- Add release zip packages for Chrome and Firefox
New files:
- projects/common/src/lib/helpers/argon2-crypto.ts
- projects/common/src/lib/helpers/websocket-auth.ts
- projects/common/src/lib/helpers/nip05-validator.ts
- projects/common/src/lib/components/deriving-modal/
- projects/{chrome,firefox}/src/app/components/profile-edit/
- releases/plebeian-signer-{chrome,firefox}-v1.0.0.zip
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
74 lines
2.0 KiB
HTML
74 lines
2.0 KiB
HTML
<!-- eslint-disable @angular-eslint/template/interactive-supports-focus -->
|
|
<!-- eslint-disable @angular-eslint/template/click-events-have-key-events -->
|
|
<div class="sam-text-header">
|
|
<span>You</span>
|
|
<button class="edit-btn" title="Edit profile" (click)="onClickEditProfile()">
|
|
<img src="edit.svg" alt="Edit" class="edit-icon" />
|
|
</button>
|
|
</div>
|
|
|
|
<div class="identity-container">
|
|
<!-- Banner background -->
|
|
<div
|
|
class="banner-background"
|
|
[style.background-image]="bannerUrl ? 'url(' + bannerUrl + ')' : 'none'"
|
|
>
|
|
<div class="banner-overlay"></div>
|
|
|
|
<div class="profile-content">
|
|
<!-- Avatar -->
|
|
<div class="avatar-frame" [class.has-image]="avatarUrl">
|
|
<img
|
|
[src]="avatarUrl || 'person-fill.svg'"
|
|
alt=""
|
|
class="avatar-image"
|
|
/>
|
|
</div>
|
|
|
|
<!-- Display name (primary, large) -->
|
|
<div class="name-badge-container" (click)="onClickShowDetails()">
|
|
<span class="display-name">
|
|
{{ displayName || selectedIdentity?.nick || 'Unknown' }}
|
|
</span>
|
|
@if(username) {
|
|
<span class="username">
|
|
{{ username }}
|
|
</span>
|
|
}
|
|
</div>
|
|
|
|
<!-- NIP-05 verification -->
|
|
@if(profile?.nip05) {
|
|
<div class="nip05-row">
|
|
@if(validating) {
|
|
<i class="bi bi-circle color-activity"></i>
|
|
} @else { @if(nip05isValidated) {
|
|
<i class="bi bi-patch-check sam-color-primary"></i>
|
|
} @else {
|
|
<i class="bi bi-exclamation-octagon-fill sam-color-danger"></i>
|
|
} }
|
|
|
|
<span class="nip05-badge">{{
|
|
profile?.nip05 | visualNip05
|
|
}}</span>
|
|
</div>
|
|
}
|
|
|
|
<!-- npub display -->
|
|
<div class="npub-wrapper">
|
|
<lib-pubkey
|
|
[value]="selectedIdentityNpub ?? 'na'"
|
|
[first]="14"
|
|
[last]="8"
|
|
(click)="
|
|
copyToClipboard(selectedIdentityNpub);
|
|
toast.show('Copied to clipboard')
|
|
"
|
|
></lib-pubkey>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<lib-toast #toast></lib-toast>
|