bitcoin-wallet-connector 0.1.0 → 0.2.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 +24 -21
- package/lib/BitcoinConnectionProvider.d.ts +3 -3
- package/lib/BitcoinWalletConnector-BC92ulXx.js +2 -0
- package/lib/BitcoinWalletConnector-BC92ulXx.js.map +1 -0
- package/lib/{BitcoinWalletAdapterConnector-Bq835yj0.mjs → BitcoinWalletConnector-CS0BshOl.mjs} +11 -19
- package/lib/BitcoinWalletConnector-CS0BshOl.mjs.map +1 -0
- package/lib/{BitcoinWalletAdapterConnector.d.ts → BitcoinWalletConnector.d.ts} +4 -5
- package/lib/BitgetWalletAdapter.impl-D8kqiYDi.mjs +11 -0
- package/lib/BitgetWalletAdapter.impl-D8kqiYDi.mjs.map +1 -0
- package/lib/BitgetWalletAdapter.impl-DiyzNQ9d.js +2 -0
- package/lib/BitgetWalletAdapter.impl-DiyzNQ9d.js.map +1 -0
- package/lib/{LeatherWalletAdapter.impl-RUYx555r.mjs → LeatherWalletAdapter.impl-B1PoZS7z.mjs} +48 -37
- package/lib/LeatherWalletAdapter.impl-B1PoZS7z.mjs.map +1 -0
- package/lib/LeatherWalletAdapter.impl-BIWirus3.js +2 -0
- package/lib/LeatherWalletAdapter.impl-BIWirus3.js.map +1 -0
- package/lib/{MagicEdenWalletAdapter.impl-CrA6SGvG.mjs → MagicEdenWalletAdapter.impl-B3d5lbkD.mjs} +31 -20
- package/lib/MagicEdenWalletAdapter.impl-B3d5lbkD.mjs.map +1 -0
- package/lib/MagicEdenWalletAdapter.impl-DLBP3p4o.js +2 -0
- package/lib/MagicEdenWalletAdapter.impl-DLBP3p4o.js.map +1 -0
- package/lib/OkxWalletAdapter.impl-7cj96tmr.js +2 -0
- package/lib/OkxWalletAdapter.impl-7cj96tmr.js.map +1 -0
- package/lib/{OkxWalletAdapter.impl-BepoUL1B.mjs → OkxWalletAdapter.impl-nRgHsPTn.mjs} +13 -9
- package/lib/OkxWalletAdapter.impl-nRgHsPTn.mjs.map +1 -0
- package/lib/{UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs → UnisatCompatibleWalletAdapterImpl-8lRRF7Zj.mjs} +18 -10
- package/lib/UnisatCompatibleWalletAdapterImpl-8lRRF7Zj.mjs.map +1 -0
- package/lib/{UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js → UnisatCompatibleWalletAdapterImpl-C-JWrc9s.js} +2 -2
- package/lib/UnisatCompatibleWalletAdapterImpl-C-JWrc9s.js.map +1 -0
- package/lib/UnisatWalletAdapter.impl-DXDfnHz_.js +2 -0
- package/lib/UnisatWalletAdapter.impl-DXDfnHz_.js.map +1 -0
- package/lib/UnisatWalletAdapter.impl-DvA33Ikj.mjs +19 -0
- package/lib/UnisatWalletAdapter.impl-DvA33Ikj.mjs.map +1 -0
- package/lib/WalletAdapters.types-CExaiK0o.js +2 -0
- package/lib/WalletAdapters.types-CExaiK0o.js.map +1 -0
- package/lib/WalletAdapters.types-DBvhI1hu.mjs +20 -0
- package/lib/WalletAdapters.types-DBvhI1hu.mjs.map +1 -0
- package/lib/WalletAdapters.types.d.ts +7 -12
- package/lib/{XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js → XverseCompatibleWalletAdapterImpl-Dp_GUxQM.js} +2 -2
- package/lib/XverseCompatibleWalletAdapterImpl-Dp_GUxQM.js.map +1 -0
- package/lib/{XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs → XverseCompatibleWalletAdapterImpl-bgp9xDYH.mjs} +12 -8
- package/lib/XverseCompatibleWalletAdapterImpl-bgp9xDYH.mjs.map +1 -0
- package/lib/{XverseWalletAdapter.impl-CZO0RQva.mjs → XverseWalletAdapter.impl-BOpY4Vf8.mjs} +15 -15
- package/lib/XverseWalletAdapter.impl-BOpY4Vf8.mjs.map +1 -0
- package/lib/XverseWalletAdapter.impl-D0eOtEOa.js +2 -0
- package/lib/XverseWalletAdapter.impl-D0eOtEOa.js.map +1 -0
- package/lib/adapters/BitgetWalletAdapter.d.ts +6 -2
- package/lib/adapters/LeatherWalletAdapter.d.ts +4 -2
- package/lib/adapters/LeatherWalletAdapter.impl.d.ts +8 -1
- package/lib/adapters/MagicEdenWalletAdapter.d.ts +5 -2
- package/lib/adapters/MagicEdenWalletAdapter.impl.d.ts +1 -1
- package/lib/adapters/MockAddressWalletAdapter.d.ts +8 -32
- package/lib/adapters/OkxWalletAdapter.d.ts +3 -2
- package/lib/adapters/OkxWalletAdapter.impl.d.ts +5 -1
- package/lib/adapters/UnisatWalletAdapter.d.ts +3 -2
- package/lib/adapters/UnisatWalletAdapter.impl.d.ts +4 -0
- package/lib/adapters/XverseWalletAdapter.d.ts +3 -2
- package/lib/adapters/XverseWalletAdapter.impl.d.ts +1 -1
- package/lib/adapters/index.d.ts +6 -6
- package/lib/adapters.js +1 -1
- package/lib/adapters.mjs +8 -8
- package/lib/constants-B7qVf97f.mjs +5 -0
- package/lib/constants-B7qVf97f.mjs.map +1 -0
- package/lib/constants-Dr0_Mix2.js +2 -0
- package/lib/constants-Dr0_Mix2.js.map +1 -0
- package/lib/constants.d.ts +1 -0
- package/lib/{index-D7YwhNAG.mjs → index-DM4G-LJz.mjs} +639 -590
- package/lib/index-DM4G-LJz.mjs.map +1 -0
- package/lib/index-jRY8YhyK.js +2 -0
- package/lib/index-jRY8YhyK.js.map +1 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -1
- package/lib/index.mjs +13 -13
- package/lib/react.js +1 -1
- package/lib/react.js.map +1 -1
- package/lib/react.mjs +7 -7
- package/lib/react.mjs.map +1 -1
- package/lib/{transaction-CiLOYSE_.mjs → transaction-4ShhFCwN.mjs} +2 -2
- package/lib/{transaction-CiLOYSE_.mjs.map → transaction-4ShhFCwN.mjs.map} +1 -1
- package/lib/{transaction-CzdnbXSo.js → transaction-B6SlpRzN.js} +2 -2
- package/lib/{transaction-CzdnbXSo.js.map → transaction-B6SlpRzN.js.map} +1 -1
- package/lib/utils/UnisatCompatibleWalletAdapterImpl.d.ts +11 -3
- package/lib/utils/XverseCompatibleWalletAdapterImpl.d.ts +4 -0
- package/lib/utils/XverseCompatibleWalletAdapterImpl_legacy.d.ts +7 -2
- package/package.json +9 -10
- package/src/BitcoinConnectionProvider.stories.tsx +111 -43
- package/src/BitcoinConnectionProvider.tsx +5 -5
- package/src/{BitcoinWalletAdapterConnector.ts → BitcoinWalletConnector.ts} +18 -26
- package/src/WalletAdapters.types.ts +13 -22
- package/src/adapters/BitgetWalletAdapter.impl.ts +2 -1
- package/src/adapters/BitgetWalletAdapter.ts +9 -7
- package/src/adapters/LeatherWalletAdapter.impl.ts +23 -13
- package/src/adapters/LeatherWalletAdapter.ts +11 -8
- package/src/adapters/MagicEdenWalletAdapter.impl.ts +9 -8
- package/src/adapters/MagicEdenWalletAdapter.ts +17 -14
- package/src/adapters/MockAddressWalletAdapter.ts +61 -35
- package/src/adapters/OkxWalletAdapter.impl.ts +12 -7
- package/src/adapters/OkxWalletAdapter.ts +10 -7
- package/src/adapters/UnisatWalletAdapter.impl.ts +8 -2
- package/src/adapters/UnisatWalletAdapter.ts +9 -7
- package/src/adapters/XverseWalletAdapter.impl.ts +6 -6
- package/src/adapters/XverseWalletAdapter.ts +10 -7
- package/src/adapters/index.ts +6 -6
- package/src/constants.ts +1 -0
- package/src/index.ts +1 -1
- package/src/utils/UnisatCompatibleWalletAdapterImpl.ts +11 -2
- package/src/utils/XverseCompatibleWalletAdapterImpl.ts +4 -0
- package/src/utils/XverseCompatibleWalletAdapterImpl_legacy.ts +19 -7
- package/lib/BitcoinWalletAdapterConnector-Bq835yj0.mjs.map +0 -1
- package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js +0 -2
- package/lib/BitcoinWalletAdapterConnector-DMef0iHV.js.map +0 -1
- package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs +0 -10
- package/lib/BitgetWalletAdapter.impl-C_HLO7Oi.mjs.map +0 -1
- package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js +0 -2
- package/lib/BitgetWalletAdapter.impl-CxnKMf7U.js.map +0 -1
- package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js +0 -2
- package/lib/LeatherWalletAdapter.impl-B2QgX_tO.js.map +0 -1
- package/lib/LeatherWalletAdapter.impl-RUYx555r.mjs.map +0 -1
- package/lib/MagicEdenWalletAdapter.impl-CrA6SGvG.mjs.map +0 -1
- package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js +0 -2
- package/lib/MagicEdenWalletAdapter.impl-Di3Nu2S5.js.map +0 -1
- package/lib/OkxWalletAdapter.impl-BepoUL1B.mjs.map +0 -1
- package/lib/OkxWalletAdapter.impl-C8kesjGu.js +0 -2
- package/lib/OkxWalletAdapter.impl-C8kesjGu.js.map +0 -1
- package/lib/UnisatCompatibleWalletAdapterImpl-Cq2Oqk1b.js.map +0 -1
- package/lib/UnisatCompatibleWalletAdapterImpl-M38FqkZI.mjs.map +0 -1
- package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs +0 -14
- package/lib/UnisatWalletAdapter.impl-CJB22se8.mjs.map +0 -1
- package/lib/UnisatWalletAdapter.impl-EISvxdpc.js +0 -2
- package/lib/UnisatWalletAdapter.impl-EISvxdpc.js.map +0 -1
- package/lib/WalletAdapters.types-CnvOqHFH.mjs +0 -32
- package/lib/WalletAdapters.types-CnvOqHFH.mjs.map +0 -1
- package/lib/WalletAdapters.types-De_x1lzr.js +0 -2
- package/lib/WalletAdapters.types-De_x1lzr.js.map +0 -1
- package/lib/XverseCompatibleWalletAdapterImpl-Bf-BK5VK.js.map +0 -1
- package/lib/XverseCompatibleWalletAdapterImpl-DXKnO_-V.mjs.map +0 -1
- package/lib/XverseWalletAdapter.impl-CZO0RQva.mjs.map +0 -1
- package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js +0 -2
- package/lib/XverseWalletAdapter.impl-lJwMi-Iv.js.map +0 -1
- package/lib/index-D7YwhNAG.mjs.map +0 -1
- package/lib/index-Zx0KcpYx.js +0 -2
- package/lib/index-Zx0KcpYx.js.map +0 -1
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("./BitcoinWalletConnector-BC92ulXx.js"),t=require("./WalletAdapters.types-CExaiK0o.js"),e=require("./index-jRY8YhyK.js");exports.BitcoinWalletConnector=a.BitcoinWalletConnector;exports.SignMessageAlgorithm=t.SignMessageAlgorithm;exports.WalletAdapterAddressPurpose=t.WalletAdapterAddressPurpose;exports.WalletAdapterAddressType=t.WalletAdapterAddressType;exports.WalletAdapterBitcoinNetwork=t.WalletAdapterBitcoinNetwork;exports.WalletAdapterErrorBase=t.WalletAdapterErrorBase;exports.WalletAdapterNotConnectedError=t.WalletAdapterNotConnectedError;exports.BitgetWalletAdapterFactory=e.BitgetWalletAdapterFactory;exports.LeatherWalletAdapterFactory=e.LeatherWalletAdapterFactory;exports.MagicEdenWalletAdapterFactory=e.MagicEdenWalletAdapterFactory;exports.MockAddressWalletAdapterFactory=e.MockAddressWalletAdapterFactory;exports.OkxWalletAdapterFactory=e.OkxWalletAdapterFactory;exports.UnisatWalletAdapterFactory=e.UnisatWalletAdapterFactory;exports.XverseWalletAdapterFactory=e.XverseWalletAdapterFactory;
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
package/lib/index.mjs
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { B as t } from "./
|
|
2
|
-
import { S as l, a as s, b as
|
|
3
|
-
import { B as
|
|
1
|
+
import { B as t } from "./BitcoinWalletConnector-CS0BshOl.mjs";
|
|
2
|
+
import { S as l, a as s, b as o, W as d, c as p, d as A } from "./WalletAdapters.types-DBvhI1hu.mjs";
|
|
3
|
+
import { B as W, L as i, M as n, a as y, O as F, U as B, X as g } from "./index-DM4G-LJz.mjs";
|
|
4
4
|
export {
|
|
5
|
-
t as
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
t as BitcoinWalletConnector,
|
|
6
|
+
W as BitgetWalletAdapterFactory,
|
|
7
|
+
i as LeatherWalletAdapterFactory,
|
|
8
|
+
n as MagicEdenWalletAdapterFactory,
|
|
9
|
+
y as MockAddressWalletAdapterFactory,
|
|
10
|
+
F as OkxWalletAdapterFactory,
|
|
11
11
|
l as SignMessageAlgorithm,
|
|
12
|
-
|
|
12
|
+
B as UnisatWalletAdapterFactory,
|
|
13
13
|
s as WalletAdapterAddressPurpose,
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
o as WalletAdapterAddressType,
|
|
15
|
+
d as WalletAdapterBitcoinNetwork,
|
|
16
16
|
p as WalletAdapterErrorBase,
|
|
17
17
|
A as WalletAdapterNotConnectedError,
|
|
18
|
-
|
|
18
|
+
g as XverseWalletAdapterFactory
|
|
19
19
|
};
|
|
20
20
|
//# sourceMappingURL=index.mjs.map
|
package/lib/react.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("react/jsx-runtime"),t=require("react"),I=require("./
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const x=require("react/jsx-runtime"),t=require("react"),I=require("./BitcoinWalletConnector-BC92ulXx.js"),W=t.createContext(null);function A(e,s,c){const[l,a]=t.useState(s);return t.useEffect(()=>{const u=e(a);return()=>u.unsubscribe()},c),l}const S=e=>{const[s,c]=t.useState(!1),[l,a]=t.useState(null),u=g(e.onWalletConnected??f),h=g(e.onWalletAddressesChanged??f),v=g(e.onWalletDisconnected??f),n=t.useMemo(()=>new I.BitcoinWalletConnector(e.adapterFactories),[e.adapterFactories]);t.useEffect(()=>()=>{n.dispose()},[n]);const B=A(o=>n.subscribeAvailableAdapters(o),()=>n.getAvailableAdapters(),[n]),C=A(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:B}),[l,s,n,e.adapterFactories,B]);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 d={adapterId:i.adapterId,adapter:i.adapter,addresses:r};try{u(d)}catch(w){console.error("[BitcoinConnectionProvider] onWalletConnected error",w)}a(d),c(!1)}).catch(r=>{o.signal.aborted||(c(!1),console.error("[BitcoinConnectionProvider] connect error",r))})});return()=>{o.abort(),b.unsubscribe()}},[n,v,u]),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(d){console.error("[BitcoinConnectionProvider] onWalletAddressesChanged error",d)}return{...r,addresses:i}})});return()=>{o.abort(),b.unsubscribe()}},[C,h]),x.jsx(W.Provider,{value:P,children:e.children})};function F(){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=F;
|
|
2
2
|
//# sourceMappingURL=react.js.map
|
package/lib/react.js.map
CHANGED
|
@@ -1 +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 {
|
|
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 { BitcoinWalletConnector } from \"./BitcoinWalletConnector\"\nimport {\n WalletAdapter,\n WalletAdapterAddress,\n WalletAdapterFactory,\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: WalletAdapterFactory<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: WalletAdapterFactory<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 BitcoinWalletConnector(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","BitcoinWalletConnector","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
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as m } from "react/jsx-runtime";
|
|
2
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 "./
|
|
3
|
+
import { B as D } from "./BitcoinWalletConnector-CS0BshOl.mjs";
|
|
4
4
|
const x = p(null);
|
|
5
5
|
function w(e, c, r) {
|
|
6
6
|
const [a, i] = g(c);
|
|
@@ -10,9 +10,9 @@ function w(e, c, r) {
|
|
|
10
10
|
}, r), a;
|
|
11
11
|
}
|
|
12
12
|
const R = (e) => {
|
|
13
|
-
const [c, r] = g(!1), [a, i] = g(null), l = h(e.onWalletConnected ?? f),
|
|
13
|
+
const [c, r] = g(!1), [a, i] = g(null), l = h(e.onWalletConnected ?? f), v = h(
|
|
14
14
|
e.onWalletAddressesChanged ?? f
|
|
15
|
-
),
|
|
15
|
+
), A = h(e.onWalletDisconnected ?? f), n = W(
|
|
16
16
|
() => new D(e.adapterFactories),
|
|
17
17
|
[e.adapterFactories]
|
|
18
18
|
);
|
|
@@ -51,7 +51,7 @@ const R = (e) => {
|
|
|
51
51
|
const t = new AbortController(), b = n.subscribeConnectedInfo((s) => {
|
|
52
52
|
if (s == null) {
|
|
53
53
|
try {
|
|
54
|
-
|
|
54
|
+
A();
|
|
55
55
|
} catch (o) {
|
|
56
56
|
console.error(
|
|
57
57
|
"[BitcoinConnectionProvider] onWalletDisconnected error",
|
|
@@ -84,7 +84,7 @@ const R = (e) => {
|
|
|
84
84
|
return () => {
|
|
85
85
|
t.abort(), b.unsubscribe();
|
|
86
86
|
};
|
|
87
|
-
}, [n,
|
|
87
|
+
}, [n, A, l]), u(() => {
|
|
88
88
|
if (C == null) return;
|
|
89
89
|
const t = new AbortController(), b = C.adapter.onAddressesChanged(({ addresses: s }) => {
|
|
90
90
|
t.signal.aborted || i((o) => {
|
|
@@ -93,7 +93,7 @@ const R = (e) => {
|
|
|
93
93
|
"[BitcoinConnectionProvider] onWalletAddressesChanged event received while disconnected, skipping..."
|
|
94
94
|
), o;
|
|
95
95
|
try {
|
|
96
|
-
|
|
96
|
+
v(s);
|
|
97
97
|
} catch (d) {
|
|
98
98
|
console.error(
|
|
99
99
|
"[BitcoinConnectionProvider] onWalletAddressesChanged error",
|
|
@@ -106,7 +106,7 @@ const R = (e) => {
|
|
|
106
106
|
return () => {
|
|
107
107
|
t.abort(), b.unsubscribe();
|
|
108
108
|
};
|
|
109
|
-
}, [C,
|
|
109
|
+
}, [C, v]), /* @__PURE__ */ m(x.Provider, { value: I, children: e.children });
|
|
110
110
|
};
|
|
111
111
|
function V() {
|
|
112
112
|
const e = F(x);
|
package/lib/react.mjs.map
CHANGED
|
@@ -1 +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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"}
|
|
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 { BitcoinWalletConnector } from \"./BitcoinWalletConnector\"\nimport {\n WalletAdapter,\n WalletAdapterAddress,\n WalletAdapterFactory,\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: WalletAdapterFactory<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: WalletAdapterFactory<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 BitcoinWalletConnector(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","BitcoinWalletConnector","availableAdapters","listener","connectInfo","ctxValue","abortController","sub","info","e","addresses","err","prev","useBitcoinConnectionContext","ctx","useContext","fn","fnRef","useRef","useCallback","args"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { v as W, s as v,
|
|
1
|
+
import { v as W, s as v, t as b, u as E, R as Dt, w as _, x as q, y as N, I as Gt, h as I, z as L, A as J, C as gt, D as wt, P as X, E as P, F as jt, V as K, G as Y, H as Qt, J as M, K as Jt, N as Kt, Q as k, S as Tt, T as Xt, W as Vt, Y as Zt, Z as te, _ as ee, $ as B, a0 as bt, a1 as It, a2 as $, a3 as Yt, a4 as ne, a5 as U, a6 as Z, a7 as at, a8 as z, a9 as F, aa as ut, ab as ie, ac as V, ad as qt, ae as se, af as At, ag as oe, ah as re, ai as ae, aj as ue, ak as pe } from "./index-DM4G-LJz.mjs";
|
|
2
2
|
const ft = W(b(null), (n) => J(n, X.ecdsa)), nt = W(b(32), (n) => J(n, X.schnorr)), Ut = W(b(null), (n) => {
|
|
3
3
|
if (n.length !== 64 && n.length !== 65)
|
|
4
4
|
throw new Error("Schnorr signature should be 64 or 65 bytes long");
|
|
@@ -1060,4 +1060,4 @@ class Q {
|
|
|
1060
1060
|
export {
|
|
1061
1061
|
Q as T
|
|
1062
1062
|
};
|
|
1063
|
-
//# sourceMappingURL=transaction-
|
|
1063
|
+
//# sourceMappingURL=transaction-4ShhFCwN.mjs.map
|