@satoshai/kit 0.4.0 → 0.4.1
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 +15 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -286,6 +286,7 @@ var StacksWalletProvider = ({
|
|
|
286
286
|
const [provider, setProvider] = react.useState();
|
|
287
287
|
const [isConnecting, setIsConnecting] = react.useState(false);
|
|
288
288
|
const connectGenRef = react.useRef(0);
|
|
289
|
+
const wasConnectedRef = react.useRef(false);
|
|
289
290
|
const wcInitRef = react.useRef(null);
|
|
290
291
|
const walletConnectRef = react.useRef(walletConnect);
|
|
291
292
|
walletConnectRef.current = walletConnect;
|
|
@@ -509,8 +510,11 @@ var StacksWalletProvider = ({
|
|
|
509
510
|
);
|
|
510
511
|
}, [address, provider]);
|
|
511
512
|
react.useEffect(() => {
|
|
512
|
-
|
|
513
|
-
|
|
513
|
+
const isConnected = !!address && !!provider;
|
|
514
|
+
if (isConnected && !wasConnectedRef.current) {
|
|
515
|
+
onConnect?.(provider, address);
|
|
516
|
+
}
|
|
517
|
+
wasConnectedRef.current = isConnected;
|
|
514
518
|
}, [address, provider, onConnect]);
|
|
515
519
|
const handleAddressChange = react.useCallback(
|
|
516
520
|
(newAddress) => {
|
|
@@ -864,20 +868,28 @@ var useBnsName = (address) => {
|
|
|
864
868
|
setIsLoading(false);
|
|
865
869
|
return;
|
|
866
870
|
}
|
|
871
|
+
let cancelled = false;
|
|
867
872
|
const fetchBnsName = async () => {
|
|
868
873
|
setIsLoading(true);
|
|
869
874
|
try {
|
|
870
875
|
const network = getNetworkFromAddress(address);
|
|
871
876
|
const result = await bnsV2Sdk.getPrimaryName({ address, network });
|
|
877
|
+
if (cancelled) return;
|
|
872
878
|
const fullName = result ? `${result.name}.${result.namespace}` : null;
|
|
873
879
|
setBnsName(fullName);
|
|
874
880
|
} catch {
|
|
881
|
+
if (cancelled) return;
|
|
875
882
|
setBnsName(null);
|
|
876
883
|
} finally {
|
|
877
|
-
|
|
884
|
+
if (!cancelled) {
|
|
885
|
+
setIsLoading(false);
|
|
886
|
+
}
|
|
878
887
|
}
|
|
879
888
|
};
|
|
880
889
|
void fetchBnsName();
|
|
890
|
+
return () => {
|
|
891
|
+
cancelled = true;
|
|
892
|
+
};
|
|
881
893
|
}, [address]);
|
|
882
894
|
return { bnsName, isLoading };
|
|
883
895
|
};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts"],"names":["WalletConnect","getSelectedProvider","connect","useState","useEffect","DEFAULT_PROVIDERS","WALLET_CONNECT_PROVIDER","createContext","useRef","setSelectedProviderId","useCallback","gen","clearSelectedProviderId","wc","request","getSelectedProviderId","data","useMemo","jsx","useContext","error","postConditionToHex","cvToHex","response","PostConditionMode","getPrimaryName"],"mappings":";;;;;;;;;AAEO,IAAM,kCAAA,GAQT;AAAA,EACF,MAAA,EAAQ,iCAAA;AAAA,EACR,OAAA,EAAS,iBAAA;AAAA,EACT,GAAA,EAAK,mBAAA;AAAA,EACL,MAAA,EAAQ,gBAAA;AAAA,EACR,OAAA,EAAS,+BAAA;AAAA,EACT,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,qCAAqC,MAAA,CAAO,WAAA;AAAA,EACvD,MAAA,CAAO,QAAQ,kCAAkC,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,OAAO,CAAA,KAAM;AAAA,IACzE,OAAA;AAAA,IACA;AAAA,GACD;AACH,CAAA;;;ACxBO,IAAM,oBAAA,GAAuB,eAAA;;;ACA7B,IAAM,wBAAA,GAA2B;AAAA,EACtC,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF;;;ACGO,IAAM,mBAAmB,MAAqB;AACjD,EAAA,MAAM,SAAA,GAAY,CAAC,GAAG,wBAAwB,CAAA;AAC9C,EAAA,MAAM,YAAY,SAAA,CAAU,MAAA;AAAA,IAAO,CAAC,MAAA,KAChC,gCAAA,CAAiC,MAAM;AAAA,GAC3C;AAEA,EAAA,OAAO,EAAE,WAAW,SAAA,EAAU;AAClC;AAEO,IAAM,gCAAA,GAAmC,CAC5C,MAAA,KACU;AACV,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA,KAAW,gBAAA;AAGrD,EAAA,QAAQ,MAAA;AAAQ,IACZ,KAAK,QAAA;AACD,MAAA,OAAO,CAAC,CAAE,MAAA,CAAe,eAAA;AAAA,IAC7B,KAAK,SAAA;AACD,MAAA,OACI,CAAC,CAAE,MAAA,CAAe,eAAA,IAClB,CAAC,CAAE,MAAA,CAAe,kBAAA;AAAA,IAE1B,KAAK,QAAA;AACD,MAAA,OAAO,CAAC,CAAE,MAAA,CAAe,cAAA;AAAA,IAC7B,KAAK,KAAA;AACD,MAAA,OAAO,CAAC,CAAE,MAAA,CAAe,SAAA;AAAA,IAC7B,KAAK,SAAA;AACD,MAAA,OAAO,CAAC,CAAE,MAAA,CAAe,gBAAA,EAAkB,YAAA;AAAA,IAC/C,KAAK,gBAAA;AACD,MAAA,OAAO,IAAA;AAAA;AAGnB,CAAA;ACnCA,IAAM,oBAAA,GAAuB;AAAA,EACzB,OAAA,EAASA,qBAAA,CAAc,MAAA,CAAO,MAAA,CAAO,OAAA;AAAA,EACrC,OAAA,EAASA,qBAAA,CAAc,MAAA,CAAO,MAAA,CAAO;AACzC,CAAA;AAEO,IAAM,wBAAA,GAA2B,CACpC,SAAA,EACA,QAAA,EACA,MAAA,KAKC;AACD,EAAA,MAAM,cAAA,GAAiB,MAAA,IAAU,CAAC,SAAS,CAAA;AAC3C,EAAA,MAAM,sBAAsB,cAAA,CAAe,GAAA;AAAA,IACvC,CAAC,KAAA,KAAU,oBAAA,CAAqB,KAAK;AAAA,GACzC;AAEA,EAAA,OAAO;AAAA,IACH,SAAA;AAAA,IACA,QAAA,EAAU;AAAA,MACN,IAAA,EAAM,qBAAA;AAAA,MACN,WAAA,EAAa,qBAAA;AAAA,MACb,GAAA,EAAK,0BAAA;AAAA,MACL,KAAA,EAAO,CAAC,mCAAmC,CAAA;AAAA,MAC3C,GAAG;AAAA,KACP;AAAA,IACA,QAAA,EAAU;AAAA,MACN;AAAA,QACI,GAAGA,sBAAc,QAAA,CAAS,MAAA;AAAA,QAC1B,MAAA,EAAQ;AAAA;AACZ;AACJ,GACJ;AACJ,CAAA;AAEO,IAAM,sBAAsB,YAAY;AAC3C,EAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACnB,IAAA,MAAM,IAAI,MAAM,uCAAgC,CAAA;AAAA,EACpD;AAEA,EAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,SAAA,CAAU,OAAO,OAAA,EAAQ;AAE7D,EAAA,IAAI,CAAC,cAAA,EAAgB;AACjB,IAAA,MAAM,IAAI,MAAM,6CAAsC,CAAA;AAAA,EAC1D;AAEA,EAAA,OAAO;AAAA,IACH,SAAS,cAAA,CAAe,OAAA;AAAA,IACxB,QAAA,EAAU;AAAA,GACd;AACJ,CAAA;AAOO,IAAM,iBAAA,GAAkC;AAAA,EAC3C,EAAA,EAAI,mBAAA;AAAA,EACJ,IAAA,EAAM,YAAA;AAAA,EACN,IAAA,EAAM,w0DAAA;AAAA,EACN,MAAA,EAAQ;AACZ,CAAA;AASO,IAAM,sBAAsB,MAAM;AACrC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,EAAA,IAAI,CAAE,OAAe,iBAAA,EAAmB;AACpC,IAAC,OAAe,iBAAA,GAAoB;AAAA,MAChC,OAAA,EAAS,OAAO,MAAA,KAAmB;AAC/B,QAAA,IAAI,WAAW,cAAA,EAAgB;AAC3B,UAAA,MAAM,IAAA,GAAO,MAAM,mBAAA,EAAoB;AACvC,UAAA,OAAO;AAAA,YACH,MAAA,EAAQ;AAAA,cACJ,SAAA,EAAW;AAAA,gBACP,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAS,QAAQ,KAAA;AAAM;AAC3C;AACJ,WACJ;AAAA,QACJ;AACA,QAAA,MAAM,IAAI,KAAA;AAAA,UACN,oCAAoC,MAAM,CAAA,gDAAA;AAAA,SAC9C;AAAA,MACJ;AAAA,KACJ;AAAA,EACJ;AACJ,CAAA;AAEO,IAAM,wBAAwB,MAAM;AACvC,EAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,EAAA,OAAQ,MAAA,CAAe,iBAAA;AAC3B,CAAA;AAGO,IAAM,oBAAA,GAAuB,CAChC,aAAA,EACA,SAAA,KACC;AACD,EAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACnB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,0BAAA,EAA6B,aAAa,CAAA,OAAA,CAAS,CAAA;AAAA,EACvE;AAEA,EAAA,IAAI,aAAA,KAAkB,SAAA,IAAa,aAAA,KAAkB,QAAA,EAAU;AAC3D,IAAA,MAAM,aAAa,SAAA,CAAU,IAAA;AAAA,MACzB,CAAC,IAAA,KAAS,IAAA,CAAK,MAAA,KAAW;AAAA,KAC9B,EAAG,OAAA;AAEH,IAAA,IAAI,YAAY,OAAO,UAAA;AAAA,EAC3B;AAEA,EAAA,MAAM,gBAAgB,SAAA,CAAU,IAAA;AAAA,IAAK,CAAC,IAAA,KAClC,IAAA,CAAK,OAAA,EAAS,WAAW,GAAG;AAAA,GAChC,EAAG,OAAA;AAEH,EAAA,IAAI,eAAe,OAAO,aAAA;AAE1B,EAAA,MAAM,aAAA,GAAgB,SAAA,CAAU,CAAC,CAAA,EAAG,OAAA;AAEpC,EAAA,IAAI,aAAA,EAAe,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,aAAA;AAE3C,EAAA,MAAM,IAAI,KAAA;AAAA,IACN,qCAAqC,aAAa,CAAA,OAAA;AAAA,GACtD;AACJ,CAAA;AC1IO,IAAM,uBAAuB,YAI/B,MAAM,OAAO,eAAA,EAAiB,cAAA,EAAgB,kBAAiB,IAAM,IAAA;AAEnE,IAAM,0BAAA,GAA6B,CACtC,OAAA,KACU,OAAA,KAAY,UAAa,OAAA,KAAY,OAAA;AAE5C,IAAM,qBAAA,GAAwB,OACjC,WAAA,GAAc,EAAA,EACd,eAAe,GAAA,KACI;AACnB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,WAAA,EAAa,CAAA,EAAA,EAAK;AAClC,IAAA,MAAM,WAAWC,2BAAA,EAAoB;AAErC,IAAA,IAAI,QAAA,EAAU,OAAA,IAAW,QAAA,EAAU,WAAA,EAAa,OAAO,IAAA;AAEvD,IAAA,MAAM,IAAI,OAAA;AAAA,MAAQ,CAAC,OAAA,KACf,UAAA,CAAW,OAAA,EAAS,YAAA,GAAe,KAAK,GAAA,CAAI,CAAA,GAAI,CAAA,EAAG,CAAC,CAAC;AAAA,KACzD;AAAA,EACJ;AAEA,EAAA,OAAO,KAAA;AACX,CAAA;AAEO,IAAM,+BAAA,GAAkC,CAC3C,SAAA,EAOA,cAAA,EACA,iBACA,OAAA,KACC;AACD,EAAA,IAAI,CAAC,SAAA,IAAa,CAAC,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA,EAAG;AACzC,IAAA,KAAK,OAAA,EAAQ;AACb,IAAA;AAAA,EACJ;AAEA,EAAA,MAAM,gBAAgB,SAAA,CAAU,IAAA;AAAA,IAC5B,CAAC,GAAA,KAAQ,GAAA,CAAI,OAAA,KAAY,QAAA,IAAY,IAAI,WAAA,KAAgB;AAAA,GAC7D;AAEA,EAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AACzB,IAAA,KAAK,OAAA,EAAQ;AACb,IAAA;AAAA,EACJ;AAEA,EAAA,IAAI,aAAA,CAAc,YAAY,cAAA,EAAgB;AAC1C,IAAA,eAAA,CAAgB,cAAc,OAAO,CAAA;AAAA,EACzC;AACJ,CAAA;;;AC7CO,IAAM,YAAY,CAAC;AAAA,EACtB,OAAA;AAAA,EACA,QAAA;AAAA,EACA,eAAA;AAAA,WACAC;AACJ,CAAA,KAQM;AACF,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,eAAS,KAAK,CAAA;AAE5D,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,aAAa,QAAA,EAAU;AAE3B,IAAA,MAAM,gBAAgB,YAAY;AAC9B,MAAA,MAAM,KAAA,GAAQ,MAAM,qBAAA,EAAsB;AAE1C,MAAA,kBAAA,CAAmB,KAAK,CAAA;AAExB,MAAA,IAAI,CAAC,KAAA,EAAO;AACR,QAAA,OAAA,CAAQ,MAAM,sCAAsC,CAAA;AAAA,MACxD;AAAA,IACJ,CAAA;AAEA,IAAA,KAAK,aAAA,EAAc;AAAA,EACvB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAA,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,QAAA,KAAa,QAAA,IAAY,CAAC,OAAA,IAAW,CAAC,eAAA,EAAiB;AAE3D,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,IAAI,cAAA;AAEJ,IAAA,MAAM,cAAc,YAAY;AAC5B,MAAA,IAAI;AACA,QAAA,MAAM,WAAA,GAAc,MAAM,oBAAA,EAAqB;AAE/C,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,IAAI,CAAC,0BAAA,CAA2B,WAAA,EAAa,OAAO,CAAA,EAAG;AAEvD,QAAA,MAAM,QAAA,GAAW,MAAMH,2BAAAA,EAAoB,EAAG,OAAA;AAAA,UAC1C,gBAAA;AAAA,UACA;AAAA,SACJ;AAEA,QAAA,IAAI,SAAA,EAAW;AAEf,QAAA,+BAAA;AAAA,UACI,UAAU,MAAA,EAAQ,SAAA;AAAA,UAClB,OAAA;AAAA,UACA,eAAA;AAAA,UACA,MAAMC,UAAQ,QAAQ;AAAA,SAC1B;AAEA,QAAA,cAAA,GAAiBD,6BAAoB,EAAG,WAAA;AAAA,UACpC,eAAA;AAAA,UACA,CAAC,KAAA,KAAoC;AACjC,YAAA,+BAAA;AAAA,cACI,KAAA,EAAO,SAAA;AAAA,cACP,OAAA;AAAA,cACA,eAAA;AAAA,cACA,MAAMC,UAAQ,QAAQ;AAAA,aAC1B;AAAA,UACJ;AAAA,SACJ;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,KAAK,CAAA;AAAA,MAClD;AAAA,IACJ,CAAA;AAEA,IAAA,KAAK,WAAA,EAAY;AAEjB,IAAA,OAAO,MAAM;AACT,MAAA,SAAA,GAAY,IAAA;AAEZ,MAAA,IAAI,CAAC,cAAA,EAAgB;AAErB,MAAA,IAAI;AACA,QAAA,cAAA,EAAe;AAAA,MACnB,SAAS,KAAA,EAAO;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,qCAAqC,KAAK,CAAA;AAAA,MAC5D;AAAA,IACJ,CAAA;AAAA,EACJ,GAAG,CAAC,OAAA,EAAS,iBAAiB,eAAA,EAAiBA,SAAA,EAAS,QAAQ,CAAC,CAAA;AACrE,CAAA;;;ACnGO,IAAM,wBAAwB,MAGzB;AACR,EAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,IAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,OAAA,CAAQ,oBAAoB,CAAA;AAExD,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAEpB,EAAA,IAAI;AACA,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA;AAK9B,IAAA,MAAM,UAAU,wBAAA,CAAyB,IAAA;AAAA,MACrC,CAAC,MAAA,KAAW,MAAA,KAAW,IAAA,CAAK;AAAA,KAChC;AAEA,IAAA,OAAO,UAAU,IAAA,GAAO,IAAA;AAAA,EAC5B,CAAA,CAAA,MAAQ;AACJ,IAAA,OAAO,IAAA;AAAA,EACX;AACJ;ACwBA,IAAM,0BAA0B,MAAA,CAAO,WAAA;AAAA,EACnC,CAAC,GAAGG,yBAAA,EAAmBC,+BAAA,EAAyB,iBAAiB,CAAA,CAAE,GAAA;AAAA,IAC/D,CAAC,CAAA,KAAM;AAAA,MACH,kCAAA,CAAmC,EAAE,EAAE,CAAA;AAAA,MACvC,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,IAAA,EAAM,CAAA,CAAE,IAAA,IAAQ,EAAA,EAAI,MAAA,EAAQ,CAAA,CAAE,MAAA,IAAU,EAAA;AAAG;AAC/D;AAER,CAAA;AAEA,IAAM,mBAAA,GAAsBC,mBAAA;AAAA,EACxB;AACJ,CAAA;AAEO,IAAM,uBAAuB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,aAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA;AACJ,CAAA,KAAiC;AAC7B,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIJ,cAAAA,EAA6B;AAC3D,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,cAAAA,EAE9B;AACF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,eAAS,KAAK,CAAA;AAGtD,EAAA,MAAM,aAAA,GAAgBK,aAAO,CAAC,CAAA;AAG9B,EAAA,MAAM,SAAA,GAAYA,aAA6B,IAAI,CAAA;AAMnD,EAAA,MAAM,gBAAA,GAAmBA,aAAO,aAAa,CAAA;AAC7C,EAAA,gBAAA,CAAiB,OAAA,GAAU,aAAA;AAK3B,EAAA,MAAM,UAAA,GAAa,OAAA,EAAS,IAAA,CAAK,GAAG,CAAA;AAGpC,EAAA,IAAI,SAAS,QAAA,CAAS,gBAAgB,CAAA,IAAK,CAAC,eAAe,SAAA,EAAW;AAClE,IAAA,MAAM,IAAI,KAAA;AAAA,MACN;AAAA,KACJ;AAAA,EACJ;AAKA,EAAAJ,gBAAU,MAAM;AACZ,IAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,IAAW,OAAA,CAAQ,SAAS,KAAK,CAAA;AACxD,IAAA,IAAI,gBAAgB,aAAA,EAAe;AAC/B,MAAA,mBAAA,EAAoB;AACpB,MAAA,OAAO,MAAM,qBAAA,EAAsB;AAAA,IACvC;AAAA,EACJ,CAAA,EAAG,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAE7B,EAAAA,gBAAU,MAAM;AACZ,IAAA,MAAM,sBAAsB,YAAY;AACpC,MAAA,MAAM,YAAY,qBAAA,EAAsB;AAExC,MAAA,IAAI,CAAC,SAAA,EAAW;AAEhB,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,IAAI;AACA,QAAA,IAAI,SAAA,CAAU,aAAa,KAAA,EAAO;AAC9B,UAAA,MAAM,IAAA,GAAO,MAAM,mBAAA,EAAoB;AACvC,UAAA,UAAA,CAAW,KAAK,OAAO,CAAA;AACvB,UAAA,WAAA,CAAY,KAAK,QAAQ,CAAA;AACzB,UAAA;AAAA,QACJ;AAEA,QAAA,IACI,SAAA,CAAU,QAAA,KAAa,gBAAA,IACvB,aAAA,EAAe,SAAA,EACjB;AACE,UAAA,MAAM,cAAcJ,qBAAAA,CAAc,kBAAA;AAAA,YAC9B,wBAAA;AAAA,cACI,aAAA,CAAc,SAAA;AAAA,cACd,aAAA,CAAc,QAAA;AAAA,cACd,aAAA,CAAc;AAAA;AAClB,WACJ;AACA,UAAA,SAAA,CAAU,OAAA,GAAU,WAAA;AACpB,UAAA,MAAM,WAAA;AACN,UAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,QACxB;AAEA,QAAA,UAAA,CAAW,UAAU,OAAO,CAAA;AAC5B,QAAA,WAAA,CAAY,UAAU,QAAQ,CAAA;AAC9B,QAAAS,6BAAA;AAAA,UACI,kCAAA,CAAmC,UAAU,QAAQ;AAAA,SACzD;AAAA,MACJ,SAAS,KAAA,EAAO;AACZ,QAAA,OAAA,CAAQ,KAAA,CAAM,wCAAwC,KAAK,CAAA;AAAA,MAC/D,CAAA,SAAE;AACE,QAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,MACzB;AAAA,IACJ,CAAA;AAEA,IAAA,KAAK,mBAAA,EAAoB;AAAA,EAC7B,CAAA,EAAG,CAAC,aAAA,EAAe,SAAS,CAAC,CAAA;AAE7B,EAAA,MAAMP,SAAA,GAAUQ,iBAAA;AAAA,IACZ,OACI,YACA,OAAA,KACC;AAED,MAAA,IAAI,YAAA,IAAgB,CAAC,UAAA,EAAY;AAC7B,QAAA,MAAMC,IAAAA,GAAM,EAAE,aAAA,CAAc,OAAA;AAC5B,QAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,QAAA,IAAI;AACA,UAAAC,+BAAA,EAAwB;AAExB,UAAA,MAAM,cAAA,GAAgD;AAAA,YAClD,iBAAA,EAAmB,IAAA;AAAA;AAAA,YAEnB,gBAAA,EAAkB;AAAA,cACd,GAAGP,yBAAA;AAAA,cACH;AAAA;AACJ,WACJ;AAEA,UAAA,IAAI,OAAA,EAAS;AACT,YAAA,cAAA,CAAe,sBAAsB,OAAA,CAAQ,GAAA;AAAA,cACzC,CAAC,CAAA,KAAM,kCAAA,CAAmC,CAAC;AAAA,aAC/C;AAAA,UACJ;AAEA,UAAA,MAAMQ,MAAK,gBAAA,CAAiB,OAAA;AAC5B,UAAA,IAAIA,KAAI,SAAA,EAAW;AACf,YAAA,cAAA,CAAe,aAAA,GACX,wBAAA;AAAA,cACIA,GAAAA,CAAG,SAAA;AAAA,cACHA,GAAAA,CAAG,QAAA;AAAA,cACHA,GAAAA,CAAG;AAAA,aACP;AAAA,UACR;AAEA,UAAA,MAAM,OAAO,MAAMC,eAAA;AAAA,YACf,cAAA;AAAA,YACA,cAAA;AAAA,YACA;AAAC,WACL;AAEA,UAAA,IAAI,aAAA,CAAc,YAAYH,IAAAA,EAAK;AAEnC,UAAA,MAAM,aAAaI,6BAAA,EAAsB;AACzC,UAAA,MAAM,gBAAA,GAAmB,UAAA,GACnB,kCAAA,CAAmC,UAAU,CAAA,GAC7C,KAAA,CAAA;AAEN,UAAA,IAAI,CAAC,gBAAA,EAAkB;AACnB,YAAA,MAAM,IAAI,KAAA;AAAA,cACN,CAAA,sDAAA,EAAyD,cAAc,MAAM,CAAA;AAAA,aACjF;AAAA,UACJ;AAEA,UAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,YACrB,gBAAA;AAAA,YACA,IAAA,CAAK;AAAA,WACT;AAEA,UAAA,UAAA,CAAW,gBAAgB,CAAA;AAC3B,UAAA,WAAA,CAAY,gBAAgB,CAAA;AAC5B,UAAA,OAAA,EAAS,SAAA,GAAY,kBAAkB,gBAAgB,CAAA;AAAA,QAC3D,SAAS,KAAA,EAAO;AACZ,UAAA,IAAI,aAAA,CAAc,YAAYJ,IAAAA,EAAK;AACnC,UAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAChD,UAAAV,2BAAAA,IAAuB,UAAA,IAAa;AACpC,UAAAW,+BAAA,EAAwB;AACxB,UAAA,OAAA,EAAS,UAAU,KAAc,CAAA;AAAA,QACrC,CAAA,SAAE;AACE,UAAA,IAAI,aAAA,CAAc,YAAYD,IAAAA,EAAK;AAC/B,YAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,UACzB;AAAA,QACJ;AACA,QAAA;AAAA,MACJ;AAGA,MAAA,MAAM,gBAAgB,wBAAA,CAAyB,IAAA;AAAA,QAC3C,CAAC,WAAW,MAAA,KAAW;AAAA,OAC3B;AAEA,MAAA,IAAI,CAAC,aAAA,EAAe;AAChB,QAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,UACd;AAAA,SACJ;AACA,QAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAM,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,OAAA,EAAS,UAAU,KAAK,CAAA;AACxB,QAAA;AAAA,MACJ;AAEA,MAAA,IAAI,CAAC,gCAAA,CAAiC,aAAa,CAAA,EAAG;AAClD,QAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,UACd,GAAG,aAAa,CAAA,0EAAA;AAAA,SACpB;AACA,QAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAM,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,OAAA,EAAS,UAAU,KAAK,CAAA;AACxB,QAAA;AAAA,MACJ;AAEA,MAAA,MAAM,KAAK,gBAAA,CAAiB,OAAA;AAE5B,MAAA,IACI,aAAA,KAAkB,gBAAA,IAClB,CAAC,EAAA,EAAI,SAAA,EACP;AACE,QAAA,MAAM,QAAQ,IAAI,KAAA;AAAA,UACd;AAAA,SACJ;AACA,QAAA,OAAA,CAAQ,KAAA,CAAM,WAAA,EAAM,KAAA,CAAM,OAAO,CAAA;AACjC,QAAA,OAAA,EAAS,UAAU,KAAK,CAAA;AACxB,QAAA;AAAA,MACJ;AAGA,MAAA,MAAM,GAAA,GAAM,EAAE,aAAA,CAAc,OAAA;AAC5B,MAAA,eAAA,CAAgB,IAAI,CAAA;AAEpB,MAAA,IAAI;AACA,QAAA,IAAI,kBAAkB,KAAA,EAAO;AACzB,UAAA,MAAMK,KAAAA,GAAO,MAAM,mBAAA,EAAoB;AACvC,UAAA,IAAI,aAAA,CAAc,YAAY,GAAA,EAAK;AACnC,UAAA,UAAA,CAAWA,MAAK,OAAO,CAAA;AACvB,UAAA,WAAA,CAAYA,MAAK,QAAQ,CAAA;AACzB,UAAA,OAAA,EAAS,SAAA,GAAYA,KAAAA,CAAK,OAAA,EAASA,KAAAA,CAAK,QAAQ,CAAA;AAChD,UAAA;AAAA,QACJ;AAEA,QAAAP,6BAAA;AAAA,UACI,mCAAmC,aAAa;AAAA,SACpD;AAEA,QAAA,MAAM,QAAA,GACF,aAAA,KAAkB,gBAAA,IAAoB,EAAA,GAChC,wBAAA;AAAA,UACI,EAAA,CAAG,SAAA;AAAA,UACH,EAAA,CAAG,QAAA;AAAA,UACH,EAAA,CAAG;AAAA,SACP,GACA,KAAA,CAAA;AAEV,QAAA,IAAI,QAAA,EAAU;AAEV,UAAA,IAAI,SAAA,CAAU,OAAA,EAAS,MAAM,SAAA,CAAU,OAAA;AACvC,UAAA,MAAM,WAAA,GACFT,qBAAAA,CAAc,kBAAA,CAAmB,QAAQ,CAAA;AAC7C,UAAA,SAAA,CAAU,OAAA,GAAU,WAAA;AACpB,UAAA,MAAM,WAAA;AACN,UAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,QACxB;AAEA,QAAA,IAAI,aAAA,CAAc,YAAY,GAAA,EAAK;AAEnC,QAAA,MAAM,IAAA,GAAO,WACP,MAAMc,eAAA;AAAA,UACF,EAAE,eAAe,QAAA,EAAS;AAAA,UAC1B,cAAA;AAAA,UACA;AAAC,SACL,GACA,MAAMA,eAAA,CAAQ,cAAc,CAAA;AAElC,QAAA,IAAI,aAAA,CAAc,YAAY,GAAA,EAAK;AAEnC,QAAA,MAAM,gBAAA,GAAmB,oBAAA;AAAA,UACrB,aAAA;AAAA,UACA,IAAA,CAAK;AAAA,SACT;AAEA,QAAA,UAAA,CAAW,gBAAgB,CAAA;AAC3B,QAAA,WAAA,CAAY,aAAa,CAAA;AACzB,QAAA,OAAA,EAAS,SAAA,GAAY,kBAAkB,aAAa,CAAA;AAAA,MACxD,SAAS,KAAA,EAAO;AACZ,QAAA,IAAI,aAAA,CAAc,YAAY,GAAA,EAAK;AACnC,QAAA,OAAA,CAAQ,KAAA,CAAM,6BAA6B,KAAK,CAAA;AAIhD,QAAA,IAAI,kBAAkB,KAAA,EAAO;AACzB,UAAAb,2BAAAA,IAAuB,UAAA,IAAa;AACpC,UAAAW,+BAAA,EAAwB;AAAA,QAC5B;AACA,QAAA,OAAA,EAAS,UAAU,KAAc,CAAA;AAAA,MACrC,CAAA,SAAE;AACE,QAAA,IAAI,aAAA,CAAc,YAAY,GAAA,EAAK;AAC/B,UAAA,eAAA,CAAgB,KAAK,CAAA;AAAA,QACzB;AAAA,MACJ;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,cAAc,UAAU;AAAA,GAC7B;AAEA,EAAA,MAAM,KAAA,GAAQF,kBAAY,MAAM;AAC5B,IAAA,aAAA,CAAc,OAAA,EAAA;AACd,IAAA,eAAA,CAAgB,KAAK,CAAA;AACrB,IAAAE,+BAAA,EAAwB;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,UAAA,GAAaF,iBAAA;AAAA,IACf,CAAC,QAAA,KAA0B;AACvB,MAAA,YAAA,CAAa,WAAW,oBAAoB,CAAA;AAC5C,MAAA,UAAA,CAAW,MAAS,CAAA;AACpB,MAAA,WAAA,CAAY,MAAS,CAAA;AACrB,MAAAT,2BAAAA,IAAuB,UAAA,IAAa;AACpC,MAAAW,+BAAA,EAAwB;AACxB,MAAA,QAAA,IAAW;AACX,MAAA,YAAA,IAAe;AAAA,IACnB,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACjB;AAEA,EAAAR,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,QAAA,EAAU;AAE3B,IAAA,YAAA,CAAa,OAAA;AAAA,MACT,oBAAA;AAAA,MACA,IAAA,CAAK,SAAA,CAAU,EAAE,OAAA,EAAS,UAAU;AAAA,KACxC;AAAA,EACJ,CAAA,EAAG,CAAC,OAAA,EAAS,QAAQ,CAAC,CAAA;AAEtB,EAAAA,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,QAAA,IAAY,CAAC,SAAA,EAAW;AAEzC,IAAA,SAAA,CAAU,UAAU,OAAO,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,OAAA,EAAS,QAAA,EAAU,SAAS,CAAC,CAAA;AAEjC,EAAA,MAAM,mBAAA,GAAsBM,iBAAA;AAAA,IACxB,CAAC,UAAA,KAAuB;AACpB,MAAA,UAAA,CAAW,UAAU,CAAA;AACrB,MAAA,eAAA,GAAkB,UAAU,CAAA;AAAA,IAChC,CAAA;AAAA,IACA,CAAC,eAAe;AAAA,GACpB;AAEA,EAAA,SAAA,CAAU;AAAA,IACN,OAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA,EAAiB,mBAAA;AAAA,aACjBR;AAAA,GACH,CAAA;AAKD,EAAA,MAAM,EAAE,SAAA,EAAU,GAAI,gBAAA,EAAiB;AACvC,EAAA,MAAM,UAAA,GAAa,OAAA,IAAW,CAAC,GAAG,wBAAwB,CAAA;AAC1D,EAAA,MAAM,WAAA,GAAc,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,IACvC,EAAA,EAAI,CAAA;AAAA,IACJ,IAAA,EAAM,uBAAA,CAAwB,CAAC,CAAA,EAAG,IAAA,IAAQ,CAAA;AAAA,IAC1C,IAAA,EAAM,uBAAA,CAAwB,CAAC,CAAA,EAAG,IAAA,IAAQ,EAAA;AAAA,IAC1C,MAAA,EAAQ,uBAAA,CAAwB,CAAC,CAAA,EAAG,MAAA,IAAU,EAAA;AAAA,IAC9C,SAAA,EACI,MAAM,gBAAA,GACA,CAAC,CAAC,aAAA,EAAe,SAAA,GACjB,SAAA,CAAU,QAAA,CAAS,CAAC;AAAA,GAClC,CAAE,CAAA;AAGF,EAAA,MAAM,cAAA,GAAiB,WAAA,CAClB,GAAA,CAAI,CAAC,MAAM,CAAA,EAAG,CAAA,CAAE,EAAE,CAAA,CAAA,EAAI,CAAA,CAAE,SAAS,CAAA,CAAE,CAAA,CACnC,KAAK,GAAG,CAAA;AAEb,EAAA,MAAM,KAAA,GAAQe,cAAQ,MAA0B;AAC5C,IAAA,MAAM,cAA2B,YAAA,GAC3B,EAAE,MAAA,EAAQ,YAAA,EAAc,SAAS,MAAA,EAAW,QAAA,EAAU,MAAA,EAAU,GAChE,WAAW,QAAA,GACX,EAAE,QAAQ,WAAA,EAAa,OAAA,EAAS,UAAS,GACzC;AAAA,MACI,MAAA,EAAQ,cAAA;AAAA,MACR,OAAA,EAAS,MAAA;AAAA,MACT,QAAA,EAAU;AAAA,KACd;AAEN,IAAA,OAAO;AAAA,MACH,GAAG,WAAA;AAAA,eACHf,SAAA;AAAA,MACA,UAAA;AAAA,MACA,KAAA;AAAA,MACA,OAAA,EAAS;AAAA,KACb;AAAA,EACJ,CAAA,EAAG,CAAC,OAAA,EAAS,QAAA,EAAU,cAAcA,SAAA,EAAS,UAAA,EAAY,KAAA,EAAO,cAAc,CAAC,CAAA;AAEhF,EAAA,uBACIgB,cAAA,CAAC,mBAAA,CAAoB,QAAA,EAApB,EAA6B,OACzB,QAAA,EACL,CAAA;AAER;AAEO,IAAM,yBAAyB,MAAM;AACxC,EAAA,MAAM,OAAA,GAAUC,iBAAW,mBAAmB,CAAA;AAE9C,EAAA,IAAI,YAAY,MAAA,EAAW;AACvB,IAAA,MAAM,IAAI,KAAA;AAAA,MACN;AAAA,KACJ;AAAA,EACJ;AAEA,EAAA,OAAO,OAAA;AACX,CAAA;ACxbO,IAAM,aAAa,MAAwB;AAC9C,EAAA,MAAM,EAAE,OAAA,EAAS,MAAA,EAAQ,QAAA,KAAa,sBAAA,EAAuB;AAE7D,EAAA,OAAOF,cAAQ,MAAM;AACjB,IAAA,IAAI,MAAA,KAAW,WAAA,IAAe,OAAA,IAAW,QAAA,EAAU;AAC/C,MAAA,OAAO;AAAA,QACH,OAAA;AAAA,QACA,WAAA,EAAa,IAAA;AAAA,QACb,YAAA,EAAc,KAAA;AAAA,QACd,cAAA,EAAgB,KAAA;AAAA,QAChB;AAAA,OACJ;AAAA,IACJ;AAEA,IAAA,OAAO;AAAA,MACH,OAAA,EAAS,MAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,cAAc,MAAA,KAAW,YAAA;AAAA,MACzB,gBAAgB,MAAA,KAAW,cAAA;AAAA,MAC3B,QAAA,EAAU;AAAA,KACd;AAAA,EACJ,CAAA,EAAG,CAAC,OAAA,EAAS,MAAA,EAAQ,QAAQ,CAAC,CAAA;AAClC;ACrCO,IAAM,aAAa,MAAM;AAC5B,EAAA,MAAM;AAAA,IACF,OAAA,EAAS,cAAA;AAAA,IACT,KAAA,EAAO,YAAA;AAAA,IACP,MAAA,EAAQ;AAAA,MACR,sBAAA,EAAuB;AAE3B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAId,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GACpCA,eAAyB,MAAM,CAAA;AAEnC,EAAA,MAAM,OAAA,GAAUO,iBAAAA;AAAA,IACZ,OACI,YACA,OAAA,KACC;AACD,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,iBAAA,CAAkB,SAAS,CAAA;AAE3B,MAAA,IAAI,OAAA,GAAU,KAAA;AAEd,MAAA,IAAI;AACA,QAAA,MAAM,eAAe,UAAA,EAAY;AAAA,UAC7B,SAAA,EAAW,CAAC,OAAA,EAAS,QAAA,KAAa;AAC9B,YAAA,OAAA,GAAU,IAAA;AACV,YAAA,iBAAA,CAAkB,SAAS,CAAA;AAC3B,YAAA,OAAA,EAAS,SAAA,GAAY,SAAS,QAAQ,CAAA;AAAA,UAC1C,CAAA;AAAA,UACA,OAAA,EAAS,CAAC,GAAA,KAAQ;AACd,YAAA,OAAA,GAAU,IAAA;AACV,YAAA,QAAA,CAAS,GAAG,CAAA;AACZ,YAAA,iBAAA,CAAkB,OAAO,CAAA;AACzB,YAAA,OAAA,EAAS,UAAU,GAAG,CAAA;AAAA,UAC1B;AAAA,SACH,CAAA;AAAA,MACL,CAAA,SAAE;AACE,QAAA,IAAI,CAAC,OAAA,EAAS;AAGV,UAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,QAC5B;AAAA,MACJ;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,cAAc;AAAA,GACnB;AAEA,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC5B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,iBAAA,CAAkB,MAAM,CAAA;AACxB,IAAA,YAAA,EAAa;AAAA,EACjB,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,EAAA,MAAM,KAAA,GAAQO,aAAAA;AAAA,IACV,OAAO;AAAA,MACH,OAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAS,cAAA,KAAmB,OAAA;AAAA,MAC5B,QAAQ,cAAA,KAAmB,MAAA;AAAA,MAC3B,SAAA,EACI,cAAA,KAAmB,SAAA,IACnB,YAAA,KAAiB,YAAA;AAAA,MACrB,WAAW,cAAA,KAAmB,SAAA;AAAA,MAC9B,MAAA,EAAQ;AAAA,KACZ,CAAA;AAAA,IACA,CAAC,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,gBAAgB,YAAY;AAAA,GACxD;AAEA,EAAA,OAAO,KAAA;AACX;ACtEO,IAAM,gBAAgB,MAAM;AAC/B,EAAA,MAAM,EAAE,UAAA,EAAY,iBAAA,EAAkB,GAAI,sBAAA,EAAuB;AAEjE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAId,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GACpCA,eAAyB,MAAM,CAAA;AAEnC,EAAA,MAAM,UAAA,GAAaO,iBAAAA;AAAA,IACf,CAAC,QAAA,KAA0B;AACvB,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,IAAI;AACA,QAAA,iBAAA,CAAkB,QAAQ,CAAA;AAC1B,QAAA,iBAAA,CAAkB,SAAS,CAAA;AAAA,MAC/B,SAAS,GAAA,EAAK;AACV,QAAA,MAAM,eAAA,GACF,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACtD,QAAA,QAAA,CAAS,eAAe,CAAA;AACxB,QAAA,iBAAA,CAAkB,OAAO,CAAA;AAAA,MAC7B;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACtB;AAEA,EAAA,MAAM,KAAA,GAAQA,kBAAY,MAAM;AAC5B,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,iBAAA,CAAkB,MAAM,CAAA;AAAA,EAC5B,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQO,aAAAA;AAAA,IACV,OAAO;AAAA,MACH,UAAA;AAAA,MACA,KAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAS,cAAA,KAAmB,OAAA;AAAA,MAC5B,QAAQ,cAAA,KAAmB,MAAA;AAAA,MAC3B,WAAW,cAAA,KAAmB,SAAA;AAAA,MAC9B,WAAW,cAAA,KAAmB,SAAA;AAAA,MAC9B,MAAA,EAAQ;AAAA,KACZ,CAAA;AAAA,IACA,CAAC,UAAA,EAAY,KAAA,EAAO,KAAA,EAAO,cAAc;AAAA,GAC7C;AAEA,EAAA,OAAO,KAAA;AACX;ACxBO,IAAM,iBAAiB,MAAM;AAChC,EAAA,MAAM,EAAE,WAAA,EAAa,QAAA,EAAS,GAAI,UAAA,EAAW;AAC7C,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAId,eAAsC,MAAS,CAAA;AACvE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAyB,MAAM,CAAA;AAE3D,EAAA,MAAM,gBAAA,GAAmBO,iBAAAA;AAAA,IACrB,OAAO,SAAA,KAA8D;AACjE,MAAA,IAAI,CAAC,WAAA,EAAa;AACd,QAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,MAC7C;AAEA,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,OAAA,CAAQ,MAAS,CAAA;AAEjB,MAAA,IAAI;AACA,QAAA,IAAI,MAAA;AAEJ,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACnB,YAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,UAC1C;AAEA,UAAA,MAAA,GAAS,MAAM,MAAA,CAAO,SAAA,CAAU,MAAA,CAAO,WAAA,CAAY;AAAA,YAC/C,SAAS,SAAA,CAAU;AAAA,WACtB,CAAA;AAAA,QACL,CAAA,MAAO;AACH,UAAA,MAAA,GAAS,MAAMI,gBAAQ,iBAAA,EAAmB;AAAA,YACtC,SAAS,SAAA,CAAU,OAAA;AAAA,YACnB,GAAI,UAAU,SAAA,IAAa;AAAA,cACvB,WAAW,SAAA,CAAU;AAAA;AACzB,WACH,CAAA;AAAA,QACL;AAEA,QAAA,OAAA,CAAQ,MAAM,CAAA;AACd,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,OAAO,MAAA;AAAA,MACX,SAAS,GAAA,EAAK;AACV,QAAA,MAAMM,MAAAA,GACF,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACtD,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,SAAA,CAAU,OAAO,CAAA;AACjB,QAAA,MAAMA,MAAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,aAAa,QAAQ;AAAA,GAC1B;AAEA,EAAA,MAAM,WAAA,GAAcV,iBAAAA;AAAA,IAChB,CAAC,WAAiC,OAAA,KAAiC;AAC/D,MAAA,gBAAA,CAAiB,SAAS,CAAA,CACrB,IAAA,CAAK,CAACM,KAAAA,KAAS;AACZ,QAAA,OAAA,EAAS,YAAYA,KAAI,CAAA;AACzB,QAAA,OAAA,EAAS,SAAA,GAAYA,OAAM,IAAI,CAAA;AAAA,MACnC,CAAC,CAAA,CACA,KAAA,CAAM,CAACI,MAAAA,KAAU;AACd,QAAA,OAAA,EAAS,UAAUA,MAAK,CAAA;AACxB,QAAA,OAAA,EAAS,SAAA,GAAY,QAAWA,MAAK,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,gBAAgB;AAAA,GACrB;AAEA,EAAA,MAAM,KAAA,GAAQV,kBAAY,MAAM;AAC5B,IAAA,OAAA,CAAQ,MAAS,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,SAAA,CAAU,MAAM,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOO,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAS,MAAA,KAAW,OAAA;AAAA,MACpB,QAAQ,MAAA,KAAW,MAAA;AAAA,MACnB,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,gBAAA,EAAkB,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM;AAAA,GAC9D;AACJ;;;ACjHO,IAAM,qBAAA,GAAwB,CAAC,OAAA,KAAoB;AACtD,EAAA,IAAI,QAAQ,UAAA,CAAW,IAAI,KAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AACtD,IAAA,OAAO,SAAA;AAAA,EACX;AAEA,EAAA,IAAI,QAAQ,UAAA,CAAW,IAAI,KAAK,OAAA,CAAQ,UAAA,CAAW,IAAI,CAAA,EAAG;AACtD,IAAA,OAAO,SAAA;AAAA,EACX;AAEA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,CAAA,CAAE,CAAA;AACxD;ACPO,IAAM,2BAAA,GAA8B,CAAC,cAAA,KAC1C,cAAA,CAAe,IAAI,CAAC,EAAA,KAAOI,+BAAA,CAAmB,EAAE,CAAC,CAAA;AAE5C,IAAM,iBAAA,GAAoB,CAAC,IAAA,KAChC,IAAA,CAAK,IAAI,CAAC,GAAA,KAAQC,oBAAA,CAAQ,GAAG,CAAC,CAAA;;;ACYzB,IAAM,mBAAmB,MAAM;AAClC,EAAA,MAAM,EAAE,WAAA,EAAa,OAAA,EAAS,QAAA,KAAa,UAAA,EAAW;AAEtD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAInB,eAA6B,MAAS,CAAA;AAC9D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAAuB,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAyB,MAAM,CAAA;AAE3D,EAAA,MAAM,kBAAA,GAAqBO,iBAAAA;AAAA,IACvB,OAAO,SAAA,KAAuD;AAC1D,MAAA,IAAI,CAAC,WAAA,IAAe,CAAC,OAAA,EAAS;AAC1B,QAAA,MAAM,IAAI,MAAM,yBAAyB,CAAA;AAAA,MAC7C;AAEA,MAAA,SAAA,CAAU,SAAS,CAAA;AACnB,MAAA,QAAA,CAAS,IAAI,CAAA;AACb,MAAA,OAAA,CAAQ,MAAS,CAAA;AAEjB,MAAA,IAAI;AACA,QAAA,IAAI,aAAa,KAAA,EAAO;AACpB,UAAA,IAAI,CAAC,OAAO,SAAA,EAAW;AACnB,YAAA,MAAM,IAAI,MAAM,sBAAsB,CAAA;AAAA,UAC1C;AAEA,UAAA,MAAMa,SAAAA,GACF,MAAM,MAAA,CAAO,SAAA,CAAU,OAAO,eAAA,CAAgB;AAAA,YAC1C,iBAAiB,SAAA,CAAU,OAAA;AAAA,YAC3B,cAAc,SAAA,CAAU,QAAA;AAAA,YACxB,cAAc,SAAA,CAAU,YAAA;AAAA,YACxB,YAAA,EAAc,iBAAA,CAAkB,SAAA,CAAU,IAAI,CAAA;AAAA,YAC9C,cAAA,EAAgB,2BAAA;AAAA,cACZ,UAAU,EAAA,CAAG;AAAA,aACjB;AAAA,YACA,iBAAA,EAAmB,UAAU,EAAA,CAAG,IAAA;AAAA,YAChC,UAAA,EAAY,OAAA;AAAA,YACZ,MAAA,EAAQ,eAAA;AAAA,YACR,UAAA,EAAY;AAAA,WACf,CAAA;AAEL,UAAA,OAAA,CAAQA,UAAS,MAAM,CAAA;AACvB,UAAA,SAAA,CAAU,SAAS,CAAA;AACnB,UAAA,OAAOA,SAAAA,CAAS,MAAA;AAAA,QACpB;AAEA,QAAA,MAAM,QAAA,GAAW,MAAMT,eAAAA,CAAQ,kBAAA,EAAoB;AAAA,UAC/C,OAAA;AAAA,UACA,UAAU,CAAA,EAAG,SAAA,CAAU,OAAO,CAAA,CAAA,EAAI,UAAU,QAAQ,CAAA,CAAA;AAAA,UACpD,cAAc,SAAA,CAAU,YAAA;AAAA,UACxB,cAAc,SAAA,CAAU,IAAA;AAAA,UACxB,cAAA,EAAgB,UAAU,EAAA,CAAG,cAAA;AAAA,UAC7B,mBACI,SAAA,CAAU,EAAA,CAAG,IAAA,KAASU,8BAAA,CAAkB,QAClC,OAAA,GACA,MAAA;AAAA,UACV,OAAA,EAAS,sBAAsB,OAAO;AAAA,SACzC,CAAA;AAED,QAAA,IAAI,CAAC,SAAS,IAAA,EAAM;AAChB,UAAA,MAAM,IAAI,MAAM,4BAA4B,CAAA;AAAA,QAChD;AAEA,QAAA,OAAA,CAAQ,SAAS,IAAI,CAAA;AACrB,QAAA,SAAA,CAAU,SAAS,CAAA;AACnB,QAAA,OAAO,QAAA,CAAS,IAAA;AAAA,MACpB,SAAS,GAAA,EAAK;AACV,QAAA,MAAMJ,MAAAA,GACF,eAAe,KAAA,GAAQ,GAAA,GAAM,IAAI,KAAA,CAAM,MAAA,CAAO,GAAG,CAAC,CAAA;AACtD,QAAA,QAAA,CAASA,MAAK,CAAA;AACd,QAAA,SAAA,CAAU,OAAO,CAAA;AACjB,QAAA,MAAMA,MAAAA;AAAA,MACV;AAAA,IACJ,CAAA;AAAA,IACA,CAAC,WAAA,EAAa,OAAA,EAAS,QAAQ;AAAA,GACnC;AAEA,EAAA,MAAM,aAAA,GAAgBV,iBAAAA;AAAA,IAClB,CAAC,WAAmC,OAAA,KAAmC;AACnE,MAAA,kBAAA,CAAmB,SAAS,CAAA,CACvB,IAAA,CAAK,CAACM,KAAAA,KAAS;AACZ,QAAA,OAAA,EAAS,YAAYA,KAAI,CAAA;AACzB,QAAA,OAAA,EAAS,SAAA,GAAYA,OAAM,IAAI,CAAA;AAAA,MACnC,CAAC,CAAA,CACA,KAAA,CAAM,CAACI,MAAAA,KAAU;AACd,QAAA,OAAA,EAAS,UAAUA,MAAK,CAAA;AACxB,QAAA,OAAA,EAAS,SAAA,GAAY,QAAWA,MAAK,CAAA;AAAA,MACzC,CAAC,CAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,kBAAkB;AAAA,GACvB;AAEA,EAAA,MAAM,KAAA,GAAQV,kBAAY,MAAM;AAC5B,IAAA,OAAA,CAAQ,MAAS,CAAA;AACjB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,SAAA,CAAU,MAAM,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAOO,aAAAA;AAAA,IACH,OAAO;AAAA,MACH,aAAA;AAAA,MACA,kBAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,SAAS,MAAA,KAAW,OAAA;AAAA,MACpB,QAAQ,MAAA,KAAW,MAAA;AAAA,MACnB,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB,WAAW,MAAA,KAAW,SAAA;AAAA,MACtB;AAAA,KACJ,CAAA;AAAA,IACA,CAAC,aAAA,EAAe,kBAAA,EAAoB,KAAA,EAAO,IAAA,EAAM,OAAO,MAAM;AAAA,GAClE;AACJ;AC1HO,IAAM,UAAA,GAAa,CAAC,OAAA,KAAqB;AAC5C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAId,eAAwB,IAAI,CAAA;AAC1D,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAAC,gBAAU,MAAM;AACZ,IAAA,IAAI,CAAC,OAAA,EAAS;AACV,MAAA,UAAA,CAAW,IAAI,CAAA;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA;AAAA,IACJ;AAEA,IAAA,MAAM,eAAe,YAAY;AAC7B,MAAA,YAAA,CAAa,IAAI,CAAA;AAEjB,MAAA,IAAI;AACA,QAAA,MAAM,OAAA,GAAU,sBAAsB,OAAO,CAAA;AAC7C,QAAA,MAAM,SAAS,MAAMqB,uBAAA,CAAe,EAAE,OAAA,EAAS,SAAS,CAAA;AAExD,QAAA,MAAM,QAAA,GAAW,SACX,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,CAAA,EAAI,MAAA,CAAO,SAAS,CAAA,CAAA,GAClC,IAAA;AAEN,QAAA,UAAA,CAAW,QAAQ,CAAA;AAAA,MACvB,CAAA,CAAA,MAAQ;AACJ,QAAA,UAAA,CAAW,IAAI,CAAA;AAAA,MACnB,CAAA,SAAE;AACE,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACtB;AAAA,IACJ,CAAA;AAEA,IAAA,KAAK,YAAA,EAAa;AAAA,EACtB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,OAAO,EAAE,SAAS,SAAA,EAAU;AAChC;ACnCO,IAAM,aAAa,MAAM;AAC5B,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,sBAAA,EAAuB;AAE3C,EAAA,OAAOR,cAAQ,OAAO,EAAE,SAAQ,CAAA,EAAI,CAAC,OAAO,CAAC,CAAA;AACjD","file":"index.cjs","sourcesContent":["import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","export const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\nexport interface StacksWallets {\n supported: SupportedStacksWallet[];\n installed: SupportedStacksWallet[];\n}\n\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n if (!address || !provider || !onConnect) return;\n\n onConnect(provider, address);\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignMessageVariables {\n message: string;\n publicKey?: string;\n}\n\nexport interface SignMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","export const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n WriteContractVariables,\n WriteContractOptions,\n} from './use-write-contract.types';\n\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(variables.args),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: variables.args,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const writeContract = useCallback(\n (variables: WriteContractVariables, options?: WriteContractOptions) => {\n writeContractAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n setBnsName(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n void fetchBnsName();\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts"],"names":["WalletConnect","getSelectedProvider","connect","useState","useEffect","DEFAULT_PROVIDERS","WALLET_CONNECT_PROVIDER","createContext","useRef","setSelectedProviderId","useCallback","gen","clearSelectedProviderId","wc","request","getSelectedProviderId","data","useMemo","jsx","useContext","error","postConditionToHex","cvToHex","response","PostConditionMode","getPrimaryName"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","export const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\nexport interface StacksWallets {\n supported: SupportedStacksWallet[];\n installed: SupportedStacksWallet[];\n}\n\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Track whether the wallet was previously connected so we only fire\n // onConnect on the initial disconnected → connected transition (#23)\n const wasConnectedRef = useRef(false);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n const isConnected = !!address && !!provider;\n\n if (isConnected && !wasConnectedRef.current) {\n onConnect?.(provider, address);\n }\n\n wasConnectedRef.current = isConnected;\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignMessageVariables {\n message: string;\n publicKey?: string;\n}\n\nexport interface SignMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","export const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n WriteContractVariables,\n WriteContractOptions,\n} from './use-write-contract.types';\n\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(variables.args),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: variables.args,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const writeContract = useCallback(\n (variables: WriteContractVariables, options?: WriteContractOptions) => {\n writeContractAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n if (cancelled) return;\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n if (cancelled) return;\n setBnsName(null);\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n void fetchBnsName();\n\n return () => {\n cancelled = true;\n };\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n"]}
|
package/dist/index.js
CHANGED
|
@@ -284,6 +284,7 @@ var StacksWalletProvider = ({
|
|
|
284
284
|
const [provider, setProvider] = useState();
|
|
285
285
|
const [isConnecting, setIsConnecting] = useState(false);
|
|
286
286
|
const connectGenRef = useRef(0);
|
|
287
|
+
const wasConnectedRef = useRef(false);
|
|
287
288
|
const wcInitRef = useRef(null);
|
|
288
289
|
const walletConnectRef = useRef(walletConnect);
|
|
289
290
|
walletConnectRef.current = walletConnect;
|
|
@@ -507,8 +508,11 @@ var StacksWalletProvider = ({
|
|
|
507
508
|
);
|
|
508
509
|
}, [address, provider]);
|
|
509
510
|
useEffect(() => {
|
|
510
|
-
|
|
511
|
-
|
|
511
|
+
const isConnected = !!address && !!provider;
|
|
512
|
+
if (isConnected && !wasConnectedRef.current) {
|
|
513
|
+
onConnect?.(provider, address);
|
|
514
|
+
}
|
|
515
|
+
wasConnectedRef.current = isConnected;
|
|
512
516
|
}, [address, provider, onConnect]);
|
|
513
517
|
const handleAddressChange = useCallback(
|
|
514
518
|
(newAddress) => {
|
|
@@ -862,20 +866,28 @@ var useBnsName = (address) => {
|
|
|
862
866
|
setIsLoading(false);
|
|
863
867
|
return;
|
|
864
868
|
}
|
|
869
|
+
let cancelled = false;
|
|
865
870
|
const fetchBnsName = async () => {
|
|
866
871
|
setIsLoading(true);
|
|
867
872
|
try {
|
|
868
873
|
const network = getNetworkFromAddress(address);
|
|
869
874
|
const result = await getPrimaryName({ address, network });
|
|
875
|
+
if (cancelled) return;
|
|
870
876
|
const fullName = result ? `${result.name}.${result.namespace}` : null;
|
|
871
877
|
setBnsName(fullName);
|
|
872
878
|
} catch {
|
|
879
|
+
if (cancelled) return;
|
|
873
880
|
setBnsName(null);
|
|
874
881
|
} finally {
|
|
875
|
-
|
|
882
|
+
if (!cancelled) {
|
|
883
|
+
setIsLoading(false);
|
|
884
|
+
}
|
|
876
885
|
}
|
|
877
886
|
};
|
|
878
887
|
void fetchBnsName();
|
|
888
|
+
return () => {
|
|
889
|
+
cancelled = true;
|
|
890
|
+
};
|
|
879
891
|
}, [address]);
|
|
880
892
|
return { bnsName, isLoading };
|
|
881
893
|
};
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts"],"names":["getSelectedProvider","useState","useEffect","WalletConnect","gen","wc","data","useMemo","useCallback","request","error","response"],"mappings":"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","file":"index.js","sourcesContent":["import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","export const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\nexport interface StacksWallets {\n supported: SupportedStacksWallet[];\n installed: SupportedStacksWallet[];\n}\n\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n if (!address || !provider || !onConnect) return;\n\n onConnect(provider, address);\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignMessageVariables {\n message: string;\n publicKey?: string;\n}\n\nexport interface SignMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","export const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n WriteContractVariables,\n WriteContractOptions,\n} from './use-write-contract.types';\n\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(variables.args),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: variables.args,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const writeContract = useCallback(\n (variables: WriteContractVariables, options?: WriteContractOptions) => {\n writeContractAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n setBnsName(null);\n } finally {\n setIsLoading(false);\n }\n };\n\n void fetchBnsName();\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts"],"names":["getSelectedProvider","useState","useEffect","WalletConnect","gen","wc","data","useMemo","useCallback","request","error","response"],"mappings":"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","file":"index.js","sourcesContent":["import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","export const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\nexport interface StacksWallets {\n supported: SupportedStacksWallet[];\n installed: SupportedStacksWallet[];\n}\n\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Track whether the wallet was previously connected so we only fire\n // onConnect on the initial disconnected → connected transition (#23)\n const wasConnectedRef = useRef(false);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n const isConnected = !!address && !!provider;\n\n if (isConnected && !wasConnectedRef.current) {\n onConnect?.(provider, address);\n }\n\n wasConnectedRef.current = isConnected;\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignMessageVariables {\n message: string;\n publicKey?: string;\n}\n\nexport interface SignMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","export const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n WriteContractVariables,\n WriteContractOptions,\n} from './use-write-contract.types';\n\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<Error | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new Error('Wallet is not connected');\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new Error('OKX wallet not found');\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(variables.args),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: variables.args,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error =\n err instanceof Error ? err : new Error(String(err));\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const writeContract = useCallback(\n (variables: WriteContractVariables, options?: WriteContractOptions) => {\n writeContractAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n if (cancelled) return;\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n if (cancelled) return;\n setBnsName(null);\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n void fetchBnsName();\n\n return () => {\n cancelled = true;\n };\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n"]}
|