Reset crypto_vault_extension to clean state before SigSocket implementation

This commit is contained in:
Sameh Abouel-saad 2025-06-05 20:08:10 +03:00
parent 6b037537bf
commit 203cde1cba
7 changed files with 41 additions and 706 deletions

View File

@ -5,7 +5,6 @@ let keepAliveInterval = null;
let sessionTimeoutDuration = 15; // Default 15 seconds let sessionTimeoutDuration = 15; // Default 15 seconds
let sessionTimeoutId = null; // Background timer let sessionTimeoutId = null; // Background timer
let popupPort = null; // Track popup connection let popupPort = null; // Track popup connection
let sigSocketService = null; // SigSocket service instance
// Utility function to convert Uint8Array to hex // Utility function to convert Uint8Array to hex
function toHex(uint8Array) { function toHex(uint8Array) {
@ -139,9 +138,6 @@ async function restoreSession() {
// Import WASM module functions // Import WASM module functions
import init, * as wasmFunctions from './wasm/wasm_app.js'; import init, * as wasmFunctions from './wasm/wasm_app.js';
// Import SigSocket service
import SigSocketService from './background/sigsocket.js';
// Initialize WASM module // Initialize WASM module
async function initVault() { async function initVault() {
try { try {
@ -155,9 +151,6 @@ async function initVault() {
vault = wasmFunctions; vault = wasmFunctions;
isInitialized = true; isInitialized = true;
// Initialize SigSocket service
await initSigSocketService();
// Try to restore previous session // Try to restore previous session
await restoreSession(); await restoreSession();
@ -168,17 +161,6 @@ async function initVault() {
} }
} }
// Initialize SigSocket service
async function initSigSocketService() {
try {
sigSocketService = new SigSocketService();
await sigSocketService.initialize(vault);
console.log('SigSocket service initialized');
} catch (error) {
console.error('Failed to initialize SigSocket service:', error);
}
}
// Consolidated message handlers // Consolidated message handlers
const messageHandlers = { const messageHandlers = {
@ -190,16 +172,6 @@ const messageHandlers = {
initSession: async (request) => { initSession: async (request) => {
await vault.init_session(request.keyspace, request.password); await vault.init_session(request.keyspace, request.password);
await sessionManager.save(request.keyspace); await sessionManager.save(request.keyspace);
// Auto-connect to SigSocket server when session is initialized (only if not already connected)
if (sigSocketService && !sigSocketService.isConnected) {
console.log(`Attempting to connect to SigSocket for keyspace: ${request.keyspace}`);
const connected = await sigSocketService.connectToServer(request.keyspace);
console.log(`SigSocket connection result: ${connected}`);
} else if (sigSocketService && sigSocketService.isConnected) {
console.log('SigSocket already connected, skipping connection attempt');
}
return { success: true }; return { success: true };
}, },
@ -289,52 +261,6 @@ const messageHandlers = {
await chrome.storage.local.set({ sessionTimeout: request.timeout }); await chrome.storage.local.set({ sessionTimeout: request.timeout });
resetSessionTimeout(); // Restart with new duration resetSessionTimeout(); // Restart with new duration
return { success: true }; return { success: true };
},
// SigSocket message handlers
connectSigSocket: async (request) => {
if (!sigSocketService) {
return { success: false, error: 'SigSocket service not available' };
}
const connected = await sigSocketService.connectToServer(request.workspaceId);
return { success: connected };
},
getPendingRequests: () => {
if (!sigSocketService) {
return { success: false, error: 'SigSocket service not available' };
}
return { success: true, requests: sigSocketService.getPendingRequests() };
},
keypaceUnlocked: async () => {
if (sigSocketService) {
await sigSocketService.onKeypaceUnlocked();
}
return { success: true };
},
approveSignRequest: async (request) => {
if (!sigSocketService) {
return { success: false, error: 'SigSocket service not available' };
}
const approved = await sigSocketService.approveSignRequest(request.requestId);
return { success: approved };
},
rejectSignRequest: async (request) => {
if (!sigSocketService) {
return { success: false, error: 'SigSocket service not available' };
}
const rejected = await sigSocketService.rejectSignRequest(request.requestId, request.reason);
return { success: rejected };
},
getSigSocketStatus: () => {
if (!sigSocketService) {
return { success: false, error: 'SigSocket service not available' };
}
return { success: true, status: sigSocketService.getStatus() };
} }
}; };
@ -376,11 +302,6 @@ chrome.runtime.onConnect.addListener((port) => {
// Track popup connection // Track popup connection
popupPort = port; popupPort = port;
// Set popup port in SigSocket service
if (sigSocketService) {
sigSocketService.setPopupPort(port);
}
// If we have an active session, ensure keep-alive is running // If we have an active session, ensure keep-alive is running
if (currentSession) { if (currentSession) {
startKeepAlive(); startKeepAlive();
@ -389,9 +310,6 @@ chrome.runtime.onConnect.addListener((port) => {
port.onDisconnect.addListener(() => { port.onDisconnect.addListener(() => {
// Popup closed, clear reference and stop keep-alive // Popup closed, clear reference and stop keep-alive
popupPort = null; popupPort = null;
if (sigSocketService) {
sigSocketService.setPopupPort(null);
}
stopKeepAlive(); stopKeepAlive();
}); });
} }

View File

@ -6,8 +6,7 @@
"permissions": [ "permissions": [
"storage", "storage",
"activeTab", "activeTab"
"notifications"
], ],
"icons": { "icons": {

View File

@ -27,10 +27,6 @@
<span>seconds</span> <span>seconds</span>
</div> </div>
</div> </div>
<div class="settings-item">
<label for="sigSocketUrlInput">SigSocket Server</label>
<input type="text" id="sigSocketUrlInput" placeholder="ws://localhost:8080/ws" value="ws://localhost:8080/ws">
</div>
</div> </div>
</div> </div>
<button id="themeToggle" class="btn-icon-only" title="Switch to dark mode"> <button id="themeToggle" class="btn-icon-only" title="Switch to dark mode">
@ -193,11 +189,6 @@
</div> </div>
</div> </div>
</div> </div>
<!-- Sign Request Manager -->
<div id="signRequestContainer">
<!-- Sign request manager will be rendered here -->
</div>
</section> </section>
@ -207,7 +198,6 @@
<!-- Enhanced JavaScript modules --> <!-- Enhanced JavaScript modules -->
<script src="js/errorHandler.js"></script> <script src="js/errorHandler.js"></script>
<script src="popup/components/SignRequestManager.js"></script>
<script src="popup.js"></script> <script src="popup.js"></script>
</body> </body>
</html> </html>

View File

@ -129,7 +129,6 @@ const elements = {
settingsToggle: document.getElementById('settingsToggle'), settingsToggle: document.getElementById('settingsToggle'),
settingsDropdown: document.getElementById('settingsDropdown'), settingsDropdown: document.getElementById('settingsDropdown'),
timeoutInput: document.getElementById('timeoutInput'), timeoutInput: document.getElementById('timeoutInput'),
sigSocketUrlInput: document.getElementById('sigSocketUrlInput'),
// Keypair management elements // Keypair management elements
toggleAddKeypairBtn: document.getElementById('toggleAddKeypairBtn'), toggleAddKeypairBtn: document.getElementById('toggleAddKeypairBtn'),
@ -168,7 +167,6 @@ let currentKeyspace = null;
let selectedKeypairId = null; let selectedKeypairId = null;
let backgroundPort = null; let backgroundPort = null;
let sessionTimeoutDuration = 15; // Default 15 seconds let sessionTimeoutDuration = 15; // Default 15 seconds
let signRequestManager = null; // Sign request manager instance
// Session timeout management // Session timeout management
function handleError(error, context, shouldShowToast = true) { function handleError(error, context, shouldShowToast = true) {
@ -200,14 +198,11 @@ function validateInput(value, fieldName, options = {}) {
return true; return true;
} }
async function loadTimeoutSetting() { async function loadTimeoutSetting() {
const result = await chrome.storage.local.get(['sessionTimeout', 'sigSocketUrl']); const result = await chrome.storage.local.get(['sessionTimeout']);
sessionTimeoutDuration = result.sessionTimeout || 15; sessionTimeoutDuration = result.sessionTimeout || 15;
if (elements.timeoutInput) { if (elements.timeoutInput) {
elements.timeoutInput.value = sessionTimeoutDuration; elements.timeoutInput.value = sessionTimeoutDuration;
} }
if (elements.sigSocketUrlInput) {
elements.sigSocketUrlInput.value = result.sigSocketUrl || 'ws://localhost:8080/ws';
}
} }
async function checkSessionTimeout() { async function checkSessionTimeout() {
@ -312,39 +307,6 @@ function connectToBackground() {
// Show timeout notification // Show timeout notification
showToast(message.message, 'info'); showToast(message.message, 'info');
// Update sign request manager
if (signRequestManager) {
signRequestManager.updateState({ isKeypaceUnlocked: false });
}
} else if (message.type === 'KEYSPACE_UNLOCKED') {
// Handle keyspace unlock from SigSocket service
console.log('Popup received KEYSPACE_UNLOCKED message:', message);
if (signRequestManager) {
console.log('Updating SignRequestManager state with keypaceMatches:', message.keypaceMatches);
signRequestManager.updateState({
isKeypaceUnlocked: true,
keypaceMatches: message.keypaceMatches,
pendingRequests: message.pendingRequests
});
console.log('SignRequestManager state updated');
} else {
console.log('No SignRequestManager available to update');
}
} else if (message.type === 'NEW_SIGN_REQUEST') {
// Handle new sign request when keyspace is already unlocked
console.log('Popup received NEW_SIGN_REQUEST message:', message);
if (signRequestManager) {
console.log('Updating SignRequestManager with new request, keypaceMatches:', message.keypaceMatches);
// Only update if we have a valid keyspace match, otherwise requests array will be empty for security
signRequestManager.updateState({
keypaceMatches: message.keypaceMatches,
pendingRequests: message.pendingRequests
});
console.log(`SignRequestManager updated with new request: ${message.pendingRequests.length} requests visible`);
} else {
console.log('No SignRequestManager available to update with new request');
}
} }
}); });
@ -353,22 +315,6 @@ function connectToBackground() {
}); });
} }
// Initialize Sign Request Manager
async function initializeSignRequestManager() {
try {
const container = document.getElementById('signRequestContainer');
if (container && window.SignRequestManager) {
signRequestManager = new window.SignRequestManager();
await signRequestManager.initialize(container);
console.log('Sign Request Manager initialized');
} else {
console.warn('SignRequestManager not available or container not found');
}
} catch (error) {
console.error('Failed to initialize Sign Request Manager:', error);
}
}
// Initialize // Initialize
document.addEventListener('DOMContentLoaded', async function() { document.addEventListener('DOMContentLoaded', async function() {
// Initialize theme first // Initialize theme first
@ -386,9 +332,6 @@ document.addEventListener('DOMContentLoaded', async function() {
// Connect to background script for keep-alive // Connect to background script for keep-alive
connectToBackground(); connectToBackground();
// Initialize Sign Request Manager
await initializeSignRequestManager();
// Consolidated event listeners // Consolidated event listeners
const eventMap = { const eventMap = {
createKeyspaceBtn: createKeyspace, createKeyspaceBtn: createKeyspace,
@ -433,18 +376,6 @@ document.addEventListener('DOMContentLoaded', async function() {
} }
}); });
// SigSocket URL setting event listener
elements.sigSocketUrlInput?.addEventListener('change', async (e) => {
const url = e.target.value.trim();
if (url) {
await chrome.storage.local.set({ sigSocketUrl: url });
// Update the SigSocket service with new URL if it exists
if (signRequestManager && signRequestManager.sigSocketService) {
signRequestManager.sigSocketService.defaultServerUrl = url;
}
}
});
// Activity detection - reset timeout on any interaction // Activity detection - reset timeout on any interaction
document.addEventListener('click', (e) => { document.addEventListener('click', (e) => {
resetSessionTimeout(); resetSessionTimeout();
@ -713,12 +644,6 @@ async function login() {
clearVaultState(); clearVaultState();
await loadKeypairs(); await loadKeypairs();
// Notify sign request manager about keyspace unlock
if (signRequestManager) {
signRequestManager.updateState({ isKeypaceUnlocked: true });
await signRequestManager.refresh();
}
return response; return response;
} else { } else {
throw new Error(getResponseError(response, 'login')); throw new Error(getResponseError(response, 'login'));
@ -748,11 +673,6 @@ async function lockSession() {
elements.passwordInput.value = ''; elements.passwordInput.value = '';
clearVaultState(); clearVaultState();
// Update sign request manager
if (signRequestManager) {
signRequestManager.updateState({ isKeypaceUnlocked: false });
}
showToast('Session locked', 'info'); showToast('Session locked', 'info');
} catch (error) { } catch (error) {
showToast('Error: ' + error.message, 'error'); showToast('Error: ' + error.message, 'error');

View File

@ -1069,195 +1069,4 @@ input::placeholder, textarea::placeholder {
.verification-icon svg { .verification-icon svg {
width: 20px; width: 20px;
height: 20px; height: 20px;
}
/* Sign Request Manager Styles */
.sign-request-manager {
margin-top: 16px;
padding: 16px;
background: var(--bg-secondary);
border-radius: 8px;
border: 1px solid var(--border-color);
}
.connection-status {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 12px;
font-size: 12px;
font-weight: 500;
}
.status-indicator {
width: 8px;
height: 8px;
border-radius: 50%;
background: #ef4444;
}
.connection-status.connected .status-indicator {
background: #10b981;
}
.no-requests {
text-align: center;
padding: 20px;
color: var(--text-secondary);
}
.unlock-prompt, .keyspace-mismatch {
text-align: center;
padding: 20px;
}
.unlock-prompt h3, .keyspace-mismatch h3 {
margin: 0 0 12px 0;
font-size: 16px;
color: var(--text-primary);
}
.unlock-prompt p, .keyspace-mismatch p {
margin: 8px 0;
color: var(--text-secondary);
font-size: 14px;
}
.hint {
font-style: italic;
font-size: 12px !important;
color: var(--text-tertiary) !important;
}
.requests-header {
margin-bottom: 12px;
}
.requests-header h3 {
margin: 0;
font-size: 16px;
color: var(--text-primary);
}
.requests-list {
display: flex;
flex-direction: column;
gap: 12px;
}
.sign-request-card {
background: var(--bg-primary);
border: 1px solid var(--border-color);
border-radius: 6px;
padding: 12px;
}
.request-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 8px;
}
.request-id {
font-family: monospace;
font-size: 12px;
color: var(--text-secondary);
font-weight: 500;
}
.request-time {
font-size: 11px;
color: var(--text-tertiary);
}
.request-message {
margin-bottom: 12px;
}
.request-message label {
display: block;
font-size: 12px;
font-weight: 500;
color: var(--text-secondary);
margin-bottom: 4px;
}
.message-content {
background: var(--bg-secondary);
border: 1px solid var(--border-color);
border-radius: 4px;
padding: 8px;
position: relative;
}
.message-preview {
font-family: monospace;
font-size: 11px;
color: var(--text-primary);
word-break: break-all;
line-height: 1.4;
max-height: 60px;
overflow: hidden;
}
.message-content.expanded .message-preview {
max-height: none;
}
.expand-message {
position: absolute;
top: 4px;
right: 4px;
background: var(--accent-color);
color: white;
border: none;
border-radius: 3px;
padding: 2px 6px;
font-size: 10px;
cursor: pointer;
transition: background-color 0.2s;
}
.expand-message:hover {
background: var(--accent-hover);
}
.request-actions {
display: flex;
gap: 8px;
justify-content: flex-end;
}
.btn-approve, .btn-reject {
padding: 6px 12px;
border: none;
border-radius: 4px;
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: all 0.2s;
}
.btn-approve {
background: #10b981;
color: white;
}
.btn-approve:hover:not(:disabled) {
background: #059669;
}
.btn-reject {
background: #ef4444;
color: white;
}
.btn-reject:hover:not(:disabled) {
background: #dc2626;
}
.btn-approve:disabled, .btn-reject:disabled {
opacity: 0.6;
cursor: not-allowed;
} }

View File

@ -202,33 +202,6 @@ function debugString(val) {
// TODO we could test for more things here, like `Set`s and `Map`s. // TODO we could test for more things here, like `Set`s and `Map`s.
return className; return className;
} }
/**
* Initialize the scripting environment (must be called before run_rhai)
*/
export function init_rhai_env() {
wasm.init_rhai_env();
}
function takeFromExternrefTable0(idx) {
const value = wasm.__wbindgen_export_2.get(idx);
wasm.__externref_table_dealloc(idx);
return value;
}
/**
* Securely run a Rhai script in the extension context (must be called only after user approval)
* @param {string} script
* @returns {any}
*/
export function run_rhai(script) {
const ptr0 = passStringToWasm0(script, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.run_rhai(ptr0, len0);
if (ret[2]) {
throw takeFromExternrefTable0(ret[1]);
}
return takeFromExternrefTable0(ret[0]);
}
/** /**
* Create and unlock a new keyspace with the given name and password * Create and unlock a new keyspace with the given name and password
* @param {string} keyspace * @param {string} keyspace
@ -266,6 +239,11 @@ export function lock_session() {
wasm.lock_session(); wasm.lock_session();
} }
function takeFromExternrefTable0(idx) {
const value = wasm.__wbindgen_export_2.get(idx);
wasm.__externref_table_dealloc(idx);
return value;
}
/** /**
* Get metadata of the currently selected keypair * Get metadata of the currently selected keypair
* @returns {any} * @returns {any}
@ -299,42 +277,6 @@ export function is_unlocked() {
return ret !== 0; return ret !== 0;
} }
/**
* Get the default public key for a workspace (keyspace)
* This returns the public key of the first keypair in the keyspace
* @param {string} workspace_id
* @returns {Promise<any>}
*/
export function get_workspace_default_public_key(workspace_id) {
const ptr0 = passStringToWasm0(workspace_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.get_workspace_default_public_key(ptr0, len0);
return ret;
}
/**
* Get the current unlocked public key as hex string
* @returns {string}
*/
export function get_current_unlocked_public_key() {
let deferred2_0;
let deferred2_1;
try {
const ret = wasm.get_current_unlocked_public_key();
var ptr1 = ret[0];
var len1 = ret[1];
if (ret[3]) {
ptr1 = 0; len1 = 0;
throw takeFromExternrefTable0(ret[2]);
}
deferred2_0 = ptr1;
deferred2_1 = len1;
return getStringFromWasm0(ptr1, len1);
} finally {
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
}
}
/** /**
* Get all keypairs from the current session * Get all keypairs from the current session
* Returns an array of keypair objects with id, type, and metadata * Returns an array of keypair objects with id, type, and metadata
@ -381,7 +323,7 @@ function passArray8ToWasm0(arg, malloc) {
return ptr; return ptr;
} }
/** /**
* Sign message with current session (requires selected keypair) * Sign message with current session
* @param {Uint8Array} message * @param {Uint8Array} message
* @returns {Promise<any>} * @returns {Promise<any>}
*/ */
@ -392,41 +334,6 @@ export function sign(message) {
return ret; return ret;
} }
/**
* Get the current keyspace name
* @returns {string}
*/
export function get_current_keyspace_name() {
let deferred2_0;
let deferred2_1;
try {
const ret = wasm.get_current_keyspace_name();
var ptr1 = ret[0];
var len1 = ret[1];
if (ret[3]) {
ptr1 = 0; len1 = 0;
throw takeFromExternrefTable0(ret[2]);
}
deferred2_0 = ptr1;
deferred2_1 = len1;
return getStringFromWasm0(ptr1, len1);
} finally {
wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
}
}
/**
* Sign message with default keypair (first keypair in keyspace) without changing session state
* @param {Uint8Array} message
* @returns {Promise<any>}
*/
export function sign_with_default_keypair(message) {
const ptr0 = passArray8ToWasm0(message, wasm.__wbindgen_malloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.sign_with_default_keypair(ptr0, len0);
return ret;
}
/** /**
* Verify a signature with the current session's selected keypair * Verify a signature with the current session's selected keypair
* @param {Uint8Array} message * @param {Uint8Array} message
@ -466,162 +373,46 @@ export function decrypt_data(encrypted) {
return ret; return ret;
} }
function __wbg_adapter_34(arg0, arg1, arg2) { /**
wasm.closure135_externref_shim(arg0, arg1, arg2); * Initialize the scripting environment (must be called before run_rhai)
*/
export function init_rhai_env() {
wasm.init_rhai_env();
} }
function __wbg_adapter_39(arg0, arg1) { /**
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__ha4436a3f79fb1a0f(arg0, arg1); * Securely run a Rhai script in the extension context (must be called only after user approval)
* @param {string} script
* @returns {any}
*/
export function run_rhai(script) {
const ptr0 = passStringToWasm0(script, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ret = wasm.run_rhai(ptr0, len0);
if (ret[2]) {
throw takeFromExternrefTable0(ret[1]);
}
return takeFromExternrefTable0(ret[0]);
} }
function __wbg_adapter_44(arg0, arg1, arg2) { function __wbg_adapter_32(arg0, arg1, arg2) {
wasm.closure199_externref_shim(arg0, arg1, arg2); wasm.closure121_externref_shim(arg0, arg1, arg2);
} }
function __wbg_adapter_49(arg0, arg1) { function __wbg_adapter_35(arg0, arg1, arg2) {
wasm._dyn_core__ops__function__FnMut_____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__hf148c54a4a246cea(arg0, arg1); wasm.closure150_externref_shim(arg0, arg1, arg2);
} }
function __wbg_adapter_52(arg0, arg1, arg2) { function __wbg_adapter_38(arg0, arg1, arg2) {
wasm.closure264_externref_shim(arg0, arg1, arg2); wasm.closure227_externref_shim(arg0, arg1, arg2);
} }
function __wbg_adapter_55(arg0, arg1, arg2) { function __wbg_adapter_138(arg0, arg1, arg2, arg3) {
wasm.closure349_externref_shim(arg0, arg1, arg2); wasm.closure1879_externref_shim(arg0, arg1, arg2, arg3);
} }
function __wbg_adapter_195(arg0, arg1, arg2, arg3) {
wasm.closure2004_externref_shim(arg0, arg1, arg2, arg3);
}
const __wbindgen_enum_BinaryType = ["blob", "arraybuffer"];
const __wbindgen_enum_IdbTransactionMode = ["readonly", "readwrite", "versionchange", "readwriteflush", "cleanup"]; const __wbindgen_enum_IdbTransactionMode = ["readonly", "readwrite", "versionchange", "readwriteflush", "cleanup"];
const SigSocketConnectionFinalization = (typeof FinalizationRegistry === 'undefined')
? { register: () => {}, unregister: () => {} }
: new FinalizationRegistry(ptr => wasm.__wbg_sigsocketconnection_free(ptr >>> 0, 1));
/**
* WASM-bindgen wrapper for SigSocket client
*
* This provides a clean JavaScript API for the browser extension to:
* - Connect to SigSocket servers
* - Send responses to sign requests
* - Manage connection state
*/
export class SigSocketConnection {
__destroy_into_raw() {
const ptr = this.__wbg_ptr;
this.__wbg_ptr = 0;
SigSocketConnectionFinalization.unregister(this);
return ptr;
}
free() {
const ptr = this.__destroy_into_raw();
wasm.__wbg_sigsocketconnection_free(ptr, 0);
}
/**
* Create a new SigSocket connection
*/
constructor() {
const ret = wasm.sigsocketconnection_new();
this.__wbg_ptr = ret >>> 0;
SigSocketConnectionFinalization.register(this, this.__wbg_ptr, this);
return this;
}
/**
* Connect to a SigSocket server
*
* # Arguments
* * `server_url` - WebSocket server URL (e.g., "ws://localhost:8080/ws")
* * `public_key_hex` - Client's public key as hex string
*
* # Returns
* * `Ok(())` - Successfully connected
* * `Err(error)` - Connection failed
* @param {string} server_url
* @param {string} public_key_hex
* @returns {Promise<void>}
*/
connect(server_url, public_key_hex) {
const ptr0 = passStringToWasm0(server_url, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passStringToWasm0(public_key_hex, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
const ret = wasm.sigsocketconnection_connect(this.__wbg_ptr, ptr0, len0, ptr1, len1);
return ret;
}
/**
* Send a response to a sign request
*
* This should be called by the extension after the user has approved
* a sign request and the message has been signed.
*
* # Arguments
* * `request_id` - ID of the original request
* * `message_base64` - Original message (base64-encoded)
* * `signature_hex` - Signature as hex string
*
* # Returns
* * `Ok(())` - Response sent successfully
* * `Err(error)` - Failed to send response
* @param {string} request_id
* @param {string} message_base64
* @param {string} signature_hex
* @returns {Promise<void>}
*/
send_response(request_id, message_base64, signature_hex) {
const ptr0 = passStringToWasm0(request_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passStringToWasm0(message_base64, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
const ptr2 = passStringToWasm0(signature_hex, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len2 = WASM_VECTOR_LEN;
const ret = wasm.sigsocketconnection_send_response(this.__wbg_ptr, ptr0, len0, ptr1, len1, ptr2, len2);
return ret;
}
/**
* Send a rejection for a sign request
*
* This should be called when the user rejects a sign request.
*
* # Arguments
* * `request_id` - ID of the request to reject
* * `reason` - Reason for rejection (optional)
*
* # Returns
* * `Ok(())` - Rejection sent successfully
* * `Err(error)` - Failed to send rejection
* @param {string} request_id
* @param {string} reason
* @returns {Promise<void>}
*/
send_rejection(request_id, reason) {
const ptr0 = passStringToWasm0(request_id, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
const ptr1 = passStringToWasm0(reason, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
const ret = wasm.sigsocketconnection_send_rejection(this.__wbg_ptr, ptr0, len0, ptr1, len1);
return ret;
}
/**
* Disconnect from the SigSocket server
*/
disconnect() {
wasm.sigsocketconnection_disconnect(this.__wbg_ptr);
}
/**
* Check if connected to the server
* @returns {boolean}
*/
is_connected() {
const ret = wasm.sigsocketconnection_is_connected(this.__wbg_ptr);
return ret !== 0;
}
}
async function __wbg_load(module, imports) { async function __wbg_load(module, imports) {
if (typeof Response === 'function' && module instanceof Response) { if (typeof Response === 'function' && module instanceof Response) {
if (typeof WebAssembly.instantiateStreaming === 'function') { if (typeof WebAssembly.instantiateStreaming === 'function') {
@ -676,10 +467,6 @@ function __wbg_get_imports() {
const ret = arg0.crypto; const ret = arg0.crypto;
return ret; return ret;
}; };
imports.wbg.__wbg_data_432d9c3df2630942 = function(arg0) {
const ret = arg0.data;
return ret;
};
imports.wbg.__wbg_error_524f506f44df1645 = function(arg0) { imports.wbg.__wbg_error_524f506f44df1645 = function(arg0) {
console.error(arg0); console.error(arg0);
}; };
@ -752,23 +539,10 @@ function __wbg_get_imports() {
const ret = result; const ret = result;
return ret; return ret;
}; };
imports.wbg.__wbg_instanceof_Window_def73ea0955fc569 = function(arg0) {
let result;
try {
result = arg0 instanceof Window;
} catch (_) {
result = false;
}
const ret = result;
return ret;
};
imports.wbg.__wbg_length_52b6c4580c5ec934 = function(arg0) { imports.wbg.__wbg_length_52b6c4580c5ec934 = function(arg0) {
const ret = arg0.length; const ret = arg0.length;
return ret; return ret;
}; };
imports.wbg.__wbg_log_c222819a41e063d3 = function(arg0) {
console.log(arg0);
};
imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) { imports.wbg.__wbg_msCrypto_a61aeb35a24c1329 = function(arg0) {
const ret = arg0.msCrypto; const ret = arg0.msCrypto;
return ret; return ret;
@ -784,7 +558,7 @@ function __wbg_get_imports() {
const a = state0.a; const a = state0.a;
state0.a = 0; state0.a = 0;
try { try {
return __wbg_adapter_195(a, state0.b, arg0, arg1); return __wbg_adapter_138(a, state0.b, arg0, arg1);
} finally { } finally {
state0.a = a; state0.a = a;
} }
@ -803,10 +577,6 @@ function __wbg_get_imports() {
const ret = new Array(); const ret = new Array();
return ret; return ret;
}; };
imports.wbg.__wbg_new_92c54fc74574ef55 = function() { return handleError(function (arg0, arg1) {
const ret = new WebSocket(getStringFromWasm0(arg0, arg1));
return ret;
}, arguments) };
imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) { imports.wbg.__wbg_new_a12002a7f91c75be = function(arg0) {
const ret = new Uint8Array(arg0); const ret = new Uint8Array(arg0);
return ret; return ret;
@ -839,12 +609,6 @@ function __wbg_get_imports() {
const ret = arg0.objectStore(getStringFromWasm0(arg1, arg2)); const ret = arg0.objectStore(getStringFromWasm0(arg1, arg2));
return ret; return ret;
}, arguments) }; }, arguments) };
imports.wbg.__wbg_onConnectionStateChanged_b0dc098522afadba = function(arg0) {
onConnectionStateChanged(arg0 !== 0);
};
imports.wbg.__wbg_onSignRequestReceived_93232ba7a0919705 = function(arg0, arg1, arg2, arg3) {
onSignRequestReceived(getStringFromWasm0(arg0, arg1), getStringFromWasm0(arg2, arg3));
};
imports.wbg.__wbg_open_88b1390d99a7c691 = function() { return handleError(function (arg0, arg1, arg2) { imports.wbg.__wbg_open_88b1390d99a7c691 = function() { return handleError(function (arg0, arg1, arg2) {
const ret = arg0.open(getStringFromWasm0(arg1, arg2)); const ret = arg0.open(getStringFromWasm0(arg1, arg2));
return ret; return ret;
@ -879,10 +643,6 @@ function __wbg_get_imports() {
imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) { imports.wbg.__wbg_randomFillSync_ac0988aba3254290 = function() { return handleError(function (arg0, arg1) {
arg0.randomFillSync(arg1); arg0.randomFillSync(arg1);
}, arguments) }; }, arguments) };
imports.wbg.__wbg_readyState_7ef6e63c349899ed = function(arg0) {
const ret = arg0.readyState;
return ret;
};
imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () { imports.wbg.__wbg_require_60cc747a6bc5215a = function() { return handleError(function () {
const ret = module.require; const ret = module.require;
return ret; return ret;
@ -895,34 +655,12 @@ function __wbg_get_imports() {
const ret = arg0.result; const ret = arg0.result;
return ret; return ret;
}, arguments) }; }, arguments) };
imports.wbg.__wbg_send_0293179ba074ffb4 = function() { return handleError(function (arg0, arg1, arg2) {
arg0.send(getStringFromWasm0(arg1, arg2));
}, arguments) };
imports.wbg.__wbg_setTimeout_f2fe5af8e3debeb3 = function() { return handleError(function (arg0, arg1, arg2) {
const ret = arg0.setTimeout(arg1, arg2);
return ret;
}, arguments) };
imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) { imports.wbg.__wbg_set_65595bdd868b3009 = function(arg0, arg1, arg2) {
arg0.set(arg1, arg2 >>> 0); arg0.set(arg1, arg2 >>> 0);
}; };
imports.wbg.__wbg_setbinaryType_92fa1ffd873b327c = function(arg0, arg1) {
arg0.binaryType = __wbindgen_enum_BinaryType[arg1];
};
imports.wbg.__wbg_setonclose_14fc475a49d488fc = function(arg0, arg1) {
arg0.onclose = arg1;
};
imports.wbg.__wbg_setonerror_8639efe354b947cd = function(arg0, arg1) {
arg0.onerror = arg1;
};
imports.wbg.__wbg_setonerror_d7e3056cc6e56085 = function(arg0, arg1) { imports.wbg.__wbg_setonerror_d7e3056cc6e56085 = function(arg0, arg1) {
arg0.onerror = arg1; arg0.onerror = arg1;
}; };
imports.wbg.__wbg_setonmessage_6eccab530a8fb4c7 = function(arg0, arg1) {
arg0.onmessage = arg1;
};
imports.wbg.__wbg_setonopen_2da654e1f39745d5 = function(arg0, arg1) {
arg0.onopen = arg1;
};
imports.wbg.__wbg_setonsuccess_afa464ee777a396d = function(arg0, arg1) { imports.wbg.__wbg_setonsuccess_afa464ee777a396d = function(arg0, arg1) {
arg0.onsuccess = arg1; arg0.onsuccess = arg1;
}; };
@ -957,10 +695,6 @@ function __wbg_get_imports() {
const ret = arg0.then(arg1); const ret = arg0.then(arg1);
return ret; return ret;
}; };
imports.wbg.__wbg_then_48b406749878a531 = function(arg0, arg1, arg2) {
const ret = arg0.then(arg1, arg2);
return ret;
};
imports.wbg.__wbg_transaction_d6d07c3c9963c49e = function() { return handleError(function (arg0, arg1, arg2) { imports.wbg.__wbg_transaction_d6d07c3c9963c49e = function() { return handleError(function (arg0, arg1, arg2) {
const ret = arg0.transaction(arg1, __wbindgen_enum_IdbTransactionMode[arg2]); const ret = arg0.transaction(arg1, __wbindgen_enum_IdbTransactionMode[arg2]);
return ret; return ret;
@ -969,9 +703,6 @@ function __wbg_get_imports() {
const ret = arg0.versions; const ret = arg0.versions;
return ret; return ret;
}; };
imports.wbg.__wbg_warn_4ca3906c248c47c4 = function(arg0) {
console.warn(arg0);
};
imports.wbg.__wbindgen_cb_drop = function(arg0) { imports.wbg.__wbindgen_cb_drop = function(arg0) {
const obj = arg0.original; const obj = arg0.original;
if (obj.cnt-- == 1) { if (obj.cnt-- == 1) {
@ -981,40 +712,16 @@ function __wbg_get_imports() {
const ret = false; const ret = false;
return ret; return ret;
}; };
imports.wbg.__wbindgen_closure_wrapper1181 = function(arg0, arg1, arg2) { imports.wbg.__wbindgen_closure_wrapper378 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 350, __wbg_adapter_55); const ret = makeMutClosure(arg0, arg1, 122, __wbg_adapter_32);
return ret; return ret;
}; };
imports.wbg.__wbindgen_closure_wrapper335 = function(arg0, arg1, arg2) { imports.wbg.__wbindgen_closure_wrapper549 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 133, __wbg_adapter_34); const ret = makeMutClosure(arg0, arg1, 151, __wbg_adapter_35);
return ret; return ret;
}; };
imports.wbg.__wbindgen_closure_wrapper336 = function(arg0, arg1, arg2) { imports.wbg.__wbindgen_closure_wrapper857 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 133, __wbg_adapter_34); const ret = makeMutClosure(arg0, arg1, 228, __wbg_adapter_38);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper337 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 133, __wbg_adapter_39);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper340 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 133, __wbg_adapter_34);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper657 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 200, __wbg_adapter_44);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper658 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 200, __wbg_adapter_44);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper661 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 200, __wbg_adapter_49);
return ret;
};
imports.wbg.__wbindgen_closure_wrapper876 = function(arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 265, __wbg_adapter_52);
return ret; return ret;
}; };
imports.wbg.__wbindgen_debug_string = function(arg0, arg1) { imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
@ -1071,14 +778,6 @@ function __wbg_get_imports() {
const ret = wasm.memory; const ret = wasm.memory;
return ret; return ret;
}; };
imports.wbg.__wbindgen_string_get = function(arg0, arg1) {
const obj = arg1;
const ret = typeof(obj) === 'string' ? obj : undefined;
var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
};
imports.wbg.__wbindgen_string_new = function(arg0, arg1) { imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
const ret = getStringFromWasm0(arg0, arg1); const ret = getStringFromWasm0(arg0, arg1);
return ret; return ret;