From 19203cc003607762e4918652603511b01c929c90 Mon Sep 17 00:00:00 2001 From: Peter Harpending Date: Fri, 14 Jul 2023 20:53:35 -0600 Subject: [PATCH] have page script talking to controller --- jrx/manifest.json | 9 +-- jrx/popup.html | 4 +- jrx/scratch/old_background.ts | 92 +++++++++++++++++++++++++++++ jrx/src/background.ts | 107 ++++++++++------------------------ jrx/src/content.ts | 95 ++++++++++++++++++++++++------ 5 files changed, 207 insertions(+), 100 deletions(-) create mode 100644 jrx/scratch/old_background.ts diff --git a/jrx/manifest.json b/jrx/manifest.json index 47d12ca..c1734a0 100644 --- a/jrx/manifest.json +++ b/jrx/manifest.json @@ -2,11 +2,12 @@ "name" : "Jack Russell", "version" : "0.1.0", "description" : "Browser wallet extension for Aeternity", - "icons" : {"48" : "icons/jrx-icon-48.png", - "96" : "icons/jrx-icon-96.png"}, + "icons" : {"48" : "art/jrx-icon-48.png", + "96" : "art/jrx-icon-96.png"}, "content_scripts" : [{"matches" : ["*://*/*"], "js" : ["dist/content.js"]}], - "browser_action" : {"default_icon" : "icons/jrx-icon-32.png", - "default_title" : "Jaeck Russell", + "browser_action" : {"default_icon" : "art/jrx-icon-32.png", + "default_title" : "Jæck Russell", "default_popup" : "popup.html"}, + "background" : {"scripts": ["dist/background.js"]}, "permissions" : ["storage"]} diff --git a/jrx/popup.html b/jrx/popup.html index ae321c3..ca0f9e0 100644 --- a/jrx/popup.html +++ b/jrx/popup.html @@ -19,7 +19,7 @@ - + @@ -29,7 +29,7 @@
JÆCK RUSSELL
- + diff --git a/jrx/scratch/old_background.ts b/jrx/scratch/old_background.ts new file mode 100644 index 0000000..d78e747 --- /dev/null +++ b/jrx/scratch/old_background.ts @@ -0,0 +1,92 @@ +/** + * JR Controller + * + * Note that this is a *thread*. We put our business and storage logic within + * this thread. The reason we do that is we don't want to deal with the + * problem of conflicting concurrent writes.. + * + * @module + */ + + +export type { + jr_data, + named_keypair, + keypair +} + +export { + // top-level getters/setters +}; + + + +/** + * The data structure we store + */ +type jr_data + = {version : 0, + named_keypairs : Array}; + + + +/** + * This is the default {@link jr_data}. + * + * @private + */ +let jr_data_mzero = {version : 0 as 0, // yay ts type inference can't infer 0 is of type 0 + named_keypairs : []}; + + + +/** + * Every keypair has to have a name + */ +type named_keypair + = {name : string} + & keypair; + + + +/** + * From NaCl + */ +type keypair + = {secretKey : Uint8Array, + publicKey : Uint8Array}; + + + +/** + * Get the state from the system + */ +async function +fetch_migrate + () + : Promise +{ + // try to get data + let browser_data = await browser.storage.local.get('jr'); + // test if it's there + if (!!(browser_data.jr)) + return browser_data.jr; + // if the data is not there + else + return jr_data_mzero; +} + + + +/** + * Put state + * + * @private + */ +async function +put + (state : jr_data) + : Promise +{ + await browser.storage.local.set({jr: state}); +} diff --git a/jrx/src/background.ts b/jrx/src/background.ts index d78e747..46df7b5 100644 --- a/jrx/src/background.ts +++ b/jrx/src/background.ts @@ -9,84 +9,41 @@ */ -export type { - jr_data, - named_keypair, - keypair -} - -export { - // top-level getters/setters -}; - - - /** - * The data structure we store - */ -type jr_data - = {version : 0, - named_keypairs : Array}; - - - -/** - * This is the default {@link jr_data}. - * - * @private - */ -let jr_data_mzero = {version : 0 as 0, // yay ts type inference can't infer 0 is of type 0 - named_keypairs : []}; - - - -/** - * Every keypair has to have a name - */ -type named_keypair - = {name : string} - & keypair; - - - -/** - * From NaCl - */ -type keypair - = {secretKey : Uint8Array, - publicKey : Uint8Array}; - - - -/** - * Get the state from the system + * Handle messages from the content script */ async function -fetch_migrate - () - : Promise -{ - // try to get data - let browser_data = await browser.storage.local.get('jr'); - // test if it's there - if (!!(browser_data.jr)) - return browser_data.jr; - // if the data is not there - else - return jr_data_mzero; -} - - - -/** - * Put state - * - * @private - */ -async function -put - (state : jr_data) +bg_a2w_handler + (msg: any, sender: any, sendResponse: any) : Promise { - await browser.storage.local.set({jr: state}); + console.log('msg', msg); + console.log('sender', sender); + console.log('sendResponse', sendResponse); + // send them back to content script + // @ts-ignore stahp + //let the_sender: number = sender.tab.id; + //browser.tabs.sendMessage(the_sender, msg); + // @ts-ignore stahp + //sendResponse(msg); } + + + +/** + * main function for background thread + */ +async function +jr_bg_main + () + : Promise +{ + console.log('hi'); + + // handle messages from content script + browser.runtime.onMessage.addListener(bg_a2w_handler); + +} + + +jr_bg_main(); diff --git a/jrx/src/content.ts b/jrx/src/content.ts index 6448001..a353085 100644 --- a/jrx/src/content.ts +++ b/jrx/src/content.ts @@ -12,31 +12,88 @@ */ -jr_content_main(); + +let detect_msg = {type : "to_aepp", + data : {jsonrpc : "2.0", + method : "connection.announcePresence", + params : {id : "jr", + name : "JR", + networkId : "ae_uat", + origin : "foobar", + type : "extension"}}}; + +/** + * Spam detect message + */ +async function +spam_detect + () +{ + while (true) { + window.postMessage(detect_msg); + await sleep(3000); + } +} + +/** + * Hack from stack overflow somewhere to sleep for the given number of ms + */ +async function +sleep + (ms: number) + : Promise +{ + return new Promise(resolve => setTimeout(resolve, ms)); +} + + + +/** + * Relays messages from page scripts to the background script + */ +function +a2w_handler + (msg: {data: {type? : "to_aepp" | "to_waellet"}}) +{ + // branch + if ("to_waellet" === msg.data.type) { + browser.runtime.sendMessage(msg.data); + } + // otherwise ignore +} + + + +/** + * Relays messages from background scripts to the page script + */ +function +w2a_handler + (msg: any) +{ + window.postMessage(msg); +} + + + +/** + * Main function + */ async function jr_content_main () { - // @ts-ignore browser - browser.runtime.onMessage.addListener(handler); - window.addEventListener('message', page_script_message_handler); + // relay page messages back to the controller + window.addEventListener('message', a2w_handler); + // relay controller messages back to page + browser.runtime.onMessage.addListener(w2a_handler); - - - /** - * This is the message that we spam the page script with when the user clicks - * the "make wallet detectable" button. - * - * Contains {@link detect_msg} as a field - */ - let detect_awcp_msg = {type : "to_aepp", - data : {jsonrpc : "2.0", - method : "connection.announcePresence", - params : detect_msg()}}; - - // mk detectable - mk_detectable(detect_awcp_msg); + // spam detect + spam_detect(); } + + +jr_content_main();
KEYPAIRS