bitcoin-wallet-connector 0.1.0
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/README.md +208 -0
- package/lib/BitcoinConnectionProvider.d.ts +23 -0
- package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs +123 -0
- package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs.map +1 -0
- package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js +2 -0
- package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js.map +1 -0
- package/lib/BitcoinWalletAdapterConnector.d.ts +30 -0
- package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs +10 -0
- package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs.map +1 -0
- package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js +2 -0
- package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js.map +1 -0
- package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js +2 -0
- package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js.map +1 -0
- package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs +184 -0
- package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs.map +1 -0
- package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs +235 -0
- package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs.map +1 -0
- package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js +2 -0
- package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js.map +1 -0
- package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs +67 -0
- package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs.map +1 -0
- package/lib/OkxWalletAdapter.impl-C8kesjGu.js +2 -0
- package/lib/OkxWalletAdapter.impl-C8kesjGu.js.map +1 -0
- package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js +2 -0
- package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map +1 -0
- package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs +137 -0
- package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map +1 -0
- package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs +14 -0
- package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs.map +1 -0
- package/lib/UnisatWalletAdapter.impl-EISvxdpc.js +2 -0
- package/lib/UnisatWalletAdapter.impl-EISvxdpc.js.map +1 -0
- package/lib/WalletAdapters.types-CnvOqHFH.mjs +32 -0
- package/lib/WalletAdapters.types-CnvOqHFH.mjs.map +1 -0
- package/lib/WalletAdapters.types-De_x1lzr.js +2 -0
- package/lib/WalletAdapters.types-De_x1lzr.js.map +1 -0
- package/lib/WalletAdapters.types.d.ts +110 -0
- package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js +2 -0
- package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map +1 -0
- package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs +151 -0
- package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map +1 -0
- package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs +105 -0
- package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs.map +1 -0
- package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js +2 -0
- package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js.map +1 -0
- package/lib/adapters/BitgetWalletAdapter.d.ts +2 -0
- package/lib/adapters/BitgetWalletAdapter.impl.d.ts +8 -0
- package/lib/adapters/LeatherWalletAdapter.d.ts +2 -0
- package/lib/adapters/LeatherWalletAdapter.impl.d.ts +41 -0
- package/lib/adapters/MagicEdenWalletAdapter.d.ts +11 -0
- package/lib/adapters/MagicEdenWalletAdapter.impl.d.ts +22 -0
- package/lib/adapters/MockAddressWalletAdapter.d.ts +33 -0
- package/lib/adapters/OkxWalletAdapter.d.ts +2 -0
- package/lib/adapters/OkxWalletAdapter.impl.d.ts +51 -0
- package/lib/adapters/UnisatWalletAdapter.d.ts +2 -0
- package/lib/adapters/UnisatWalletAdapter.impl.d.ts +14 -0
- package/lib/adapters/XverseWalletAdapter.d.ts +3 -0
- package/lib/adapters/XverseWalletAdapter.impl.d.ts +14 -0
- package/lib/adapters/index.d.ts +7 -0
- package/lib/adapters.js +2 -0
- package/lib/adapters.js.map +1 -0
- package/lib/adapters.mjs +11 -0
- package/lib/adapters.mjs.map +1 -0
- package/lib/bitget-C7oB4Ffq.mjs +5 -0
- package/lib/bitget-C7oB4Ffq.mjs.map +1 -0
- package/lib/bitget-DXnsxx_y.js +2 -0
- package/lib/bitget-DXnsxx_y.js.map +1 -0
- package/lib/index-CaV3F1Nm.js +424 -0
- package/lib/index-CaV3F1Nm.js.map +1 -0
- package/lib/index-CcQUdePc.mjs +12224 -0
- package/lib/index-CcQUdePc.mjs.map +1 -0
- package/lib/index-D7YwhNAG.mjs +3946 -0
- package/lib/index-D7YwhNAG.mjs.map +1 -0
- package/lib/index-Zx0KcpYx.js +2 -0
- package/lib/index-Zx0KcpYx.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -0
- package/lib/index.mjs +20 -0
- package/lib/index.mjs.map +1 -0
- package/lib/leather-BoQG_CPn.mjs +5 -0
- package/lib/leather-BoQG_CPn.mjs.map +1 -0
- package/lib/leather-DJ8nWmM8.js +2 -0
- package/lib/leather-DJ8nWmM8.js.map +1 -0
- package/lib/magiceden-B36CEQa6.js +2 -0
- package/lib/magiceden-B36CEQa6.js.map +1 -0
- package/lib/magiceden-Cg7d3agI.mjs +5 -0
- package/lib/magiceden-Cg7d3agI.mjs.map +1 -0
- package/lib/misc-B5EWO_dn.mjs +10 -0
- package/lib/misc-B5EWO_dn.mjs.map +1 -0
- package/lib/misc-CigR0RqC.js +2 -0
- package/lib/misc-CigR0RqC.js.map +1 -0
- package/lib/okx-ChwzM0dK.js +2 -0
- package/lib/okx-ChwzM0dK.js.map +1 -0
- package/lib/okx-DWbHwazu.mjs +5 -0
- package/lib/okx-DWbHwazu.mjs.map +1 -0
- package/lib/react.d.ts +2 -0
- package/lib/react.js +2 -0
- package/lib/react.js.map +1 -0
- package/lib/react.mjs +128 -0
- package/lib/react.mjs.map +1 -0
- package/lib/transaction-CiLOYSE_.mjs +1063 -0
- package/lib/transaction-CiLOYSE_.mjs.map +1 -0
- package/lib/transaction-CzdnbXSo.js +2 -0
- package/lib/transaction-CzdnbXSo.js.map +1 -0
- package/lib/unisat-BvZW5h0U.js +2 -0
- package/lib/unisat-BvZW5h0U.js.map +1 -0
- package/lib/unisat-pLgab4nG.mjs +5 -0
- package/lib/unisat-pLgab4nG.mjs.map +1 -0
- package/lib/utils/StateChannel.d.ts +14 -0
- package/lib/utils/UnisatCompatibleWalletAdapterImpl.d.ts +99 -0
- package/lib/utils/XverseCompatibleWalletAdapterImpl.d.ts +80 -0
- package/lib/utils/XverseCompatibleWalletAdapterImpl_legacy.d.ts +44 -0
- package/lib/utils/bitcoinAddressHelpers.d.ts +14 -0
- package/lib/utils/bitcoinNetworkHelpers.d.ts +4 -0
- package/lib/utils/createAdapterAvailability.d.ts +15 -0
- package/lib/utils/error.d.ts +6 -0
- package/lib/utils/misc.d.ts +3 -0
- package/lib/xverse-IKOHyGi-.js +2 -0
- package/lib/xverse-IKOHyGi-.js.map +1 -0
- package/lib/xverse-iHLNanCB.mjs +5 -0
- package/lib/xverse-iHLNanCB.mjs.map +1 -0
- package/package.json +86 -0
- package/src/BitcoinConnectionProvider.stories.tsx +329 -0
- package/src/BitcoinConnectionProvider.tsx +234 -0
- package/src/BitcoinWalletAdapterConnector.ts +166 -0
- package/src/WalletAdapters.types.ts +154 -0
- package/src/_/bitget.png +0 -0
- package/src/_/leather.svg +4 -0
- package/src/_/magiceden.png +0 -0
- package/src/_/okx.png +0 -0
- package/src/_/unisat.svg +31 -0
- package/src/_/xverse.png +0 -0
- package/src/adapters/BitgetWalletAdapter.impl.ts +22 -0
- package/src/adapters/BitgetWalletAdapter.ts +44 -0
- package/src/adapters/LeatherWalletAdapter.impl.ts +324 -0
- package/src/adapters/LeatherWalletAdapter.ts +35 -0
- package/src/adapters/MagicEdenWalletAdapter.impl.ts +139 -0
- package/src/adapters/MagicEdenWalletAdapter.ts +51 -0
- package/src/adapters/MockAddressWalletAdapter.ts +199 -0
- package/src/adapters/OkxWalletAdapter.impl.ts +168 -0
- package/src/adapters/OkxWalletAdapter.ts +37 -0
- package/src/adapters/UnisatWalletAdapter.impl.ts +32 -0
- package/src/adapters/UnisatWalletAdapter.ts +50 -0
- package/src/adapters/XverseWalletAdapter.impl.ts +150 -0
- package/src/adapters/XverseWalletAdapter.ts +37 -0
- package/src/adapters/index.ts +7 -0
- package/src/env.d.ts +9 -0
- package/src/index.ts +3 -0
- package/src/react.ts +9 -0
- package/src/utils/StateChannel.ts +39 -0
- package/src/utils/UnisatCompatibleWalletAdapterImpl.ts +342 -0
- package/src/utils/XverseCompatibleWalletAdapterImpl.ts +288 -0
- package/src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts +278 -0
- package/src/utils/bitcoinAddressHelpers.ts +132 -0
- package/src/utils/bitcoinNetworkHelpers.ts +17 -0
- package/src/utils/createAdapterAvailability.ts +92 -0
- package/src/utils/error.ts +13 -0
- package/src/utils/misc.ts +10 -0
package/lib/react.d.ts
ADDED
package/lib/react.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("react/jsx-runtime"),t=require("react"),I=require("./BitcoinWalletAdapterConnector-DMef0iHV.js"),W=t.createContext(null);function B(e,s,c){const[l,a]=t.useState(s);return t.useEffect(()=>{const d=e(a);return()=>d.unsubscribe()},c),l}const S=e=>{const[s,c]=t.useState(!1),[l,a]=t.useState(null),d=g(e.onWalletConnected??f),h=g(e.onWalletAddressesChanged??f),v=g(e.onWalletDisconnected??f),n=t.useMemo(()=>new I.BitcoinWalletAdapterConnector(e.adapterFactories),[e.adapterFactories]);t.useEffect(()=>()=>{n.dispose()},[n]);const A=B(o=>n.subscribeAvailableAdapters(o),()=>n.getAvailableAdapters(),[n]),C=B(o=>n.subscribeConnectedInfo(o),()=>n.getConnectedInfo(),[n]),P=t.useMemo(()=>({walletSession:l,isConnectionInitializing:s,connect:n.connect.bind(n),disconnect:n.disconnect.bind(n),adapterFactories:e.adapterFactories,availableAdapters:A}),[l,s,n,e.adapterFactories,A]);return t.useEffect(()=>{const o=new AbortController,b=n.subscribeConnectedInfo(i=>{if(i==null){try{v()}catch(r){console.error("[BitcoinConnectionProvider] onWalletDisconnected error",r)}a(null),c(!1);return}c(!0),i.adapter.getAddresses().then(r=>{if(o.signal.aborted)return;const u={adapterId:i.adapterId,adapter:i.adapter,addresses:r};try{d(u)}catch(w){console.error("[BitcoinConnectionProvider] onWalletConnected error",w)}a(u),c(!1)}).catch(r=>{o.signal.aborted||(c(!1),console.error("[BitcoinConnectionProvider] connect error",r))})});return()=>{o.abort(),b.unsubscribe()}},[n,v,d]),t.useEffect(()=>{if(C==null)return;const o=new AbortController,b=C.adapter.onAddressesChanged(({addresses:i})=>{o.signal.aborted||a(r=>{if(r==null)return console.warn("[BitcoinConnectionProvider] onWalletAddressesChanged event received while disconnected, skipping..."),r;try{h(i)}catch(u){console.error("[BitcoinConnectionProvider] onWalletAddressesChanged error",u)}return{...r,addresses:i}})});return()=>{o.abort(),b.unsubscribe()}},[C,h]),x.jsx(W.Provider,{value:P,children:e.children})};function p(){const e=t.useContext(W);if(!e)throw new Error("useBitcoinConnectionContext must be used within BitcoinConnectionProvider");return e}const f=()=>{},g=e=>{const s=t.useRef(e);return s.current=e,t.useCallback((...c)=>s.current(...c),[])};exports.BitcoinConnectionProvider=S;exports.useBitcoinConnectionContext=p;
|
|
2
|
+
//# sourceMappingURL=react.js.map
|
package/lib/react.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.js","sources":["../src/BitcoinConnectionProvider.tsx"],"sourcesContent":["import {\n createContext,\n FC,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { BitcoinWalletAdapterConnector } from \"./BitcoinWalletAdapterConnector\"\nimport {\n WalletAdapter,\n WalletAdapterAddress,\n WalletAdapterStatic,\n} from \"./WalletAdapters.types\"\n\nexport interface WalletSession {\n adapterId: string\n adapter: WalletAdapter\n addresses: WalletAdapterAddress[]\n}\n\nexport interface BitcoinConnectionContextValue {\n // Core connection state\n walletSession: null | WalletSession\n isConnectionInitializing: boolean\n connect: (adapterId: string, adapter: WalletAdapter) => Promise<void>\n disconnect: () => Promise<void>\n\n // Wallet management (for UI)\n adapterFactories: WalletAdapterStatic<WalletAdapter>[]\n availableAdapters: (readonly [adapterId: string, adapter: WalletAdapter])[]\n}\n\nconst BitcoinConnectionContext =\n createContext<null | BitcoinConnectionContextValue>(null)\n\nfunction useConnectorState<T>(\n subscribe: (listener: (value: T) => void) => { unsubscribe: () => void },\n getSnapshot: () => T,\n deps: ReadonlyArray<unknown>,\n): T {\n const [value, setValue] = useState(getSnapshot)\n\n useEffect(() => {\n const subscription = subscribe(setValue)\n return () => subscription.unsubscribe()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n\n return value\n}\n\nexport const BitcoinConnectionProvider: FC<{\n children: ReactNode\n adapterFactories: WalletAdapterStatic<WalletAdapter>[]\n onWalletConnected?: (session: WalletSession) => void\n onWalletAddressesChanged?: (addresses: WalletAdapterAddress[]) => void\n onWalletDisconnected?: () => void\n}> = props => {\n const [isConnectionInitializing, setIsConnectionInitializing] =\n useState(false)\n const [walletSession, setWalletSession] = useState<null | WalletSession>(null)\n\n const onWalletConnected = usePersistFn(props.onWalletConnected ?? noop)\n const onWalletAddressesChanged = usePersistFn(\n props.onWalletAddressesChanged ?? noop,\n )\n const onWalletDisconnected = usePersistFn(props.onWalletDisconnected ?? noop)\n\n const connector = useMemo(\n () => new BitcoinWalletAdapterConnector(props.adapterFactories),\n [props.adapterFactories],\n )\n\n useEffect(\n () => () => {\n connector.dispose()\n },\n [connector],\n )\n\n const availableAdapters = useConnectorState(\n listener => connector.subscribeAvailableAdapters(listener),\n () => connector.getAvailableAdapters(),\n [connector],\n )\n\n const connectInfo = useConnectorState(\n listener => connector.subscribeConnectedInfo(listener),\n () => connector.getConnectedInfo(),\n [connector],\n )\n\n const ctxValue = useMemo(\n (): BitcoinConnectionContextValue => ({\n walletSession,\n isConnectionInitializing,\n connect: connector.connect.bind(connector),\n disconnect: connector.disconnect.bind(connector),\n\n adapterFactories: props.adapterFactories,\n availableAdapters,\n }),\n [\n walletSession,\n isConnectionInitializing,\n connector,\n props.adapterFactories,\n availableAdapters,\n ],\n )\n\n useEffect(() => {\n const abortController = new AbortController()\n\n const sub = connector.subscribeConnectedInfo(info => {\n if (info == null) {\n try {\n onWalletDisconnected()\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletDisconnected error\",\n e,\n )\n }\n\n setWalletSession(null)\n setIsConnectionInitializing(false)\n return\n }\n\n setIsConnectionInitializing(true)\n info.adapter\n .getAddresses()\n .then(addresses => {\n if (abortController.signal.aborted) return\n\n const walletSession: WalletSession = {\n adapterId: info.adapterId,\n adapter: info.adapter,\n addresses,\n }\n\n try {\n onWalletConnected(walletSession)\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletConnected error\",\n e,\n )\n }\n\n setWalletSession(walletSession)\n setIsConnectionInitializing(false)\n })\n .catch(err => {\n if (abortController.signal.aborted) return\n setIsConnectionInitializing(false)\n console.error(\"[BitcoinConnectionProvider] connect error\", err)\n })\n })\n\n return () => {\n abortController.abort()\n sub.unsubscribe()\n }\n }, [connector, onWalletDisconnected, onWalletConnected])\n\n // Listen to address changes from wallet\n useEffect(() => {\n if (connectInfo == null) return\n\n const abortController = new AbortController()\n\n const sub = connectInfo.adapter.onAddressesChanged(({ addresses }) => {\n if (abortController.signal.aborted) return\n\n setWalletSession(prev => {\n if (prev == null) {\n console.warn(\n \"[BitcoinConnectionProvider] onWalletAddressesChanged event received while disconnected, skipping...\",\n )\n return prev\n }\n\n try {\n onWalletAddressesChanged(addresses)\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletAddressesChanged error\",\n e,\n )\n }\n\n return { ...prev, addresses }\n })\n })\n return () => {\n abortController.abort()\n sub.unsubscribe()\n }\n }, [connectInfo, onWalletAddressesChanged])\n\n return (\n <BitcoinConnectionContext.Provider value={ctxValue}>\n {props.children}\n </BitcoinConnectionContext.Provider>\n )\n}\n\nexport function useBitcoinConnectionContext(): BitcoinConnectionContextValue {\n const ctx = useContext(BitcoinConnectionContext)\n if (!ctx) {\n throw new Error(\n \"useBitcoinConnectionContext must be used within BitcoinConnectionProvider\",\n )\n }\n\n return ctx\n}\n\nconst noop = (): void => {}\n\nconst usePersistFn = <T extends (...args: any[]) => any>(\n fn: T,\n): ((...args: Parameters<T>) => ReturnType<T>) => {\n const fnRef = useRef(fn)\n fnRef.current = fn\n\n return useCallback((...args) => fnRef.current(...args), [])\n}\n"],"names":["BitcoinConnectionContext","createContext","useConnectorState","subscribe","getSnapshot","deps","value","setValue","useState","useEffect","subscription","BitcoinConnectionProvider","props","isConnectionInitializing","setIsConnectionInitializing","walletSession","setWalletSession","onWalletConnected","usePersistFn","noop","onWalletAddressesChanged","onWalletDisconnected","connector","useMemo","BitcoinWalletAdapterConnector","availableAdapters","listener","connectInfo","ctxValue","abortController","sub","info","e","addresses","err","prev","useBitcoinConnectionContext","ctx","useContext","fn","fnRef","useRef","useCallback","args"],"mappings":"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"}
|
package/lib/react.mjs
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { jsx as m } from "react/jsx-runtime";
|
|
2
|
+
import { createContext as p, useState as g, useMemo as W, useEffect as u, useContext as F, useRef as S, useCallback as y } from "react";
|
|
3
|
+
import { B as D } from "./BitcoinWalletAdapterConnector-Bq835yj0.mjs";
|
|
4
|
+
const x = p(null);
|
|
5
|
+
function w(e, c, r) {
|
|
6
|
+
const [a, i] = g(c);
|
|
7
|
+
return u(() => {
|
|
8
|
+
const l = e(i);
|
|
9
|
+
return () => l.unsubscribe();
|
|
10
|
+
}, r), a;
|
|
11
|
+
}
|
|
12
|
+
const R = (e) => {
|
|
13
|
+
const [c, r] = g(!1), [a, i] = g(null), l = h(e.onWalletConnected ?? f), A = h(
|
|
14
|
+
e.onWalletAddressesChanged ?? f
|
|
15
|
+
), v = h(e.onWalletDisconnected ?? f), n = W(
|
|
16
|
+
() => new D(e.adapterFactories),
|
|
17
|
+
[e.adapterFactories]
|
|
18
|
+
);
|
|
19
|
+
u(
|
|
20
|
+
() => () => {
|
|
21
|
+
n.dispose();
|
|
22
|
+
},
|
|
23
|
+
[n]
|
|
24
|
+
);
|
|
25
|
+
const B = w(
|
|
26
|
+
(t) => n.subscribeAvailableAdapters(t),
|
|
27
|
+
() => n.getAvailableAdapters(),
|
|
28
|
+
[n]
|
|
29
|
+
), C = w(
|
|
30
|
+
(t) => n.subscribeConnectedInfo(t),
|
|
31
|
+
() => n.getConnectedInfo(),
|
|
32
|
+
[n]
|
|
33
|
+
), I = W(
|
|
34
|
+
() => ({
|
|
35
|
+
walletSession: a,
|
|
36
|
+
isConnectionInitializing: c,
|
|
37
|
+
connect: n.connect.bind(n),
|
|
38
|
+
disconnect: n.disconnect.bind(n),
|
|
39
|
+
adapterFactories: e.adapterFactories,
|
|
40
|
+
availableAdapters: B
|
|
41
|
+
}),
|
|
42
|
+
[
|
|
43
|
+
a,
|
|
44
|
+
c,
|
|
45
|
+
n,
|
|
46
|
+
e.adapterFactories,
|
|
47
|
+
B
|
|
48
|
+
]
|
|
49
|
+
);
|
|
50
|
+
return u(() => {
|
|
51
|
+
const t = new AbortController(), b = n.subscribeConnectedInfo((s) => {
|
|
52
|
+
if (s == null) {
|
|
53
|
+
try {
|
|
54
|
+
v();
|
|
55
|
+
} catch (o) {
|
|
56
|
+
console.error(
|
|
57
|
+
"[BitcoinConnectionProvider] onWalletDisconnected error",
|
|
58
|
+
o
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
i(null), r(!1);
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
r(!0), s.adapter.getAddresses().then((o) => {
|
|
65
|
+
if (t.signal.aborted) return;
|
|
66
|
+
const d = {
|
|
67
|
+
adapterId: s.adapterId,
|
|
68
|
+
adapter: s.adapter,
|
|
69
|
+
addresses: o
|
|
70
|
+
};
|
|
71
|
+
try {
|
|
72
|
+
l(d);
|
|
73
|
+
} catch (P) {
|
|
74
|
+
console.error(
|
|
75
|
+
"[BitcoinConnectionProvider] onWalletConnected error",
|
|
76
|
+
P
|
|
77
|
+
);
|
|
78
|
+
}
|
|
79
|
+
i(d), r(!1);
|
|
80
|
+
}).catch((o) => {
|
|
81
|
+
t.signal.aborted || (r(!1), console.error("[BitcoinConnectionProvider] connect error", o));
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
return () => {
|
|
85
|
+
t.abort(), b.unsubscribe();
|
|
86
|
+
};
|
|
87
|
+
}, [n, v, l]), u(() => {
|
|
88
|
+
if (C == null) return;
|
|
89
|
+
const t = new AbortController(), b = C.adapter.onAddressesChanged(({ addresses: s }) => {
|
|
90
|
+
t.signal.aborted || i((o) => {
|
|
91
|
+
if (o == null)
|
|
92
|
+
return console.warn(
|
|
93
|
+
"[BitcoinConnectionProvider] onWalletAddressesChanged event received while disconnected, skipping..."
|
|
94
|
+
), o;
|
|
95
|
+
try {
|
|
96
|
+
A(s);
|
|
97
|
+
} catch (d) {
|
|
98
|
+
console.error(
|
|
99
|
+
"[BitcoinConnectionProvider] onWalletAddressesChanged error",
|
|
100
|
+
d
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
return { ...o, addresses: s };
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
return () => {
|
|
107
|
+
t.abort(), b.unsubscribe();
|
|
108
|
+
};
|
|
109
|
+
}, [C, A]), /* @__PURE__ */ m(x.Provider, { value: I, children: e.children });
|
|
110
|
+
};
|
|
111
|
+
function V() {
|
|
112
|
+
const e = F(x);
|
|
113
|
+
if (!e)
|
|
114
|
+
throw new Error(
|
|
115
|
+
"useBitcoinConnectionContext must be used within BitcoinConnectionProvider"
|
|
116
|
+
);
|
|
117
|
+
return e;
|
|
118
|
+
}
|
|
119
|
+
const f = () => {
|
|
120
|
+
}, h = (e) => {
|
|
121
|
+
const c = S(e);
|
|
122
|
+
return c.current = e, y((...r) => c.current(...r), []);
|
|
123
|
+
};
|
|
124
|
+
export {
|
|
125
|
+
R as BitcoinConnectionProvider,
|
|
126
|
+
V as useBitcoinConnectionContext
|
|
127
|
+
};
|
|
128
|
+
//# sourceMappingURL=react.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"react.mjs","sources":["../src/BitcoinConnectionProvider.tsx"],"sourcesContent":["import {\n createContext,\n FC,\n ReactNode,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\"\nimport { BitcoinWalletAdapterConnector } from \"./BitcoinWalletAdapterConnector\"\nimport {\n WalletAdapter,\n WalletAdapterAddress,\n WalletAdapterStatic,\n} from \"./WalletAdapters.types\"\n\nexport interface WalletSession {\n adapterId: string\n adapter: WalletAdapter\n addresses: WalletAdapterAddress[]\n}\n\nexport interface BitcoinConnectionContextValue {\n // Core connection state\n walletSession: null | WalletSession\n isConnectionInitializing: boolean\n connect: (adapterId: string, adapter: WalletAdapter) => Promise<void>\n disconnect: () => Promise<void>\n\n // Wallet management (for UI)\n adapterFactories: WalletAdapterStatic<WalletAdapter>[]\n availableAdapters: (readonly [adapterId: string, adapter: WalletAdapter])[]\n}\n\nconst BitcoinConnectionContext =\n createContext<null | BitcoinConnectionContextValue>(null)\n\nfunction useConnectorState<T>(\n subscribe: (listener: (value: T) => void) => { unsubscribe: () => void },\n getSnapshot: () => T,\n deps: ReadonlyArray<unknown>,\n): T {\n const [value, setValue] = useState(getSnapshot)\n\n useEffect(() => {\n const subscription = subscribe(setValue)\n return () => subscription.unsubscribe()\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps)\n\n return value\n}\n\nexport const BitcoinConnectionProvider: FC<{\n children: ReactNode\n adapterFactories: WalletAdapterStatic<WalletAdapter>[]\n onWalletConnected?: (session: WalletSession) => void\n onWalletAddressesChanged?: (addresses: WalletAdapterAddress[]) => void\n onWalletDisconnected?: () => void\n}> = props => {\n const [isConnectionInitializing, setIsConnectionInitializing] =\n useState(false)\n const [walletSession, setWalletSession] = useState<null | WalletSession>(null)\n\n const onWalletConnected = usePersistFn(props.onWalletConnected ?? noop)\n const onWalletAddressesChanged = usePersistFn(\n props.onWalletAddressesChanged ?? noop,\n )\n const onWalletDisconnected = usePersistFn(props.onWalletDisconnected ?? noop)\n\n const connector = useMemo(\n () => new BitcoinWalletAdapterConnector(props.adapterFactories),\n [props.adapterFactories],\n )\n\n useEffect(\n () => () => {\n connector.dispose()\n },\n [connector],\n )\n\n const availableAdapters = useConnectorState(\n listener => connector.subscribeAvailableAdapters(listener),\n () => connector.getAvailableAdapters(),\n [connector],\n )\n\n const connectInfo = useConnectorState(\n listener => connector.subscribeConnectedInfo(listener),\n () => connector.getConnectedInfo(),\n [connector],\n )\n\n const ctxValue = useMemo(\n (): BitcoinConnectionContextValue => ({\n walletSession,\n isConnectionInitializing,\n connect: connector.connect.bind(connector),\n disconnect: connector.disconnect.bind(connector),\n\n adapterFactories: props.adapterFactories,\n availableAdapters,\n }),\n [\n walletSession,\n isConnectionInitializing,\n connector,\n props.adapterFactories,\n availableAdapters,\n ],\n )\n\n useEffect(() => {\n const abortController = new AbortController()\n\n const sub = connector.subscribeConnectedInfo(info => {\n if (info == null) {\n try {\n onWalletDisconnected()\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletDisconnected error\",\n e,\n )\n }\n\n setWalletSession(null)\n setIsConnectionInitializing(false)\n return\n }\n\n setIsConnectionInitializing(true)\n info.adapter\n .getAddresses()\n .then(addresses => {\n if (abortController.signal.aborted) return\n\n const walletSession: WalletSession = {\n adapterId: info.adapterId,\n adapter: info.adapter,\n addresses,\n }\n\n try {\n onWalletConnected(walletSession)\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletConnected error\",\n e,\n )\n }\n\n setWalletSession(walletSession)\n setIsConnectionInitializing(false)\n })\n .catch(err => {\n if (abortController.signal.aborted) return\n setIsConnectionInitializing(false)\n console.error(\"[BitcoinConnectionProvider] connect error\", err)\n })\n })\n\n return () => {\n abortController.abort()\n sub.unsubscribe()\n }\n }, [connector, onWalletDisconnected, onWalletConnected])\n\n // Listen to address changes from wallet\n useEffect(() => {\n if (connectInfo == null) return\n\n const abortController = new AbortController()\n\n const sub = connectInfo.adapter.onAddressesChanged(({ addresses }) => {\n if (abortController.signal.aborted) return\n\n setWalletSession(prev => {\n if (prev == null) {\n console.warn(\n \"[BitcoinConnectionProvider] onWalletAddressesChanged event received while disconnected, skipping...\",\n )\n return prev\n }\n\n try {\n onWalletAddressesChanged(addresses)\n } catch (e) {\n console.error(\n \"[BitcoinConnectionProvider] onWalletAddressesChanged error\",\n e,\n )\n }\n\n return { ...prev, addresses }\n })\n })\n return () => {\n abortController.abort()\n sub.unsubscribe()\n }\n }, [connectInfo, onWalletAddressesChanged])\n\n return (\n <BitcoinConnectionContext.Provider value={ctxValue}>\n {props.children}\n </BitcoinConnectionContext.Provider>\n )\n}\n\nexport function useBitcoinConnectionContext(): BitcoinConnectionContextValue {\n const ctx = useContext(BitcoinConnectionContext)\n if (!ctx) {\n throw new Error(\n \"useBitcoinConnectionContext must be used within BitcoinConnectionProvider\",\n )\n }\n\n return ctx\n}\n\nconst noop = (): void => {}\n\nconst usePersistFn = <T extends (...args: any[]) => any>(\n fn: T,\n): ((...args: Parameters<T>) => ReturnType<T>) => {\n const fnRef = useRef(fn)\n fnRef.current = fn\n\n return useCallback((...args) => fnRef.current(...args), [])\n}\n"],"names":["BitcoinConnectionContext","createContext","useConnectorState","subscribe","getSnapshot","deps","value","setValue","useState","useEffect","subscription","BitcoinConnectionProvider","props","isConnectionInitializing","setIsConnectionInitializing","walletSession","setWalletSession","onWalletConnected","usePersistFn","noop","onWalletAddressesChanged","onWalletDisconnected","connector","useMemo","BitcoinWalletAdapterConnector","availableAdapters","listener","connectInfo","ctxValue","abortController","sub","info","e","addresses","err","prev","useBitcoinConnectionContext","ctx","useContext","fn","fnRef","useRef","useCallback","args"],"mappings":"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"}
|