chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

chore: force signing modal - #456

Merged
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal
Nov 21, 2025
Merged

chore: force signing modal#456
coodos merged 1 commit into
mainfrom
fix/ereputation-signing-modal

Conversation

@coodos

@coodoscoodos commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Description of change

Issue Number

Type of change

  • Breaking (any change that would cause existing functionality to not work as expected)
  • New (a change which implements a new feature)
  • Update (a change which updates existing functionality)
  • Fix (a change which fixes an issue)
  • Docs (changes to the documentation)
  • Chore (refactoring, build scripts or anything else that isn't user-facing)

How the change has been tested

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

Release Notes

  • New Features
    • Reference submission now includes an optional digital signing step with QR code (desktop) or deep link (mobile).
    • Real-time signing progress monitoring with status indicators.
    • Session countdown timer with automatic expiration after 15 minutes.
    • Try Again option available for retry scenarios.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai

coderabbitaiBot commented Nov 21, 2025

Copy link
Copy Markdown
Contributor

Caution

Review failed

The pull request is closed.

Walkthrough

The PR integrates a real-time signing flow into the reference modal component. After reference submission, if a signing session is provided by the server, the modal initiates an SSE connection to monitor signing progress, displays a QR code or deep link for mobile users, manages session expiry with a countdown timer, and conditionally renders UI based on signing status.

Changes

Cohort / File(s)Summary
Reference Modal Signing Flow
platforms/eReputation/client/src/components/modals/reference-modal.tsx
Adds signing session state management (id, QR data, expiry), signing status tracking (pending, connecting, signed, expired, error, security_violation), and 15-minute countdown timer. Implements SSE connection to receive real-time signing progress updates. Adds UI branches for signing interface (QR code display, mobile deep link prompt) with status indicators and error handling. Updates form submission to conditionally show signing UI or reference form based on session state. Cleans up SSE connections on unmount and state resets. Enhanced imports include QRCodeSVG, mobile-detection utilities, and additional React hooks.

Sequence Diagram(s)

sequenceDiagram
participant User
participant Modal as Reference Modal
participant Server
participant SSE as SSE Stream
participant Cache as Invalidation Cache
User->>Modal: Submit Reference Form
Modal->>Server: Create Reference + Request Signing Session
Server->>Modal: Return signingSession (id, QR, expiry)
rect rgb(230, 240, 250)
Note over Modal: Initialize Signing State
Modal->>Modal: Set signingStatus = "connecting"
Modal->>Modal: Render QR Code / Deep Link
Modal->>Modal: Start 15-min Countdown Timer
end
Modal->>SSE: Establish SSE Connection (sessionId)
SSE->>Modal: Monitor for Signing Events
rect rgb(240, 250, 240)
Note over SSE,Cache: Signing Complete Path
SSE->>Modal: "signed" Event
Modal->>Modal: Set signingStatus = "signed"
Modal->>Cache: Invalidate Reference Cache
Modal->>User: Success Toast
Modal->>Modal: Close Modal (after delay)
end
rect rgb(250, 240, 240)
Note over SSE,Modal: Error Paths
alt Session Expired
SSE->>Modal: "expired" Event
Modal->>Modal: Set signingStatus = "expired"
else Security Violation
SSE->>Modal: "security_violation" Event
Modal->>Modal: Set signingStatus = "security_violation"
end
Modal->>User: Error Indicator + Try Again Button
end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • SSE Connection Management: Verify proper initialization, error handling, and cleanup of EventSource to prevent memory leaks
  • Countdown Timer Logic: Confirm useEffect dependencies, timer accuracy, and proper cleanup/expiry handling
  • State Transitions: Trace signing status state machine and verify all conditional branches (connecting → signed/expired/error)
  • UI Conditional Rendering: Review form/signing UI toggle logic and ensure no duplicate buttons or missing user actions during signing
  • Mobile Deep Link Flow: Validate mobile detection and deep link rendering as fallback to QR code

Suggested labels

evault-refactor

Suggested reviewers

  • sosweetham
  • xPathin

Poem

🐰 A reference now signs with a hop and a glow,
QR codes dancing in real-time's soft flow,
Fifteen minutes to sign, a countdown so quick,
SSE streams the truth—oh, what a trick!
From pending to signed, the modal's now spry,

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/ereputation-signing-modal

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 47efb6d and b92308a.

📒 Files selected for processing (1)
  • platforms/eReputation/client/src/components/modals/reference-modal.tsx (6 hunks)

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

Comment @coderabbitai help to get the list of available commands and usage tips.

@coodos
coodos marked this pull request as ready for review November 21, 2025 08:00
@coodos
coodos merged commit 774e2ce into mainNov 21, 2025
3 of 4 checks passed
@coodos
coodos deleted the fix/ereputation-signing-modal branch November 21, 2025 08:02
@coderabbitaicoderabbitaiBot mentioned this pull request Mar 17, 2026
6 tasks
Sign up for freeto 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.

1 participant

@coodos