coinley-pay 0.34.0 → 0.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import { jsxs, jsx, Fragment } from "react/jsx-runtime";
5
5
  import { useState, useRef, useEffect, useCallback, useMemo } from "react";
6
6
  import { useConnect, useAccount, useSwitchChain, useSendTransaction, useWaitForTransactionReceipt, WagmiProvider, useDisconnect } from "wagmi";
7
7
  import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
8
- import { s as sdkAnalytics, c as clarityAnalytics, d as dist, a as Buffer2, B as Buffer$1, g as getCurrencyInfo, p as prefetchRates, i as isSupportedCurrency, b as convertToUSD, f as formatCurrency } from "./index-C8sFF-PH.js";
8
+ import { s as sdkAnalytics, c as clarityAnalytics, d as dist, a as Buffer2, B as Buffer$1, g as getCurrencyInfo, p as prefetchRates, i as isSupportedCurrency, b as convertToUSD, f as formatCurrency } from "./index-QlVbEn4w.js";
9
9
  import { createConfig, fallback, http, getAccount as getAccount$1, getWalletClient, simulateContract, writeContract, readContract, waitForTransactionReceipt, estimateFeesPerGas as estimateFeesPerGas$1 } from "@wagmi/core";
10
10
  import { injected, metaMask, coinbaseWallet, walletConnect } from "@wagmi/connectors";
11
11
  import { defineChain as defineChain$1, erc20Abi, http as http$1, createPublicClient, fallback as fallback$1 } from "viem";
@@ -21150,7 +21150,7 @@ const WalletSelector = ({
21150
21150
  try {
21151
21151
  setAppKitError(null);
21152
21152
  setWalletConnectAddress(solanaAccountState.address);
21153
- const { createWalletConnectAdapter } = await import("./appKitSolana-D3rTiqkR.js");
21153
+ const { createWalletConnectAdapter } = await import("./appKitSolana-C1LLrCaN.js");
21154
21154
  const adapter = createWalletConnectAdapter(solanaAccountState.address);
21155
21155
  await solanaWallet.connectWalletConnect(adapter, solanaAccountState.address);
21156
21156
  console.log("✅ WalletConnect synced with SDK");
@@ -21255,7 +21255,7 @@ const WalletSelector = ({
21255
21255
  setAppKitLoading(true);
21256
21256
  setAppKitError(null);
21257
21257
  try {
21258
- const { initializeAppKitEVM, openAppKitModal } = await import("./appKitEVM-ByJCOOlj.js");
21258
+ const { initializeAppKitEVM, openAppKitModal } = await import("./appKitEVM-eozvDNUh.js");
21259
21259
  await initializeAppKitEVM(wagmiConfig);
21260
21260
  await openAppKitModal();
21261
21261
  } catch (error) {
@@ -21275,7 +21275,7 @@ const WalletSelector = ({
21275
21275
  setAppKitError(null);
21276
21276
  try {
21277
21277
  console.log("📦 Loading AppKit Solana module...");
21278
- const { initializeAppKitSolana } = await import("./appKitSolana-D3rTiqkR.js");
21278
+ const { initializeAppKitSolana } = await import("./appKitSolana-C1LLrCaN.js");
21279
21279
  console.log("✅ Module loaded, initializing...");
21280
21280
  const modal = await initializeAppKitSolana(solanaWallet);
21281
21281
  console.log("✅ AppKit Solana initialized successfully");
@@ -23344,6 +23344,7 @@ const CoinleyPaymentInternal = ({
23344
23344
  const [ccPhase, setCcPhase] = useState("idle");
23345
23345
  const [ccError, setCcError] = useState(null);
23346
23346
  const [ccGenerating, setCcGenerating] = useState(false);
23347
+ const [ccManualCheckStatus, setCcManualCheckStatus] = useState("idle");
23347
23348
  const ccSucceeded = useRef(false);
23348
23349
  const [networkSearch, setNetworkSearch] = useState("");
23349
23350
  const [walletNetworkSearch, setWalletNetworkSearch] = useState("");
@@ -25079,6 +25080,7 @@ const CoinleyPaymentInternal = ({
25079
25080
  const p = r.payment || r;
25080
25081
  setCcResult(p);
25081
25082
  setCcPhase("awaiting_deposit");
25083
+ setCcManualCheckStatus("idle");
25082
25084
  setCcQrCode(await QRCode.toDataURL(p.relayDepositAddress, { width: 220, margin: 1 }));
25083
25085
  } catch (e) {
25084
25086
  setCcError(e.message || "Could not generate payment address");
@@ -25086,6 +25088,26 @@ const CoinleyPaymentInternal = ({
25086
25088
  setCcGenerating(false);
25087
25089
  }
25088
25090
  };
25091
+ const handleCrossChainManualCheck = async () => {
25092
+ if (!(ccResult == null ? void 0 : ccResult.id) || ccManualCheckStatus === "checking") return;
25093
+ setCcManualCheckStatus("checking");
25094
+ setCcError(null);
25095
+ try {
25096
+ const status = await paymentFlow.api.getCrossChainStatus(ccResult.id);
25097
+ setCcPhase(status.phase);
25098
+ if ((status.phase === "received" || status.phase === "settled") && !ccSucceeded.current) {
25099
+ ccSucceeded.current = true;
25100
+ onSuccess == null ? void 0 : onSuccess(status);
25101
+ } else if (status.phase === "failed") {
25102
+ setCcManualCheckStatus("failed");
25103
+ } else {
25104
+ setCcManualCheckStatus("not_found");
25105
+ }
25106
+ } catch (error2) {
25107
+ setCcError(error2.message || "Could not check this payment yet. Please try again.");
25108
+ setCcManualCheckStatus("idle");
25109
+ }
25110
+ };
25089
25111
  useEffect(() => {
25090
25112
  if (!(ccResult == null ? void 0 : ccResult.id)) return;
25091
25113
  let cancelled = false;
@@ -26120,6 +26142,7 @@ const CoinleyPaymentInternal = ({
26120
26142
  const getNetworkDisplayName = (network) => (network == null ? void 0 : network.name) || (network == null ? void 0 : network.displayName) || (network == null ? void 0 : network.shortName) || "Network";
26121
26143
  const getNetworkDisplayLogo = (network) => (network == null ? void 0 : network.logo) || (network == null ? void 0 : network.logoURI) || (network == null ? void 0 : network.icon) || getNetworkLogoUrl(network) || getFallbackNetworkLogoUrl(getNetworkDisplayName(network));
26122
26144
  const isCrossChainTransferSetupView = activeTab === PAYMENT_TABS.TRANSFER && !ccResult;
26145
+ const isCrossChainTransferAddressView = activeTab === PAYMENT_TABS.TRANSFER && !!ccResult;
26123
26146
  const isTransferSetupView = activeTab === PAYMENT_TABS.TRANSFER && !ccResult && (!selectedNetwork || !selectedToken || !(paymentData == null ? void 0 : paymentData.depositAddress));
26124
26147
  const isQrSetupView = activeTab === PAYMENT_TABS.QR && (!selectedNetwork || !selectedToken || !paymentData || (paymentData == null ? void 0 : paymentData.isDepositPayment));
26125
26148
  const isWalletExtensionSetupView = activeTab === PAYMENT_TABS.WALLET && !showWalletConfirm && !(showMobileWalletPicker && isMobile) && (!connectedWalletType || !selectedNetwork || !selectedToken);
@@ -26163,6 +26186,13 @@ const CoinleyPaymentInternal = ({
26163
26186
  method.tab
26164
26187
  )) })
26165
26188
  ] });
26189
+ const renderUnderpaymentWarning = (title = "Amount received is less than expected", description = null) => /* @__PURE__ */ jsxs("div", { className: "mb-5 rounded-lg border border-[#F5E5B8] bg-[#FFF9E8] px-3 py-2", children: [
26190
+ /* @__PURE__ */ jsxs("div", { className: `flex items-start gap-2 text-[#B54708] ${title && description ? "mb-1" : ""}`, children: [
26191
+ /* @__PURE__ */ jsx("svg", { className: "mt-0.5 h-4 w-4 flex-shrink-0", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 9v4m0 4h.01M12 3a9 9 0 110 18 9 9 0 010-18z" }) }),
26192
+ title ? /* @__PURE__ */ jsx("p", { className: "text-sm font-semibold", children: title }) : /* @__PURE__ */ jsx("p", { className: "text-xs leading-5 text-[#B54708]", children: description })
26193
+ ] }),
26194
+ title && description && /* @__PURE__ */ jsx("p", { className: "pl-6 text-xs leading-5 text-[#B54708]", children: description })
26195
+ ] });
26166
26196
  networks.filter((network) => {
26167
26197
  const chainId = parseInt(network.chainId);
26168
26198
  const supportedChains = [8453, 56, 42161, 137, 10, 43114, 143, 59144, 534352, 130];
@@ -26708,6 +26738,13 @@ const CoinleyPaymentInternal = ({
26708
26738
  disabled: !ccOriginToken || ccGenerating || isConverting
26709
26739
  });
26710
26740
  }
26741
+ if (isCrossChainTransferAddressView) {
26742
+ return renderFooterPrimaryButton({
26743
+ label: ccManualCheckStatus === "checking" ? "Checking for your payment..." : "I've made transfer",
26744
+ onClick: handleCrossChainManualCheck,
26745
+ disabled: ccManualCheckStatus === "checking" || ccPhase === "received" || ccPhase === "settled"
26746
+ });
26747
+ }
26711
26748
  if (activeTab === PAYMENT_TABS.TRANSFER && selectedNetwork && selectedToken && (paymentData == null ? void 0 : paymentData.depositAddress) && underpaymentInfo) {
26712
26749
  if (underpaymentView === "choice") {
26713
26750
  return renderFooterPrimaryButton({
@@ -26718,7 +26755,7 @@ const CoinleyPaymentInternal = ({
26718
26755
  }
26719
26756
  if (underpaymentView === "offset") {
26720
26757
  return renderFooterPrimaryButton({
26721
- label: manualCheckStatus === "checking" ? "Checking for your payment..." : "I've sent the offset",
26758
+ label: manualCheckStatus === "checking" ? "Checking for your payment..." : "I've made transfer",
26722
26759
  onClick: handleDepositManualCheck,
26723
26760
  disabled: manualCheckStatus === "checking"
26724
26761
  });
@@ -27105,20 +27142,7 @@ const CoinleyPaymentInternal = ({
27105
27142
  ccError && /* @__PURE__ */ jsx("div", { className: "mb-3 rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-xs font-medium text-red-600", children: ccError })
27106
27143
  ] }),
27107
27144
  ccResult && /* @__PURE__ */ jsxs("div", { className: "pt-1", children: [
27108
- /* @__PURE__ */ jsxs("div", { className: "mb-4 text-center", children: [
27109
- /* @__PURE__ */ jsx("p", { className: "text-xs uppercase tracking-wide text-[#9EA0A8]", children: "Send exactly" }),
27110
- /* @__PURE__ */ jsxs("p", { className: "text-2xl font-bold text-[#1F2430]", children: [
27111
- ccResult.amountToSendFormatted,
27112
- " ",
27113
- ccOriginToken == null ? void 0 : ccOriginToken.symbol
27114
- ] }),
27115
- /* @__PURE__ */ jsxs("p", { className: "text-sm text-[#535865]", children: [
27116
- "on ",
27117
- ccChainName(ccResult.originChainId)
27118
- ] })
27119
- ] }),
27120
- /* @__PURE__ */ jsx("p", { className: "mb-4 text-xs leading-5 text-[#9EA0A8]", children: "Simply scan the QR code which holds just the address, or copy it, and send the exact amount shown." }),
27121
- /* @__PURE__ */ jsxs("div", { className: "mb-5 flex flex-col gap-3 min-[380px]:flex-row min-[380px]:items-center", children: [
27145
+ /* @__PURE__ */ jsxs("div", { className: "mb-5 flex items-center gap-4", children: [
27122
27146
  /* @__PURE__ */ jsx("div", { className: "h-[92px] w-[92px] flex-shrink-0 bg-white", children: ccQrCode ? /* @__PURE__ */ jsx("img", { src: ccQrCode, alt: "Payment Address QR Code", className: "h-full w-full" }) : /* @__PURE__ */ jsx("div", { className: "flex h-full w-full items-center justify-center rounded-lg bg-gray-100", children: /* @__PURE__ */ jsx("div", { className: "h-6 w-6 animate-spin rounded-full border-2 border-[#E5E7EB] border-t-[#7042D2]" }) }) }),
27123
27147
  /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
27124
27148
  /* @__PURE__ */ jsx("p", { className: "mb-2 text-xs font-medium text-[#1F2430]", children: "Wallet address" }),
@@ -27136,6 +27160,11 @@ const CoinleyPaymentInternal = ({
27136
27160
  ] })
27137
27161
  ] })
27138
27162
  ] }),
27163
+ renderUnderpaymentWarning(
27164
+ "Important!",
27165
+ "Use this wallet address for this transfer only. Send from the selected network and include enough native token for network fees."
27166
+ ),
27167
+ ccManualCheckStatus === "not_found" && /* @__PURE__ */ jsx("div", { className: "mb-3 rounded-xl border border-amber-200 bg-amber-50 p-3", children: /* @__PURE__ */ jsx("p", { className: "text-sm leading-5 text-amber-700", children: "We have not detected your transfer yet. It can take a few moments to appear on-chain, and we will keep checking automatically." }) }),
27139
27168
  ccPhase === "failed" ? /* @__PURE__ */ jsx("div", { className: "rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-center text-xs font-medium text-red-600", children: "Payment failed — please try again" }) : ccPhase === "received" || ccPhase === "settled" ? /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-2 text-xs font-medium text-green-600", children: [
27140
27169
  /* @__PURE__ */ jsx("span", { className: "relative inline-flex h-2 w-2 rounded-full bg-green-500" }),
27141
27170
  "Payment received"
@@ -27195,6 +27224,7 @@ const CoinleyPaymentInternal = ({
27195
27224
  setCcQrCode("");
27196
27225
  setCcPhase("idle");
27197
27226
  setCcError(null);
27227
+ setCcManualCheckStatus("idle");
27198
27228
  ccSucceeded.current = false;
27199
27229
  return;
27200
27230
  }
@@ -27315,4 +27345,4 @@ export {
27315
27345
  isFeatureEnabled as i,
27316
27346
  logo as l
27317
27347
  };
27318
- //# sourceMappingURL=CoinleyPayment-DUMYMJUv.js.map
27348
+ //# sourceMappingURL=CoinleyPayment-D8aL6ChX.js.map
@@ -1,4 +1,4 @@
1
- import { i as isFeatureEnabled, F as FEATURES, c as chainTransports, W as WALLETCONNECT_PROJECT_ID, l as logo } from "./CoinleyPayment-DUMYMJUv.js";
1
+ import { i as isFeatureEnabled, F as FEATURES, c as chainTransports, W as WALLETCONNECT_PROJECT_ID, l as logo } from "./CoinleyPayment-D8aL6ChX.js";
2
2
  let appKitInstance = null;
3
3
  let isInitializing = false;
4
4
  let initializationPromise = null;
@@ -112,4 +112,4 @@ export {
112
112
  initializeAppKitEVM,
113
113
  openAppKitModal
114
114
  };
115
- //# sourceMappingURL=appKitEVM-ByJCOOlj.js.map
115
+ //# sourceMappingURL=appKitEVM-eozvDNUh.js.map
@@ -1,4 +1,4 @@
1
- import { F as FEATURES, l as logo, W as WALLETCONNECT_PROJECT_ID } from "./CoinleyPayment-DUMYMJUv.js";
1
+ import { F as FEATURES, l as logo, W as WALLETCONNECT_PROJECT_ID } from "./CoinleyPayment-D8aL6ChX.js";
2
2
  let appKitInstance = null;
3
3
  let isInitializing = false;
4
4
  let initializationPromise = null;
@@ -242,4 +242,4 @@ export {
242
242
  disconnectWalletConnect,
243
243
  initializeAppKitSolana
244
244
  };
245
- //# sourceMappingURL=appKitSolana-D3rTiqkR.js.map
245
+ //# sourceMappingURL=appKitSolana-C1LLrCaN.js.map