have page script talking to controller
This commit is contained in:
+32
-75
@@ -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<named_keypair>};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 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<jr_data>
|
||||
{
|
||||
// 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<void>
|
||||
{
|
||||
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<void>
|
||||
{
|
||||
console.log('hi');
|
||||
|
||||
// handle messages from content script
|
||||
browser.runtime.onMessage.addListener(bg_a2w_handler);
|
||||
|
||||
}
|
||||
|
||||
|
||||
jr_bg_main();
|
||||
|
||||
+76
-19
@@ -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<void>
|
||||
{
|
||||
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();
|
||||
|
||||
Reference in New Issue
Block a user