- Change file mode from 644 to 755 for all project files - Add chain_id parameter to get_balance RPC endpoint with default "ait-devnet" - Rename Miner.extra_meta_data to extra_metadata for consistency
107 lines
3.9 KiB
JavaScript
Executable File
107 lines
3.9 KiB
JavaScript
Executable File
// Injected script that provides the AITBC wallet API to the dApp
|
|
(function() {
|
|
// Create the wallet API object
|
|
const aitbcWallet = {
|
|
// Check if wallet is available
|
|
isAvailable: function() {
|
|
return true;
|
|
},
|
|
|
|
// Connect to wallet
|
|
connect: async function() {
|
|
return new Promise((resolve, reject) => {
|
|
const requestId = Date.now().toString();
|
|
|
|
// Send request to content script
|
|
window.postMessage({
|
|
type: 'AITBC_WALLET_REQUEST',
|
|
id: requestId,
|
|
method: 'connect'
|
|
}, '*');
|
|
|
|
// Listen for response
|
|
const messageHandler = function(event) {
|
|
if (event.data.type === 'AITBC_WALLET_RESPONSE' && event.data.id === requestId) {
|
|
window.removeEventListener('message', messageHandler);
|
|
if (event.data.response.error) {
|
|
reject(new Error(event.data.response.error));
|
|
} else {
|
|
resolve(event.data.response);
|
|
}
|
|
}
|
|
};
|
|
|
|
window.addEventListener('message', messageHandler);
|
|
|
|
// Timeout after 30 seconds
|
|
setTimeout(() => {
|
|
window.removeEventListener('message', messageHandler);
|
|
reject(new Error('Connection timeout'));
|
|
}, 30000);
|
|
});
|
|
},
|
|
|
|
// Get account address
|
|
getAccount: async function() {
|
|
const accounts = await this.request({ method: 'accounts' });
|
|
return accounts[0];
|
|
},
|
|
|
|
// Get balance
|
|
getBalance: async function(address) {
|
|
return this.request({ method: 'getBalance', params: { address } });
|
|
},
|
|
|
|
// Send transaction
|
|
sendTransaction: async function(to, amount, data = null) {
|
|
return this.request({
|
|
method: 'sendTransaction',
|
|
params: { to, amount, data }
|
|
});
|
|
},
|
|
|
|
// Sign message
|
|
signMessage: async function(message) {
|
|
return this.request({ method: 'signMessage', params: { message } });
|
|
},
|
|
|
|
// Generic request method
|
|
request: async function(payload) {
|
|
return new Promise((resolve, reject) => {
|
|
const requestId = Date.now().toString();
|
|
|
|
window.postMessage({
|
|
type: 'AITBC_WALLET_REQUEST',
|
|
id: requestId,
|
|
method: payload.method,
|
|
params: payload.params || {}
|
|
}, '*');
|
|
|
|
const messageHandler = function(event) {
|
|
if (event.data.type === 'AITBC_WALLET_RESPONSE' && event.data.id === requestId) {
|
|
window.removeEventListener('message', messageHandler);
|
|
if (event.data.response.error) {
|
|
reject(new Error(event.data.response.error));
|
|
} else {
|
|
resolve(event.data.response);
|
|
}
|
|
}
|
|
};
|
|
|
|
window.addEventListener('message', messageHandler);
|
|
|
|
setTimeout(() => {
|
|
window.removeEventListener('message', messageHandler);
|
|
reject(new Error('Request timeout'));
|
|
}, 30000);
|
|
});
|
|
}
|
|
};
|
|
|
|
// Inject the wallet API into the window object
|
|
window.aitbcWallet = aitbcWallet;
|
|
|
|
// Fire an event to notify the dApp that the wallet is ready
|
|
window.dispatchEvent(new Event('aitbcWalletReady'));
|
|
})();
|