@tomo-inc/inject-providers 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/README.md +58 -0
- package/eth-rpc-errors.d.ts +37 -0
- package/package.json +41 -0
- package/project.json +59 -0
- package/src/btc/index.ts +3 -0
- package/src/btc/types.ts +38 -0
- package/src/btc/unisat.ts +332 -0
- package/src/const.ts +0 -0
- package/src/dogecoin/dogecoin.ts +304 -0
- package/src/dogecoin/index.ts +3 -0
- package/src/dogecoin/types.ts +38 -0
- package/src/evm/index.ts +3 -0
- package/src/evm/messages.ts +39 -0
- package/src/evm/metamask.ts +890 -0
- package/src/evm/shimWeb3.ts +49 -0
- package/src/evm/type.ts +81 -0
- package/src/evm/utils.ts +85 -0
- package/src/global.d.ts +37 -0
- package/src/index.ts +7 -0
- package/src/solana/index.ts +3 -0
- package/src/solana/phantom.ts +424 -0
- package/src/solana/types.ts +63 -0
- package/src/solana/utils.ts +30 -0
- package/src/tron/index.ts +3 -0
- package/src/tron/tronLink.ts +341 -0
- package/src/tron/types.ts +56 -0
- package/src/types/dapp.ts +7 -0
- package/src/types/index.ts +34 -0
- package/src/utils/dapp-info.ts +96 -0
- package/src/utils/dom.ts +29 -0
- package/src/utils/index.ts +4 -0
- package/src/utils/ready-promise.ts +44 -0
- package/src/utils/utils.ts +23 -0
- package/src/utils.ts +35 -0
- package/tsconfig.json +7 -0
- package/tsup.config.ts +10 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
class ReadyPromise {
|
|
2
|
+
private _allCheck: boolean[] = [];
|
|
3
|
+
private _tasks: {
|
|
4
|
+
resolve(value: unknown): void;
|
|
5
|
+
fn(): Promise<any>;
|
|
6
|
+
}[] = [];
|
|
7
|
+
|
|
8
|
+
constructor(count: number) {
|
|
9
|
+
this._allCheck = [...Array(count)];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
check = (index: number) => {
|
|
13
|
+
this._allCheck[index - 1] = true;
|
|
14
|
+
this._proceed();
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
uncheck = (index: number) => {
|
|
18
|
+
this._allCheck[index - 1] = false;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
private _proceed = () => {
|
|
22
|
+
if (this._allCheck.some((_) => !_)) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
while (this._tasks.length) {
|
|
27
|
+
const { resolve, fn } = this._tasks.shift()!;
|
|
28
|
+
resolve(fn());
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
call = (fn: () => Promise<any>) => {
|
|
33
|
+
return new Promise((resolve) => {
|
|
34
|
+
this._tasks.push({
|
|
35
|
+
fn,
|
|
36
|
+
resolve,
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
this._proceed();
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export { ReadyPromise };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export function hexToUint8Array(hexString: string): Uint8Array {
|
|
2
|
+
const cleanHex = hexString.startsWith("0x") ? hexString.slice(2) : hexString;
|
|
3
|
+
|
|
4
|
+
if (cleanHex.length !== 128) {
|
|
5
|
+
throw new Error("Invalid signature length");
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const bytes = new Uint8Array(64);
|
|
9
|
+
for (let i = 0; i < 64; i++) {
|
|
10
|
+
bytes[i] = parseInt(cleanHex.slice(i * 2, i * 2 + 2), 16);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return bytes;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function isHexString(str: string): boolean {
|
|
17
|
+
const hexRegex = /^(0x)?[0-9a-fA-F]+$/;
|
|
18
|
+
return hexRegex.test(str);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export const guid = () => {
|
|
22
|
+
return "provider-" + (Math.random() * (1 << 30)).toString(16).replace(".", "");
|
|
23
|
+
};
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export const isMobile = () => {
|
|
2
|
+
return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
3
|
+
};
|
|
4
|
+
|
|
5
|
+
interface OpenWindow {
|
|
6
|
+
url: string;
|
|
7
|
+
name?: string;
|
|
8
|
+
width?: number;
|
|
9
|
+
height?: number;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export const openWindow = ({ url, name, width, height }: OpenWindow): Window | null => {
|
|
13
|
+
const top = (window.innerHeight - (height || 400)) / 2 + window.screenY;
|
|
14
|
+
const left = (window.innerWidth - (width || 400)) / 2 + window.screenX;
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
const relyWindow = window.open(
|
|
18
|
+
url,
|
|
19
|
+
name,
|
|
20
|
+
`dialog=yes,top=${top}px,left=${left},width=${width !== undefined ? width : 400}px,height=${height !== undefined ? height : 600}px`,
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
// Fallback to iframe modal if:
|
|
24
|
+
// 1. window.open is blocked by browser
|
|
25
|
+
// 2. iOS Safari requires user interaction for window.open
|
|
26
|
+
if (!relyWindow) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
return relyWindow;
|
|
31
|
+
} catch (error) {
|
|
32
|
+
console.error("Failed to open window:", error);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
};
|
package/tsconfig.json
ADDED