@dropfi/xrpl-react 0.1.8 → 0.1.11
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/dist/index.cjs +55 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +55 -17
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -20,25 +20,63 @@ function useXrplReact() {
|
|
|
20
20
|
const [error, setError] = react.useState(null);
|
|
21
21
|
const [isConnecting, setIsConnecting] = react.useState(false);
|
|
22
22
|
react.useEffect(() => {
|
|
23
|
-
if (typeof window === 'undefined'
|
|
23
|
+
if (typeof window === 'undefined')
|
|
24
24
|
return;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
25
|
+
const POLL_INTERVAL_MS = 100;
|
|
26
|
+
const POLL_MAX_ATTEMPTS = 50; // 5 seconds total
|
|
27
|
+
let cancelled = false;
|
|
28
|
+
let attempt = 0;
|
|
29
|
+
const runInit = (xrpl) => {
|
|
30
|
+
if (!xrpl)
|
|
31
|
+
return;
|
|
32
|
+
const handleSelectedNetwork = (val) => setNetwork(val);
|
|
33
|
+
const handleSelectedAddress = (val) => setAddress(val);
|
|
34
|
+
const handleConnectedAccounts = (val) => setConnectedAccounts(val);
|
|
35
|
+
// 1) Sync current snapshot in case provider was already populated (e.g. from another tab or race)
|
|
36
|
+
if (xrpl.selectedAddress)
|
|
37
|
+
setAddress(xrpl.selectedAddress);
|
|
38
|
+
if (Array.isArray(xrpl.connectedAccounts) && xrpl.connectedAccounts.length > 0) {
|
|
39
|
+
setConnectedAccounts(xrpl.connectedAccounts);
|
|
40
|
+
}
|
|
41
|
+
if (xrpl.network)
|
|
42
|
+
setNetwork(xrpl.network);
|
|
43
|
+
// 2) Attach listeners
|
|
44
|
+
xrpl.on?.('xrpl_selectedNetwork', handleSelectedNetwork);
|
|
45
|
+
xrpl.on?.('xrpl_selectedAddress', handleSelectedAddress);
|
|
46
|
+
xrpl.on?.('xrpl_connectedAccounts', handleConnectedAccounts);
|
|
47
|
+
// 3) Request latest state from extension (will emit events and update snapshot)
|
|
48
|
+
xrpl.initialize?.();
|
|
49
|
+
setInitialized(true);
|
|
50
|
+
return () => {
|
|
51
|
+
xrpl.off?.('xrpl_selectedNetwork', handleSelectedNetwork);
|
|
52
|
+
xrpl.off?.('xrpl_selectedAddress', handleSelectedAddress);
|
|
53
|
+
xrpl.off?.('xrpl_connectedAccounts', handleConnectedAccounts);
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
const poll = () => {
|
|
57
|
+
if (cancelled)
|
|
58
|
+
return;
|
|
59
|
+
const xrpl = window.xrpl;
|
|
60
|
+
if (xrpl?.isDropFi) {
|
|
61
|
+
const teardown = runInit(xrpl);
|
|
62
|
+
return () => {
|
|
63
|
+
cancelled = true;
|
|
64
|
+
teardown?.();
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
attempt += 1;
|
|
68
|
+
if (attempt < POLL_MAX_ATTEMPTS) {
|
|
69
|
+
const id = window.setTimeout(poll, POLL_INTERVAL_MS);
|
|
70
|
+
return () => {
|
|
71
|
+
cancelled = true;
|
|
72
|
+
window.clearTimeout(id);
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return () => {
|
|
76
|
+
cancelled = true;
|
|
77
|
+
};
|
|
41
78
|
};
|
|
79
|
+
return poll();
|
|
42
80
|
}, []);
|
|
43
81
|
const connect = async () => {
|
|
44
82
|
setIsConnecting(true);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/provider.tsx","../src/useXrplReact.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nexport interface XrplProviderConfig {\n // Add any future config options here\n}\n\ninterface XrplContextValue {\n config?: XrplProviderConfig;\n}\n\nexport const XrplContext = createContext<XrplContextValue | null>(null);\n\nexport interface XrplProviderProps {\n config?: XrplProviderConfig;\n children: React.ReactNode;\n}\n\nexport const XrplProvider: React.FC<XrplProviderProps> = ({ config, children }) => {\n return <XrplContext.Provider value={{ config }}>{children}</XrplContext.Provider>;\n};\n","import { useContext, useEffect, useMemo, useState } from 'react';\nimport { XrplContext } from './provider';\n\nexport function useXrplReact() {\n
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/provider.tsx","../src/useXrplReact.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nexport interface XrplProviderConfig {\n // Add any future config options here\n}\n\ninterface XrplContextValue {\n config?: XrplProviderConfig;\n}\n\nexport const XrplContext = createContext<XrplContextValue | null>(null);\n\nexport interface XrplProviderProps {\n config?: XrplProviderConfig;\n children: React.ReactNode;\n}\n\nexport const XrplProvider: React.FC<XrplProviderProps> = ({ config, children }) => {\n return <XrplContext.Provider value={{ config }}>{children}</XrplContext.Provider>;\n};\n","import { useContext, useEffect, useMemo, useState } from 'react';\nimport { XrplContext } from './provider';\n\nexport function useXrplReact() {\n const context = useContext(XrplContext);\n if (!context) {\n throw new Error('useXrplReact must be used within a XrplProvider');\n }\n\n const [address, setAddress] = useState<string | undefined>();\n const [connectedAccounts, setConnectedAccounts] = useState<string[]>([]);\n const [network, setNetwork] = useState<string>('mainnet');\n const [initialized, setInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isConnecting, setIsConnecting] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const POLL_INTERVAL_MS = 100;\n const POLL_MAX_ATTEMPTS = 50; // 5 seconds total\n\n let cancelled = false;\n let attempt = 0;\n\n const runInit = (xrpl: typeof window.xrpl) => {\n if (!xrpl) return;\n\n const handleSelectedNetwork = (val: string) => setNetwork(val);\n const handleSelectedAddress = (val: string) => setAddress(val);\n const handleConnectedAccounts = (val: string[]) => setConnectedAccounts(val);\n\n // 1) Sync current snapshot in case provider was already populated (e.g. from another tab or race)\n if (xrpl.selectedAddress) setAddress(xrpl.selectedAddress);\n if (Array.isArray(xrpl.connectedAccounts) && xrpl.connectedAccounts.length > 0) {\n setConnectedAccounts(xrpl.connectedAccounts);\n }\n if (xrpl.network) setNetwork(xrpl.network);\n\n // 2) Attach listeners\n xrpl.on?.('xrpl_selectedNetwork', handleSelectedNetwork);\n xrpl.on?.('xrpl_selectedAddress', handleSelectedAddress);\n xrpl.on?.('xrpl_connectedAccounts', handleConnectedAccounts);\n\n // 3) Request latest state from extension (will emit events and update snapshot)\n xrpl.initialize?.();\n setInitialized(true);\n\n return () => {\n xrpl.off?.('xrpl_selectedNetwork', handleSelectedNetwork);\n xrpl.off?.('xrpl_selectedAddress', handleSelectedAddress);\n xrpl.off?.('xrpl_connectedAccounts', handleConnectedAccounts);\n };\n };\n\n const poll = () => {\n if (cancelled) return;\n const xrpl = window.xrpl;\n if (xrpl?.isDropFi) {\n const teardown = runInit(xrpl);\n return () => {\n cancelled = true;\n teardown?.();\n };\n }\n attempt += 1;\n if (attempt < POLL_MAX_ATTEMPTS) {\n const id = window.setTimeout(poll, POLL_INTERVAL_MS);\n return () => {\n cancelled = true;\n window.clearTimeout(id);\n };\n }\n return () => {\n cancelled = true;\n };\n };\n\n return poll();\n }, []);\n\n const connect = async () => {\n setIsConnecting(true);\n try {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n const response = await window.xrpl.connect();\n setAddress(response);\n return response;\n } catch (err: any) {\n setError(err.message);\n throw err;\n } finally {\n setIsConnecting(false);\n }\n };\n\n const disconnect = async () => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n await window.xrpl.disconnect(address);\n setAddress(undefined);\n };\n\n const sendTransaction = async (tx: any) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n return await window.xrpl.sendTransaction(tx);\n };\n\n const changeNetwork = async (network: string) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n return await window.xrpl.changeNetwork(network);\n };\n\n const signMessage = async (message: string) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n const res = await window.xrpl.signMessage(message);\n if (res.error) throw new Error(res.error);\n return res;\n };\n\n return useMemo(\n () => ({\n address,\n wallet: address,\n isConnected: connectedAccounts.includes(address || ''),\n connect,\n disconnect,\n sendTransaction,\n changeNetwork,\n connectedAccounts,\n network,\n error,\n isConnecting,\n signMessage,\n initialized,\n }),\n [address, connectedAccounts, network, error, isConnecting, initialized],\n );\n}\n"],"names":["createContext","_jsx","useContext","useState","useEffect","useMemo"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -18,25 +18,63 @@ function useXrplReact() {
|
|
|
18
18
|
const [error, setError] = useState(null);
|
|
19
19
|
const [isConnecting, setIsConnecting] = useState(false);
|
|
20
20
|
useEffect(() => {
|
|
21
|
-
if (typeof window === 'undefined'
|
|
21
|
+
if (typeof window === 'undefined')
|
|
22
22
|
return;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
23
|
+
const POLL_INTERVAL_MS = 100;
|
|
24
|
+
const POLL_MAX_ATTEMPTS = 50; // 5 seconds total
|
|
25
|
+
let cancelled = false;
|
|
26
|
+
let attempt = 0;
|
|
27
|
+
const runInit = (xrpl) => {
|
|
28
|
+
if (!xrpl)
|
|
29
|
+
return;
|
|
30
|
+
const handleSelectedNetwork = (val) => setNetwork(val);
|
|
31
|
+
const handleSelectedAddress = (val) => setAddress(val);
|
|
32
|
+
const handleConnectedAccounts = (val) => setConnectedAccounts(val);
|
|
33
|
+
// 1) Sync current snapshot in case provider was already populated (e.g. from another tab or race)
|
|
34
|
+
if (xrpl.selectedAddress)
|
|
35
|
+
setAddress(xrpl.selectedAddress);
|
|
36
|
+
if (Array.isArray(xrpl.connectedAccounts) && xrpl.connectedAccounts.length > 0) {
|
|
37
|
+
setConnectedAccounts(xrpl.connectedAccounts);
|
|
38
|
+
}
|
|
39
|
+
if (xrpl.network)
|
|
40
|
+
setNetwork(xrpl.network);
|
|
41
|
+
// 2) Attach listeners
|
|
42
|
+
xrpl.on?.('xrpl_selectedNetwork', handleSelectedNetwork);
|
|
43
|
+
xrpl.on?.('xrpl_selectedAddress', handleSelectedAddress);
|
|
44
|
+
xrpl.on?.('xrpl_connectedAccounts', handleConnectedAccounts);
|
|
45
|
+
// 3) Request latest state from extension (will emit events and update snapshot)
|
|
46
|
+
xrpl.initialize?.();
|
|
47
|
+
setInitialized(true);
|
|
48
|
+
return () => {
|
|
49
|
+
xrpl.off?.('xrpl_selectedNetwork', handleSelectedNetwork);
|
|
50
|
+
xrpl.off?.('xrpl_selectedAddress', handleSelectedAddress);
|
|
51
|
+
xrpl.off?.('xrpl_connectedAccounts', handleConnectedAccounts);
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
const poll = () => {
|
|
55
|
+
if (cancelled)
|
|
56
|
+
return;
|
|
57
|
+
const xrpl = window.xrpl;
|
|
58
|
+
if (xrpl?.isDropFi) {
|
|
59
|
+
const teardown = runInit(xrpl);
|
|
60
|
+
return () => {
|
|
61
|
+
cancelled = true;
|
|
62
|
+
teardown?.();
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
attempt += 1;
|
|
66
|
+
if (attempt < POLL_MAX_ATTEMPTS) {
|
|
67
|
+
const id = window.setTimeout(poll, POLL_INTERVAL_MS);
|
|
68
|
+
return () => {
|
|
69
|
+
cancelled = true;
|
|
70
|
+
window.clearTimeout(id);
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return () => {
|
|
74
|
+
cancelled = true;
|
|
75
|
+
};
|
|
39
76
|
};
|
|
77
|
+
return poll();
|
|
40
78
|
}, []);
|
|
41
79
|
const connect = async () => {
|
|
42
80
|
setIsConnecting(true);
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/provider.tsx","../src/useXrplReact.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nexport interface XrplProviderConfig {\n // Add any future config options here\n}\n\ninterface XrplContextValue {\n config?: XrplProviderConfig;\n}\n\nexport const XrplContext = createContext<XrplContextValue | null>(null);\n\nexport interface XrplProviderProps {\n config?: XrplProviderConfig;\n children: React.ReactNode;\n}\n\nexport const XrplProvider: React.FC<XrplProviderProps> = ({ config, children }) => {\n return <XrplContext.Provider value={{ config }}>{children}</XrplContext.Provider>;\n};\n","import { useContext, useEffect, useMemo, useState } from 'react';\nimport { XrplContext } from './provider';\n\nexport function useXrplReact() {\n
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/provider.tsx","../src/useXrplReact.tsx"],"sourcesContent":["import { createContext } from 'react';\n\nexport interface XrplProviderConfig {\n // Add any future config options here\n}\n\ninterface XrplContextValue {\n config?: XrplProviderConfig;\n}\n\nexport const XrplContext = createContext<XrplContextValue | null>(null);\n\nexport interface XrplProviderProps {\n config?: XrplProviderConfig;\n children: React.ReactNode;\n}\n\nexport const XrplProvider: React.FC<XrplProviderProps> = ({ config, children }) => {\n return <XrplContext.Provider value={{ config }}>{children}</XrplContext.Provider>;\n};\n","import { useContext, useEffect, useMemo, useState } from 'react';\nimport { XrplContext } from './provider';\n\nexport function useXrplReact() {\n const context = useContext(XrplContext);\n if (!context) {\n throw new Error('useXrplReact must be used within a XrplProvider');\n }\n\n const [address, setAddress] = useState<string | undefined>();\n const [connectedAccounts, setConnectedAccounts] = useState<string[]>([]);\n const [network, setNetwork] = useState<string>('mainnet');\n const [initialized, setInitialized] = useState(false);\n const [error, setError] = useState<string | null>(null);\n const [isConnecting, setIsConnecting] = useState(false);\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const POLL_INTERVAL_MS = 100;\n const POLL_MAX_ATTEMPTS = 50; // 5 seconds total\n\n let cancelled = false;\n let attempt = 0;\n\n const runInit = (xrpl: typeof window.xrpl) => {\n if (!xrpl) return;\n\n const handleSelectedNetwork = (val: string) => setNetwork(val);\n const handleSelectedAddress = (val: string) => setAddress(val);\n const handleConnectedAccounts = (val: string[]) => setConnectedAccounts(val);\n\n // 1) Sync current snapshot in case provider was already populated (e.g. from another tab or race)\n if (xrpl.selectedAddress) setAddress(xrpl.selectedAddress);\n if (Array.isArray(xrpl.connectedAccounts) && xrpl.connectedAccounts.length > 0) {\n setConnectedAccounts(xrpl.connectedAccounts);\n }\n if (xrpl.network) setNetwork(xrpl.network);\n\n // 2) Attach listeners\n xrpl.on?.('xrpl_selectedNetwork', handleSelectedNetwork);\n xrpl.on?.('xrpl_selectedAddress', handleSelectedAddress);\n xrpl.on?.('xrpl_connectedAccounts', handleConnectedAccounts);\n\n // 3) Request latest state from extension (will emit events and update snapshot)\n xrpl.initialize?.();\n setInitialized(true);\n\n return () => {\n xrpl.off?.('xrpl_selectedNetwork', handleSelectedNetwork);\n xrpl.off?.('xrpl_selectedAddress', handleSelectedAddress);\n xrpl.off?.('xrpl_connectedAccounts', handleConnectedAccounts);\n };\n };\n\n const poll = () => {\n if (cancelled) return;\n const xrpl = window.xrpl;\n if (xrpl?.isDropFi) {\n const teardown = runInit(xrpl);\n return () => {\n cancelled = true;\n teardown?.();\n };\n }\n attempt += 1;\n if (attempt < POLL_MAX_ATTEMPTS) {\n const id = window.setTimeout(poll, POLL_INTERVAL_MS);\n return () => {\n cancelled = true;\n window.clearTimeout(id);\n };\n }\n return () => {\n cancelled = true;\n };\n };\n\n return poll();\n }, []);\n\n const connect = async () => {\n setIsConnecting(true);\n try {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n const response = await window.xrpl.connect();\n setAddress(response);\n return response;\n } catch (err: any) {\n setError(err.message);\n throw err;\n } finally {\n setIsConnecting(false);\n }\n };\n\n const disconnect = async () => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n await window.xrpl.disconnect(address);\n setAddress(undefined);\n };\n\n const sendTransaction = async (tx: any) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n return await window.xrpl.sendTransaction(tx);\n };\n\n const changeNetwork = async (network: string) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n return await window.xrpl.changeNetwork(network);\n };\n\n const signMessage = async (message: string) => {\n if (!window.xrpl) throw new Error('No window.xrpl found');\n const res = await window.xrpl.signMessage(message);\n if (res.error) throw new Error(res.error);\n return res;\n };\n\n return useMemo(\n () => ({\n address,\n wallet: address,\n isConnected: connectedAccounts.includes(address || ''),\n connect,\n disconnect,\n sendTransaction,\n changeNetwork,\n connectedAccounts,\n network,\n error,\n isConnecting,\n signMessage,\n initialized,\n }),\n [address, connectedAccounts, network, error, isConnecting, initialized],\n );\n}\n"],"names":["_jsx"],"mappings":"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"}
|