Skip to content

Commit 04c7775

Browse files
committed
Inject keplr provider
1 parent 2aff2b8 commit 04c7775

10 files changed

Lines changed: 1211 additions & 1 deletion

File tree

package-lock.json

Lines changed: 1104 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
}
2323
},
2424
"devDependencies": {
25+
"@keplr-wallet/types": "^0.11.12",
2526
"@parcel/config-webextension": "^2.4.1",
2627
"@parcel/runtime-browser-hmr": "^2.4.1",
2728
"@parcel/transformer-image": "^2.4.1",

src/background/messaging.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ socket.onopen = () => {
1111
};
1212

1313
socket.onmessage = e => {
14+
console.log({onmessage: e});
1415
const payload = JSON.parse(e.data);
1516

1617
console.log('Message from node: ', payload);
@@ -55,6 +56,7 @@ socket.onerror = err => {
5556
export const rpcListener = async (message: any) => {
5657
const messageId = uuid();
5758
let network;
59+
console.log({rpcListenerMsg: message});
5860
switch (message.__provider) {
5961
case 'eth':
6062
const globalChainId = (await browser.storage.local.get('chainIdGlobal'))
@@ -68,6 +70,11 @@ export const rpcListener = async (message: any) => {
6870
case 'solana':
6971
network = 'solana_devnet'; // TODO
7072
break;
73+
case 'keplr':
74+
// need to improve here
75+
network = 'cosmos_testnet';
76+
// config here
77+
break;
7178
default:
7279
throw new Error(`Unknown or missing provider type ${message.__provider}`);
7380
}

src/confirmation-window/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import App from './App';
44
import getSdk from 'pointsdk/pointsdk/sdk';
55
import getEthProvider from 'pointsdk/pointsdk/ethProvider';
66
import getSolanaProvider from 'pointsdk/pointsdk/solanaProvider';
7+
import getKeplrProvider from '../pointsdk/keplrProvider';
78
const version = browser.runtime.getManifest().version;
89
const point = getSdk('https://confirmation-window', version);
910
const ethereum = getEthProvider();
@@ -14,6 +15,7 @@ const renderWindow = () => {
1415
window.point = point;
1516
window.ethereum = ethereum;
1617
window.solana = solana;
18+
window.keplr = getKeplrProvider();
1719
ReactDOM.render(<App />, document.getElementById('point-confirmation-window'));
1820
} catch (e) {
1921
console.error('Failed to render confirmation window', e);

src/pointsdk/browser.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import getEthProvider from 'pointsdk/pointsdk/ethProvider';
33
import getSolanaProvider from 'pointsdk/pointsdk/solanaProvider';
44
import NETWORKS from 'pointsdk/constants/networks';
55
import swal from 'sweetalert2';
6+
import getKeplrProvider from './keplrProvider';
67

78
// eslint-disable-next-line prettier/prettier
89
window.point = getSdk(window.location.origin, String(process.env.PACKAGE_VERSION), swal);
910
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
1011
window.point.networks = NETWORKS;
1112
window.ethereum = getEthProvider();
1213
window.solana = getSolanaProvider();
14+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
15+
window.keplr = getKeplrProvider();

src/pointsdk/index.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import getSdk from 'pointsdk/pointsdk/sdk';
33
import getEthProvider from 'pointsdk/pointsdk/ethProvider';
44
import getSolanaProvider from 'pointsdk/pointsdk/solanaProvider';
55
import NETWORKS from 'pointsdk/constants/networks';
6+
import getKeplrProvider from './keplrProvider';
67

78
const version = browser.runtime.getManifest().version;
89
try {
@@ -25,3 +26,9 @@ try {
2526
} catch (e) {
2627
console.error('Failed to inject window.solana: ', e);
2728
}
29+
30+
try {
31+
window.wrappedJSObject.eval(`window.keplr = (${getKeplrProvider.toString()})();`);
32+
} catch (e) {
33+
console.error('Failed to inject window.solana: ', e);
34+
}

src/pointsdk/keplrProvider.ts

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
2+
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
3+
4+
export default function getKeplrProvider() {
5+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
6+
const handleRequest = (request: Record<string, any>) =>
7+
new Promise((resolve, reject) => {
8+
const id = Math.random();
9+
const handler = (e: MessageEvent) => {
10+
if (e.data.__page_req_id === id && e.data.__direction === 'to_page') {
11+
window.removeEventListener('message', handler);
12+
if (e.data.__error) {
13+
const {module, code, message} = e.data.__error;
14+
return reject({module, code, message});
15+
}
16+
delete e.data.__page_req_id;
17+
delete e.data.__direction;
18+
resolve(Object.keys(e.data).length > 0 ? e.data : undefined);
19+
}
20+
};
21+
22+
window.addEventListener('message', handler);
23+
24+
window.postMessage({
25+
...request,
26+
__message_type: 'rpc',
27+
__provider: 'keplr',
28+
__page_req_id: id,
29+
__direction: 'to_bg'
30+
});
31+
});
32+
return {
33+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
34+
enable: async function (chainIds: string | string[]) {
35+
return handleRequest({
36+
method: `keplr_enable as string}`,
37+
params: [chainIds]
38+
});
39+
},
40+
getKey: async function (chainId: string) {
41+
return handleRequest({
42+
method: 'keplr_getKey',
43+
params: [chainId]
44+
});
45+
}
46+
};
47+
// enable(chainIds: string | string[]): Promise<void>,
48+
// getKey(chainId: string): Promise<{
49+
// signAmino(chainId: string, signer: string, signDoc: StdSignDoc): Promise<AminoSignResponse>
50+
// signDirect(chainId:string, signer:string, signDoc: {
51+
// sendTx(
52+
// chainId: string,
53+
// tx: Uint8Array,
54+
// mode: BroadcastMode
55+
// ): Promise<Uint8Array>; {
56+
// handleRequest({
57+
// method: 'keplr_sendTx',
58+
// params: [[chainId, tx, mode].toJSON()]
59+
// })
60+
// resutl =await keplerClient[method.split("_")[1]] (...params)
61+
62+
// sendBack(result)
63+
64+
// }
65+
// signArbitrary(
66+
// chainId: string,
67+
// signer: string,
68+
// data: string | Uint8Array
69+
// ): Promise<StdSignature>;
70+
// verifyArbitrary(
71+
// chainId: string,
72+
// signer: string,
73+
// data: string | Uint8Array,
74+
// signature: StdSignature
75+
// ): Promise<boolean>;
76+
// };
77+
// signEthereum(
78+
// chainId: string,
79+
// signer: string, // Bech32 address, not hex
80+
// data: string | Uint8Array,
81+
// type: 'message' | 'transaction'
82+
// )
83+
}

src/pointsdk/pageMessaging.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ window.addEventListener('message', async e => {
55
if (
66
['rpc', 'registerHandler', 'setAuthToken', 'getAuthToken'].includes(e.data.__message_type)
77
) {
8+
console.log({eeeee: e});
89
const {__direction, __page_req_id, ...payload} = e.data;
910
try {
1011
const res = await browser.runtime.sendMessage({

src/pointsdk/sdk.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ const getSdk = (host: string, version: string, swal: any): PointType => {
3737
const gatewayAlert = async () => {
3838
swal.fire({
3939
title: 'Demo mode',
40-
html: `You cannot make writing operations right here but you can download Point Browser and have the full web3 experience.
40+
html: `You cannot make writing operations right here but you can download Point Browser and have the full web3 experience.
4141
<a href="https://pointnetwork.io/download" target="_blank" rel="noopener noreferrer">https://pointnetwork.io/download</a>`,
4242
icon: 'info'
4343
});
@@ -706,6 +706,7 @@ const getSdk = (host: string, version: string, swal: any): PointType => {
706706
send: window.top.IS_GATEWAY
707707
? gatewayAlert
708708
: async ({to, network, value}) => {
709+
console.log({to, network, value});
709710
const {networks, default_network} = await api.get('blockchain/networks');
710711
const chain = network ?? default_network;
711712
if (!networks[chain]) {

src/types/global.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,6 @@ declare global {
55
point: any;
66
ethereum: any;
77
solana: any;
8+
keplr: any;
89
}
910
}

0 commit comments

Comments
 (0)