diff --git a/package.json b/package.json index 2cb804b..da577db 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.62.21", + "version": "0.62.24", "versions": { "git": "0.62.6", "npm": "0.62.6" @@ -77,6 +77,7 @@ "@pezkuwi/ui-shared": "^3.17.1", "@pezkuwi/util": "^14.0.25", "@pezkuwi/util-crypto": "^14.0.25", + "@pezkuwi/wasm-crypto": "^7.5.18", "@pezkuwi/x-bigint": "^14.0.25", "@pezkuwi/x-fetch": "^14.0.25", "@pezkuwi/x-global": "^14.0.25", diff --git a/packages/extension/manifest_chrome.json b/packages/extension/manifest_chrome.json index c027028..4d54996 100644 --- a/packages/extension/manifest_chrome.json +++ b/packages/extension/manifest_chrome.json @@ -39,5 +39,5 @@ "content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" }, - "version": "0.62.21" + "version": "0.62.24" } diff --git a/packages/extension/manifest_firefox.json b/packages/extension/manifest_firefox.json index 71fdc4e..a3c3900 100644 --- a/packages/extension/manifest_firefox.json +++ b/packages/extension/manifest_firefox.json @@ -48,5 +48,5 @@ "content_security_policy": { "extension_pages": "script-src 'self' 'wasm-unsafe-eval'; object-src 'self'" }, - "version": "0.62.21" + "version": "0.62.24" } diff --git a/packages/extension/package.json b/packages/extension/package.json index 3eb5fcc..7d92f16 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -15,7 +15,7 @@ }, "sideEffects": false, "type": "module", - "version": "0.62.21", + "version": "0.62.23", "scripts": { "pezkuwi-exec-webpack": "pezkuwi-exec-webpack" }, diff --git a/packages/extension/src/background.ts b/packages/extension/src/background.ts index e08960a..4d70b88 100644 --- a/packages/extension/src/background.ts +++ b/packages/extension/src/background.ts @@ -19,13 +19,38 @@ import { cryptoWaitReady } from '@pezkuwi/util-crypto'; // setup the notification (same a FF default background, white text) withErrorLog(() => chrome.action.setBadgeBackgroundColor({ color: '#d90000' })); +// Initialization promise - handlers must wait for this +let initPromise: Promise | null = null; + +function initializeExtension (): Promise { + if (!initPromise) { + initPromise = cryptoWaitReady() + .then((): void => { + console.log('crypto initialized'); + keyring.loadAll({ store: new AccountsStore(), type: 'sr25519' }); + console.log('initialization completed'); + }); + } + + return initPromise; +} + +// Start initialization immediately +initializeExtension().catch((error): void => { + console.error('initialization failed', error); +}); + // listen to all messages and handle appropriately chrome.runtime.onConnect.addListener((port): void => { // shouldn't happen, however... only listen to what we know about assert([PORT_CONTENT, PORT_EXTENSION].includes(port.name), `Unknown connection from ${port.name}`); - // message and disconnect handlers - port.onMessage.addListener((data: TransportRequestMessage) => handlers(data, port)); + // message and disconnect handlers - wait for init before handling + port.onMessage.addListener((data: TransportRequestMessage) => { + initializeExtension() + .then(() => handlers(data, port)) + .catch((error) => console.error('Handler error:', error)); + }); port.onDisconnect.addListener(() => console.log(`Disconnected from ${port.name}`)); }); @@ -57,22 +82,17 @@ function getActiveTabs () { request: { urls } }; - handlers(request); + // Wait for initialization before handling + initializeExtension() + .then(() => handlers(request)) + .catch((error) => console.error('Handler error:', error)); }); } -chrome.runtime.onMessage.addListener((message: { type: string }, _, sendResponse): boolean | undefined => { +chrome.runtime.onMessage.addListener((message: { type: string }, _, sendResponse) => { if (message.type === 'wakeup') { - // Wait for crypto/keyring to be ready before responding awake - waitForInit() - .then(() => sendResponse({ status: 'awake' })) - .catch(() => sendResponse({ status: 'error' })); - - // Return true to indicate we will respond asynchronously - return true; + sendResponse({ status: 'awake' }); } - - return undefined; }); // listen to tab updates this is fired on url change @@ -102,46 +122,4 @@ chrome.tabs.onRemoved.addListener(() => { getActiveTabs(); }); -// Track initialization state -let isInitialized = false; -let initializationPromise: Promise | null = null; - -// Wait for initialization before processing - used by wakeup handler -function waitForInit (): Promise { - if (isInitialized) { - return Promise.resolve(); - } - - if (initializationPromise) { - return initializationPromise; - } - - // If init hasn't started yet, start it now - return startInit(); -} - -function startInit (): Promise { - if (initializationPromise) { - return initializationPromise; - } - - initializationPromise = cryptoWaitReady() - .then((): void => { - console.log('crypto initialized'); - - // load all the keyring data - keyring.loadAll({ store: new AccountsStore(), type: 'sr25519' }); - - isInitialized = true; - console.log('initialization completed'); - }) - .catch((error): void => { - console.error('initialization failed', error); - throw error; - }); - - return initializationPromise; -} - -// Start initialization -startInit(); +// Note: initialization is handled by initializeExtension() above diff --git a/packages/extension/src/packageInfo.ts b/packages/extension/src/packageInfo.ts index 8581697..f1114ce 100644 --- a/packages/extension/src/packageInfo.ts +++ b/packages/extension/src/packageInfo.ts @@ -3,4 +3,4 @@ // Do not edit, auto-generated by @pezkuwi/dev -export const packageInfo = { name: '@pezkuwi/extension', path: 'auto', type: 'auto', version: '0.62.21' }; +export const packageInfo = { name: '@pezkuwi/extension', path: 'auto', type: 'auto', version: '0.62.23' }; diff --git a/pezkuwi-chrome-0.62.22.zip b/pezkuwi-chrome-0.62.22.zip new file mode 100644 index 0000000..21fe25c Binary files /dev/null and b/pezkuwi-chrome-0.62.22.zip differ diff --git a/yarn.lock b/yarn.lock index 664bf08..498cae5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1750,73 +1750,84 @@ __metadata: languageName: node linkType: hard -"@pezkuwi/wasm-bridge@npm:7.5.17": - version: 7.5.17 - resolution: "@pezkuwi/wasm-bridge@npm:7.5.17" +"@pezkuwi/wasm-bridge@npm:7.5.15": + version: 7.5.15 + resolution: "@pezkuwi/wasm-bridge@npm:7.5.15" dependencies: - "@pezkuwi/wasm-util": "npm:7.5.17" + "@pezkuwi/wasm-util": "npm:7.5.15" tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" "@pezkuwi/x-randomvalues": "*" - checksum: 10/a559ccb20388091fe96c59aded45c6146af249f6d8d4cbfd90d00cb818414f2df631abd4d2c59c867f617028d876d334b9d089c4d565da74fcd15ee8147daf05 + checksum: 10/70ea6babbd48261d3e6aac8153f309a182ab8a5edb84871bcfdd4418d498a793efdf9623d58f44627b0e731214e2da786f7f5697d7c6ff232a1fb433d9572328 languageName: node linkType: hard -"@pezkuwi/wasm-crypto-asmjs@npm:7.5.17": - version: 7.5.17 - resolution: "@pezkuwi/wasm-crypto-asmjs@npm:7.5.17" +"@pezkuwi/wasm-crypto-asmjs@npm:7.5.15": + version: 7.5.15 + resolution: "@pezkuwi/wasm-crypto-asmjs@npm:7.5.15" dependencies: tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" - checksum: 10/e4f3074edf947a4bf2943e6a100fb8d1bb90c44a369680869e21a3d9756b407cc2901f61bdd19c1f6bfb20ac16093c3a4b694054fd9531f16326c37d57796cd2 + checksum: 10/1ff62294d3f7cb2048dd49d7e8bb56d4d9a363ea3bbda7c4c64f57134f63647c58018cc03214ae8942bb4a1d69eb9f166882260326b6fa180652bef0469bba35 languageName: node linkType: hard -"@pezkuwi/wasm-crypto-init@npm:7.5.17": - version: 7.5.17 - resolution: "@pezkuwi/wasm-crypto-init@npm:7.5.17" +"@pezkuwi/wasm-crypto-init@npm:7.5.15": + version: 7.5.15 + resolution: "@pezkuwi/wasm-crypto-init@npm:7.5.15" dependencies: - "@pezkuwi/wasm-bridge": "npm:7.5.17" - "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.17" - "@pezkuwi/wasm-crypto-wasm": "npm:7.5.17" - "@pezkuwi/wasm-util": "npm:7.5.17" + "@pezkuwi/wasm-bridge": "npm:7.5.15" + "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.15" + "@pezkuwi/wasm-crypto-wasm": "npm:7.5.15" + "@pezkuwi/wasm-util": "npm:7.5.15" tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" "@pezkuwi/x-randomvalues": "*" - checksum: 10/13c60121be0285f0d9c6d023994ee300c6e73a7fcf932334677d7538e8f54bf767428f16f716d4a7f00702a1ea085c70ea074af646fde48d6c127da3398e93a6 + checksum: 10/7a0deaa9c5b70d6a443f282c08e7dd11bfbf345f81a7a854663c34e8aeddfa88c64f2302d849d31c0a54569aa115560b323a1b2ae9464928eb63ceefc99b4d91 languageName: node linkType: hard -"@pezkuwi/wasm-crypto-wasm@npm:7.5.17": - version: 7.5.17 - resolution: "@pezkuwi/wasm-crypto-wasm@npm:7.5.17" +"@pezkuwi/wasm-crypto-wasm@npm:7.5.15": + version: 7.5.15 + resolution: "@pezkuwi/wasm-crypto-wasm@npm:7.5.15" dependencies: - "@pezkuwi/wasm-util": "npm:7.5.17" + "@pezkuwi/wasm-util": "npm:7.5.15" tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" - checksum: 10/ce1d9f58b375b51266d9e5e78938476c4e51c70a92126965bf9275415cb73bd4478f0463613d486e43b7f45e7671a29caee1727aa4fb5444ad037ccb22d5bdee + checksum: 10/1c9ac61eda9ed4bd3ba6d267f60724f4379d04c4def51c805a6ccc2463e899a371726b35081ee5fe4d1db55405d3796c3523d184630f9e6b22ea5f628b03c583 languageName: node linkType: hard -"@pezkuwi/wasm-crypto@npm:7.5.17": - version: 7.5.17 - resolution: "@pezkuwi/wasm-crypto@npm:7.5.17" +"@pezkuwi/wasm-crypto@npm:^7.5.18": + version: 7.5.18 + resolution: "@pezkuwi/wasm-crypto@npm:7.5.18" dependencies: "@noble/hashes": "npm:^1.3.3" - "@pezkuwi/wasm-bridge": "npm:7.5.17" - "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.17" - "@pezkuwi/wasm-crypto-init": "npm:7.5.17" - "@pezkuwi/wasm-crypto-wasm": "npm:7.5.17" - "@pezkuwi/wasm-util": "npm:7.5.17" + "@pezkuwi/wasm-bridge": "npm:7.5.15" + "@pezkuwi/wasm-crypto-asmjs": "npm:7.5.15" + "@pezkuwi/wasm-crypto-init": "npm:7.5.15" + "@pezkuwi/wasm-crypto-wasm": "npm:7.5.15" + "@pezkuwi/wasm-util": "npm:7.5.15" tslib: "npm:^2.7.0" peerDependencies: "@pezkuwi/util": "*" "@pezkuwi/x-randomvalues": "*" - checksum: 10/82c68482d28a59f6d69c9ddfd9493445e87ea5136a6859385970929d0389d1eec80eaf62180cd72ff63fb683bd1074785ae647dfc8dc60c06a3e3aac8c7aa98b + checksum: 10/78a20c98dc6556e0c6d5807c7fb5e42ccf88ffd1c1aad7ef226e5ca3fa550f8b1000441306dd05294cd650de7720d73ff743f2bb8ec260637a38521e2898d76c + languageName: node + linkType: hard + +"@pezkuwi/wasm-util@npm:7.5.15": + version: 7.5.15 + resolution: "@pezkuwi/wasm-util@npm:7.5.15" + dependencies: + tslib: "npm:^2.7.0" + peerDependencies: + "@pezkuwi/util": "*" + checksum: 10/a6880613a5ec2f6692d8fdb5c8baf91f4621fb9283ec593fc414ad49c9bab0583a0dce57385483c08680a55a4ea890499712338bfbb343e7d644dd6a2e447864 languageName: node linkType: hard