@subscrypts/subscrypts-sdk-react 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +2140 -0
- package/dist/components/buttons/SubscryptsButton.d.ts +19 -0
- package/dist/components/buttons/SubscryptsButton.d.ts.map +1 -0
- package/dist/components/buttons/index.d.ts +5 -0
- package/dist/components/buttons/index.d.ts.map +1 -0
- package/dist/components/checkout/CheckoutWizard.d.ts +22 -0
- package/dist/components/checkout/CheckoutWizard.d.ts.map +1 -0
- package/dist/components/checkout/ConfigurationStep.d.ts +15 -0
- package/dist/components/checkout/ConfigurationStep.d.ts.map +1 -0
- package/dist/components/checkout/TransactionStep.d.ts +15 -0
- package/dist/components/checkout/TransactionStep.d.ts.map +1 -0
- package/dist/components/checkout/index.d.ts +7 -0
- package/dist/components/checkout/index.d.ts.map +1 -0
- package/dist/components/guards/SubscriptionGuard.d.ts +25 -0
- package/dist/components/guards/SubscriptionGuard.d.ts.map +1 -0
- package/dist/components/guards/index.d.ts +5 -0
- package/dist/components/guards/index.d.ts.map +1 -0
- package/dist/components/index.d.ts +20 -0
- package/dist/components/index.d.ts.map +1 -0
- package/dist/components/merchant/MerchantDashboard.d.ts +24 -0
- package/dist/components/merchant/MerchantDashboard.d.ts.map +1 -0
- package/dist/components/merchant/index.d.ts +6 -0
- package/dist/components/merchant/index.d.ts.map +1 -0
- package/dist/components/pricing/PlanCard.d.ts +45 -0
- package/dist/components/pricing/PlanCard.d.ts.map +1 -0
- package/dist/components/pricing/PricingTable.d.ts +68 -0
- package/dist/components/pricing/PricingTable.d.ts.map +1 -0
- package/dist/components/pricing/index.d.ts +10 -0
- package/dist/components/pricing/index.d.ts.map +1 -0
- package/dist/components/shared/ErrorDisplay.d.ts +34 -0
- package/dist/components/shared/ErrorDisplay.d.ts.map +1 -0
- package/dist/components/shared/LoadingSpinner.d.ts +5 -0
- package/dist/components/shared/LoadingSpinner.d.ts.map +1 -0
- package/dist/components/shared/Modal.d.ts +12 -0
- package/dist/components/shared/Modal.d.ts.map +1 -0
- package/dist/components/shared/NetworkSwitchPrompt.d.ts +33 -0
- package/dist/components/shared/NetworkSwitchPrompt.d.ts.map +1 -0
- package/dist/components/shared/SubscryptsErrorBoundary.d.ts +41 -0
- package/dist/components/shared/SubscryptsErrorBoundary.d.ts.map +1 -0
- package/dist/components/subscription/ConfirmDialog.d.ts +44 -0
- package/dist/components/subscription/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/subscription/ManageSubscriptionModal.d.ts +35 -0
- package/dist/components/subscription/ManageSubscriptionModal.d.ts.map +1 -0
- package/dist/components/subscription/SubscriptionCard.d.ts +35 -0
- package/dist/components/subscription/SubscriptionCard.d.ts.map +1 -0
- package/dist/components/subscription/SubscriptionDashboard.d.ts +40 -0
- package/dist/components/subscription/SubscriptionDashboard.d.ts.map +1 -0
- package/dist/components/subscription/index.d.ts +12 -0
- package/dist/components/subscription/index.d.ts.map +1 -0
- package/dist/components/wallet/ConnectWalletModal.d.ts +29 -0
- package/dist/components/wallet/ConnectWalletModal.d.ts.map +1 -0
- package/dist/components/wallet/index.d.ts +6 -0
- package/dist/components/wallet/index.d.ts.map +1 -0
- package/dist/constants/index.d.ts +16 -0
- package/dist/constants/index.d.ts.map +1 -0
- package/dist/context/SubscryptsContext.d.ts +36 -0
- package/dist/context/SubscryptsContext.d.ts.map +1 -0
- package/dist/context/SubscryptsProvider.d.ts +28 -0
- package/dist/context/SubscryptsProvider.d.ts.map +1 -0
- package/dist/context/index.d.ts +7 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/contract/abis/Subscrypts.d.ts +2917 -0
- package/dist/contract/abis/Subscrypts.d.ts.map +1 -0
- package/dist/contract/abis/dexFactoryABI.d.ts +184 -0
- package/dist/contract/abis/dexFactoryABI.d.ts.map +1 -0
- package/dist/contract/abis/dexPairABI.d.ts +775 -0
- package/dist/contract/abis/dexPairABI.d.ts.map +1 -0
- package/dist/contract/abis/dexPositionManagerABI.d.ts +948 -0
- package/dist/contract/abis/dexPositionManagerABI.d.ts.map +1 -0
- package/dist/contract/abis/dexQuoterABI.d.ts +206 -0
- package/dist/contract/abis/dexQuoterABI.d.ts.map +1 -0
- package/dist/contract/abis/dexRouterABI.d.ts +439 -0
- package/dist/contract/abis/dexRouterABI.d.ts.map +1 -0
- package/dist/contract/abis/dexUSDCABI.d.ts +132 -0
- package/dist/contract/abis/dexUSDCABI.d.ts.map +1 -0
- package/dist/contract/abis/index.d.ts +15 -0
- package/dist/contract/abis/index.d.ts.map +1 -0
- package/dist/contract/config.d.ts +40 -0
- package/dist/contract/config.d.ts.map +1 -0
- package/dist/contract/index.d.ts +12 -0
- package/dist/contract/index.d.ts.map +1 -0
- package/dist/contract/methods.d.ts +305 -0
- package/dist/contract/methods.d.ts.map +1 -0
- package/dist/hooks/events/index.d.ts +6 -0
- package/dist/hooks/events/index.d.ts.map +1 -0
- package/dist/hooks/events/useSubscryptsEvents.d.ts +63 -0
- package/dist/hooks/events/useSubscryptsEvents.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/merchant/index.d.ts +10 -0
- package/dist/hooks/merchant/index.d.ts.map +1 -0
- package/dist/hooks/merchant/useMerchantPlans.d.ts +30 -0
- package/dist/hooks/merchant/useMerchantPlans.d.ts.map +1 -0
- package/dist/hooks/merchant/useMerchantRevenue.d.ts +59 -0
- package/dist/hooks/merchant/useMerchantRevenue.d.ts.map +1 -0
- package/dist/hooks/merchant/useMerchantSubscribers.d.ts +54 -0
- package/dist/hooks/merchant/useMerchantSubscribers.d.ts.map +1 -0
- package/dist/hooks/plans/index.d.ts +12 -0
- package/dist/hooks/plans/index.d.ts.map +1 -0
- package/dist/hooks/plans/usePlan.d.ts +33 -0
- package/dist/hooks/plans/usePlan.d.ts.map +1 -0
- package/dist/hooks/plans/usePlans.d.ts +36 -0
- package/dist/hooks/plans/usePlans.d.ts.map +1 -0
- package/dist/hooks/plans/usePlansByMerchant.d.ts +35 -0
- package/dist/hooks/plans/usePlansByMerchant.d.ts.map +1 -0
- package/dist/hooks/pricing/index.d.ts +10 -0
- package/dist/hooks/pricing/index.d.ts.map +1 -0
- package/dist/hooks/pricing/usePlanPrice.d.ts +59 -0
- package/dist/hooks/pricing/usePlanPrice.d.ts.map +1 -0
- package/dist/hooks/pricing/useSUBSPrice.d.ts +39 -0
- package/dist/hooks/pricing/useSUBSPrice.d.ts.map +1 -0
- package/dist/hooks/subscriptions/index.d.ts +12 -0
- package/dist/hooks/subscriptions/index.d.ts.map +1 -0
- package/dist/hooks/subscriptions/useManageSubscription.d.ts +39 -0
- package/dist/hooks/subscriptions/useManageSubscription.d.ts.map +1 -0
- package/dist/hooks/subscriptions/useMySubscriptions.d.ts +53 -0
- package/dist/hooks/subscriptions/useMySubscriptions.d.ts.map +1 -0
- package/dist/hooks/subscriptions/useSubscribe.d.ts +58 -0
- package/dist/hooks/subscriptions/useSubscribe.d.ts.map +1 -0
- package/dist/hooks/subscriptions/useSubscriptionStatus.d.ts +34 -0
- package/dist/hooks/subscriptions/useSubscriptionStatus.d.ts.map +1 -0
- package/dist/hooks/tokens/index.d.ts +6 -0
- package/dist/hooks/tokens/index.d.ts.map +1 -0
- package/dist/hooks/tokens/useTokenBalance.d.ts +36 -0
- package/dist/hooks/tokens/useTokenBalance.d.ts.map +1 -0
- package/dist/hooks/wallet/index.d.ts +6 -0
- package/dist/hooks/wallet/index.d.ts.map +1 -0
- package/dist/hooks/wallet/useWallet.d.ts +40 -0
- package/dist/hooks/wallet/useWallet.d.ts.map +1 -0
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +42 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7850 -0
- package/dist/index.js.map +1 -0
- package/dist/services/cache.service.d.ts +89 -0
- package/dist/services/cache.service.d.ts.map +1 -0
- package/dist/services/index.d.ts +7 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/token.service.d.ts +43 -0
- package/dist/services/token.service.d.ts.map +1 -0
- package/dist/services/wallet.service.d.ts +46 -0
- package/dist/services/wallet.service.d.ts.map +1 -0
- package/dist/style.css +3 -0
- package/dist/styles.d.ts +2 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/types/component.types.d.ts +192 -0
- package/dist/types/component.types.d.ts.map +1 -0
- package/dist/types/contract.types.d.ts +81 -0
- package/dist/types/contract.types.d.ts.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/subscription.types.d.ts +65 -0
- package/dist/types/subscription.types.d.ts.map +1 -0
- package/dist/types/wallet.types.d.ts +53 -0
- package/dist/types/wallet.types.d.ts.map +1 -0
- package/dist/utils/errorMessages.d.ts +44 -0
- package/dist/utils/errorMessages.d.ts.map +1 -0
- package/dist/utils/errors.d.ts +60 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/formatters.d.ts +44 -0
- package/dist/utils/formatters.d.ts.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +80 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/permit.utils.d.ts +52 -0
- package/dist/utils/permit.utils.d.ts.map +1 -0
- package/dist/utils/subscriptionHelpers.d.ts +67 -0
- package/dist/utils/subscriptionHelpers.d.ts.map +1 -0
- package/dist/utils/subscriptionStatus.d.ts +48 -0
- package/dist/utils/subscriptionStatus.d.ts.map +1 -0
- package/dist/utils/validators.d.ts +76 -0
- package/dist/utils/validators.d.ts.map +1 -0
- package/dist/wallet/ExternalConnector.d.ts +32 -0
- package/dist/wallet/ExternalConnector.d.ts.map +1 -0
- package/dist/wallet/InjectedConnector.d.ts +55 -0
- package/dist/wallet/InjectedConnector.d.ts.map +1 -0
- package/dist/wallet/index.d.ts +9 -0
- package/dist/wallet/index.d.ts.map +1 -0
- package/dist/wallet/sessionStore.d.ts +28 -0
- package/dist/wallet/sessionStore.d.ts.map +1 -0
- package/dist/wallet/types.d.ts +66 -0
- package/dist/wallet/types.d.ts.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useTokenBalance Hook
|
|
3
|
+
*
|
|
4
|
+
* Get token balance for SUBS or USDC
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Token type
|
|
8
|
+
*/
|
|
9
|
+
export type TokenType = 'SUBS' | 'USDC';
|
|
10
|
+
/**
|
|
11
|
+
* Hook return type
|
|
12
|
+
*/
|
|
13
|
+
export interface UseTokenBalanceReturn {
|
|
14
|
+
/** Raw balance (bigint) */
|
|
15
|
+
balance: bigint | null;
|
|
16
|
+
/** Formatted balance (string) */
|
|
17
|
+
formatted: string;
|
|
18
|
+
/** Loading state */
|
|
19
|
+
isLoading: boolean;
|
|
20
|
+
/** Manually refresh balance */
|
|
21
|
+
refetch: () => Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Hook to get token balance
|
|
25
|
+
*
|
|
26
|
+
* @param token - Token to get balance for ('SUBS' or 'USDC')
|
|
27
|
+
*
|
|
28
|
+
* @example
|
|
29
|
+
* ```tsx
|
|
30
|
+
* const { balance, formatted, isLoading } = useTokenBalance('SUBS');
|
|
31
|
+
*
|
|
32
|
+
* return <div>Balance: {formatted} SUBS</div>;
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function useTokenBalance(token: TokenType): UseTokenBalanceReturn;
|
|
36
|
+
//# sourceMappingURL=useTokenBalance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTokenBalance.d.ts","sourceRoot":"","sources":["../../../src/hooks/tokens/useTokenBalance.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,oBAAoB;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,+BAA+B;IAC/B,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC9B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,GAAG,qBAAqB,CAgBvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/hooks/wallet/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { WalletState } from '../../types';
|
|
2
|
+
import { WalletConnector, ConnectorId } from '../../wallet/types';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hook return type
|
|
6
|
+
*/
|
|
7
|
+
export interface UseWalletReturn extends WalletState {
|
|
8
|
+
/** Connect wallet (only available if wallet management is enabled) */
|
|
9
|
+
connect?: () => Promise<void>;
|
|
10
|
+
/** Disconnect wallet (only available if wallet management is enabled) */
|
|
11
|
+
disconnect?: () => Promise<void>;
|
|
12
|
+
/** Switch network */
|
|
13
|
+
switchNetwork: (chainId: number) => Promise<void>;
|
|
14
|
+
/** Available wallet connectors */
|
|
15
|
+
connectors: WalletConnector[];
|
|
16
|
+
/** Currently active connector (null if not connected) */
|
|
17
|
+
activeConnector: WalletConnector | null;
|
|
18
|
+
/** Connect with a specific connector by ID */
|
|
19
|
+
connectWith: (connectorId: ConnectorId) => Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Hook to access wallet state and connector info
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* const { address, isConnected, connect, disconnect, connectors, connectWith } = useWallet();
|
|
27
|
+
*
|
|
28
|
+
* if (!isConnected) {
|
|
29
|
+
* return <button onClick={connect}>Connect Wallet</button>;
|
|
30
|
+
* }
|
|
31
|
+
*
|
|
32
|
+
* return (
|
|
33
|
+
* <button onClick={disconnect}>
|
|
34
|
+
* {address?.slice(0, 6)}...{address?.slice(-4)}
|
|
35
|
+
* </button>
|
|
36
|
+
* );
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function useWallet(): UseWalletReturn;
|
|
40
|
+
//# sourceMappingURL=useWallet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWallet.d.ts","sourceRoot":"","sources":["../../../src/hooks/wallet/useWallet.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEvE;;GAEG;AACH,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,sEAAsE;IACtE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,qBAAqB;IACrB,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,kCAAkC;IAClC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,yDAAyD;IACzD,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,8CAA8C;IAC9C,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,SAAS,IAAI,eAAe,CAY3C"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";var Bt=Object.defineProperty;var Ut=(t,e,n)=>e in t?Bt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var M=(t,e,n)=>Ut(t,typeof e!="symbol"?e+"":e,n);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("ethers"),s=require("react/jsx-runtime"),u=require("react"),Ze=u.createContext(void 0);function U(){const t=u.useContext(Ze);if(!t)throw new Error("useSubscrypts must be used within a SubscryptsProvider");return t}class V extends Error{constructor(e,n,a){super(n),this.code=e,this.details=a,this.name="SubscryptsError",Object.setPrototypeOf(this,V.prototype)}}class B extends V{constructor(e,n){super("WALLET_ERROR",e,n),this.name="WalletError"}}class ue extends V{constructor(e,n){super("NETWORK_ERROR",e,n),this.name="NetworkError"}}class te extends V{constructor(e,n){super("CONTRACT_ERROR",e,n),this.name="ContractError"}}class fe extends V{constructor(e,n,a){super("INSUFFICIENT_BALANCE",`Insufficient ${a} balance. Required: ${e}, Available: ${n}`,{required:e.toString(),available:n.toString(),token:a}),this.required=e,this.available=n,this.token=a,this.name="InsufficientBalanceError"}}class ne extends V{constructor(e,n,a){super("TRANSACTION_ERROR",e,{...a,txHash:n}),this.txHash=n,this.name="TransactionError"}}class W extends V{constructor(e,n){super("VALIDATION_ERROR",n,{field:e}),this.name="ValidationError"}}class be extends V{constructor(n,a,r){super("SANCTIONS_ERROR",`Address ${n} is sanctioned and cannot ${a?"receive payments":"create subscriptions"}`,r);M(this,"address");M(this,"isMerchant");this.name="SanctionsError",this.address=n,this.isMerchant=a}}class Lt{constructor(){M(this,"provider",null)}async connect(){if(typeof window>"u"||!window.ethereum)throw new B("No Ethereum wallet found. Please install MetaMask or another Web3 wallet.");try{const e=window.ethereum;this.provider=new j.BrowserProvider(e);const n=await this.provider.send("eth_requestAccounts",[]);if(!n||n.length===0)throw new B("No accounts found. Please unlock your wallet.");const a=await this.provider.getNetwork(),r=Number(a.chainId);return{provider:this.provider,address:n[0],chainId:r}}catch(e){throw e instanceof B?e:new B("Failed to connect wallet",{error:e})}}async switchNetwork(e){if(!window.ethereum)throw new B("No Ethereum wallet found");try{await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${e.chainId.toString(16)}`}]})}catch(n){if(n.code===4902)await this.addNetwork(e);else throw new ue(`Failed to switch to ${e.name}`,{chainId:e.chainId,error:n})}}async addNetwork(e){if(!window.ethereum)throw new B("No Ethereum wallet found");try{await window.ethereum.request({method:"wallet_addEthereumChain",params:[{chainId:`0x${e.chainId.toString(16)}`,chainName:e.name,nativeCurrency:e.nativeCurrency,rpcUrls:[e.rpcUrl],blockExplorerUrls:[e.blockExplorer]}]})}catch(n){throw new ue(`Failed to add ${e.name} network`,{network:e,error:n})}}getProvider(){return this.provider}onAccountsChanged(e){window.ethereum&&window.ethereum.on("accountsChanged",e)}onChainChanged(e){window.ethereum&&window.ethereum.on("chainChanged",e)}removeAccountsChangedListener(e){window.ethereum&&window.ethereum.removeListener("accountsChanged",e)}removeChainChangedListener(e){window.ethereum&&window.ethereum.removeListener("chainChanged",e)}}const K=42161,Ft="Arbitrum One",Ot=["https://arb1.arbitrum.io/rpc","https://rpc.ankr.com/arbitrum","https://arbitrum.llamarpc.com"],$t=Ot[0],qt="https://arbiscan.io",Ae={chainId:K,name:Ft,rpcUrl:$t,blockExplorer:qt,nativeCurrency:{name:"Ether",symbol:"ETH",decimals:18}},Ie="0xE2E5409C4B4Be5b67C69Cc2C6507B0598D069Eac",Ht=Ie,_e="0xaf88d065e77c8cC2239327C5EDb3A432268e5831",Q={SUBS:18,USDC:6,ETH:18},Pe="0x61fFE014bA17989E743c5F6cB21bF9697530B21e",Wt=3e3,je="0x000000000022D473030F116dDEE9F6B43aC78BA3",se={NETWORK:"arbitrum",BALANCE_REFRESH_INTERVAL:3e4,SUBSCRIPTION_CACHE_TIME:3e4,DEFAULT_CYCLE_LIMIT:12,TRANSACTION_DEADLINE_SECONDS:300,PERMIT_DEADLINE_SECONDS:1800,SLIPPAGE_BUFFER_BPS:50,UNISWAP_FEE_TIER:Wt};function Vt(t){return t===K}function Gt(t){if(t!==K)throw new Error(`Subscrypts only deployed on Arbitrum One (chain ${K})`);return Ie}const we=[{inputs:[],stateMutability:"nonpayable",type:"constructor"},{inputs:[{internalType:"address",name:"implementation",type:"address"}],name:"ERC1967InvalidImplementation",type:"error"},{inputs:[],name:"ERC1967NonPayable",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"allowance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientAllowance",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"},{internalType:"uint256",name:"balance",type:"uint256"},{internalType:"uint256",name:"needed",type:"uint256"}],name:"ERC20InsufficientBalance",type:"error"},{inputs:[{internalType:"address",name:"approver",type:"address"}],name:"ERC20InvalidApprover",type:"error"},{inputs:[{internalType:"address",name:"receiver",type:"address"}],name:"ERC20InvalidReceiver",type:"error"},{inputs:[{internalType:"address",name:"sender",type:"address"}],name:"ERC20InvalidSender",type:"error"},{inputs:[{internalType:"address",name:"spender",type:"address"}],name:"ERC20InvalidSpender",type:"error"},{inputs:[],name:"UUPSUnauthorizedCallContext",type:"error"},{inputs:[{internalType:"bytes32",name:"slot",type:"bytes32"}],name:"UUPSUnsupportedProxiableUUID",type:"error"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!1,internalType:"uint256",name:"amt",type:"uint256"}],name:"BurnByAdmin",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"bytes4",name:"selector",type:"bytes4"},{indexed:!0,internalType:"address",name:"facet",type:"address"}],name:"FacetSelectorUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"target",type:"address"},{indexed:!1,internalType:"bool",name:"frozen",type:"bool"}],name:"FrozenFunds",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint8",name:"version",type:"uint8"}],name:"Initialized",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"amt",type:"uint256"}],name:"MintByAdmin",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"previousOwner",type:"address"},{indexed:!0,internalType:"address",name:"newOwner",type:"address"}],name:"OwnershipTransferred",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"account",type:"address"},{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"ServiceAccountChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"from",type:"address"},{indexed:!0,internalType:"address",name:"to",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Transfer",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"implementation",type:"address"}],name:"Upgraded",type:"event"},{stateMutability:"payable",type:"fallback"},{inputs:[],name:"UPGRADE_INTERFACE_VERSION",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"_planAutoIncrement",outputs:[{internalType:"uint256",name:"_value",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"_subscriptionAutoIncrement",outputs:[{internalType:"uint256",name:"_value",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"value",type:"uint256"}],name:"burn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"amt",type:"uint256"}],name:"burnByAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"burnFrom",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"contractAddress",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"acct",type:"address"},{internalType:"bool",name:"freeze",type:"bool"}],name:"contractFreezeAccount",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"contractFundAddress",outputs:[{internalType:"address payable",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"contractHaltCurrencyUSD",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"contractHaltNonServiceTransfers",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"contractHaltPlanCreation",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"contractHaltSubcriptions",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"contractHaltSubscriptionPayments",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bool",name:"addAcct",type:"bool"},{internalType:"bool",name:"delAcct",type:"bool"},{internalType:"address",name:"acct",type:"address"}],name:"contractServiceAccountsCHG",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexFactory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexPair",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexPositionManager",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexQuoter",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexRouter",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"dexUSDC",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"facetAdmin",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"facetPaymentUsdc",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"facetSubscription",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"facetView",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getContractDetails",outputs:[{internalType:"string",name:"Symbol",type:"string"},{internalType:"address",name:"Owner",type:"address"},{internalType:"address",name:"ContractAddress",type:"address"},{internalType:"uint256",name:"ContractBalanceNative",type:"uint256"},{internalType:"uint256",name:"ContractBalanceToken",type:"uint256"},{internalType:"uint256",name:"TokenHolders",type:"uint256"},{internalType:"uint256",name:"TokenTransactions",type:"uint256"},{internalType:"uint256",name:"TotalSupply",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"getContractHaltStates",outputs:[{internalType:"bool",name:"ContracthaltNonServiceTransfers",type:"bool"},{internalType:"bool",name:"ContracthaltPlanCreation",type:"bool"},{internalType:"bool",name:"ContracthaltSubcriptions",type:"bool"},{internalType:"bool",name:"ContracthaltSubscriptionPayments",type:"bool"},{internalType:"bool",name:"ContracthaltCurrencyUSD",type:"bool"},{internalType:"bool",name:"SanctionsCheckEnabled",type:"bool"},{internalType:"address",name:"SanctionsContract",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"getFacetSelector",outputs:[{internalType:"bytes4",name:"",type:"bytes4"},{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"getSubscriptionAndPlanDetails",outputs:[{internalType:"address",name:"ContractFundAddress",type:"address"},{internalType:"bool",name:"SubscriptionCollectPassiveEnabled",type:"bool"},{internalType:"uint256",name:"SubscriptionCollectPassiveIndex",type:"uint256"},{internalType:"uint256",name:"SubscriptionCollectPassiveMax",type:"uint256"},{internalType:"uint256",name:"TotalSubscriptionsActive",type:"uint256"},{internalType:"uint256",name:"PlanCreationCost",type:"uint256"},{internalType:"uint256",name:"PlanVerificationCost",type:"uint256"},{internalType:"uint256",name:"PlanDefaultCommission",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"initialize",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"listFacetSelectors",outputs:[{components:[{internalType:"bytes4",name:"selector",type:"bytes4"},{internalType:"address",name:"facetAddress",type:"address"}],internalType:"struct Subscrypts.FacetSelectorEntry[]",name:"out",type:"tuple[]"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amt",type:"uint256"}],name:"mintByAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"name",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"owner",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"planCreationCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"planDefaultCommission",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"planVerificationCost",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"proxiableUUID",outputs:[{internalType:"bytes32",name:"",type:"bytes32"}],stateMutability:"view",type:"function"},{inputs:[],name:"proxyLogic",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"},{internalType:"address",name:"facetAddress",type:"address"}],name:"registerFacetSelector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"",type:"uint256"}],name:"registeredSelectors",outputs:[{internalType:"bytes4",name:"",type:"bytes4"}],stateMutability:"view",type:"function"},{inputs:[],name:"renounceOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"sanctionsCheckEnabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"sanctionsContract",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"}],name:"subCheckSanctions",outputs:[{internalType:"bool",name:"",type:"bool"},{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"uint256",name:"amt",type:"uint256"}],name:"subInternalBurn",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"amt",type:"uint256"}],name:"subInternalMint",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"subTxIncrement",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"subscriptionCollectPassiveEnabled",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"view",type:"function"},{inputs:[],name:"subscriptionCollectPassiveIndex",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"subscriptionCollectPassiveMax",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenHolders",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"tokenTransactions",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSubscriptionsActive",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"totalSupply",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newOwner",type:"address"}],name:"transferOwnership",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes4",name:"selector",type:"bytes4"}],name:"unregisterFacetSelector",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newImplementation",type:"address"},{internalType:"bytes",name:"data",type:"bytes"}],name:"upgradeToAndCall",outputs:[],stateMutability:"payable",type:"function"},{stateMutability:"payable",type:"receive"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"}],name:"getPlan",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"uint256",name:"referralBonus",type:"uint256"},{internalType:"uint256",name:"commission",type:"uint256"},{internalType:"bytes32",name:"description",type:"bytes32"},{internalType:"bytes32",name:"defaultAttributes",type:"bytes32"},{internalType:"uint256",name:"verificationExpiryDate",type:"uint256"},{internalType:"uint256",name:"subscriberCount",type:"uint256"},{internalType:"bool",name:"isActive",type:"bool"}],internalType:"struct SubscryptsStorage.Plan",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"address",name:"subscriber",type:"address"}],name:"getPlanSubscription",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"address",name:"subscriberAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"bool",name:"isRecurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"bytes32",name:"customAttributes",type:"bytes32"},{internalType:"uint256",name:"lastPaymentDate",type:"uint256"},{internalType:"uint256",name:"nextPaymentDate",type:"uint256"}],internalType:"struct SubscryptsStorage.Subscription",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"}],name:"getPlans",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"uint256",name:"referralBonus",type:"uint256"},{internalType:"uint256",name:"commission",type:"uint256"},{internalType:"bytes32",name:"description",type:"bytes32"},{internalType:"bytes32",name:"defaultAttributes",type:"bytes32"},{internalType:"uint256",name:"verificationExpiryDate",type:"uint256"},{internalType:"uint256",name:"subscriberCount",type:"uint256"},{internalType:"bool",name:"isActive",type:"bool"}],internalType:"struct SubscryptsStorage.Plan[]",name:"",type:"tuple[]"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"PlanLength",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"subscriptionid",type:"uint256"}],name:"getSubscription",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"address",name:"subscriberAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"bool",name:"isRecurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"bytes32",name:"customAttributes",type:"bytes32"},{internalType:"uint256",name:"lastPaymentDate",type:"uint256"},{internalType:"uint256",name:"nextPaymentDate",type:"uint256"}],internalType:"struct SubscryptsStorage.Subscription",name:"",type:"tuple"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"}],name:"getSubscriptions",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"address",name:"subscriberAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"bool",name:"isRecurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"bytes32",name:"customAttributes",type:"bytes32"},{internalType:"uint256",name:"lastPaymentDate",type:"uint256"},{internalType:"uint256",name:"nextPaymentDate",type:"uint256"}],internalType:"struct SubscryptsStorage.Subscription[]",name:"",type:"tuple[]"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"SubscriptionLength",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"subscriber",type:"address"},{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"}],name:"getSubscriptionsByAddress",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"address",name:"subscriberAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"bool",name:"isRecurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"bytes32",name:"customAttributes",type:"bytes32"},{internalType:"uint256",name:"lastPaymentDate",type:"uint256"},{internalType:"uint256",name:"nextPaymentDate",type:"uint256"}],internalType:"struct SubscryptsStorage.Subscription[]",name:"",type:"tuple[]"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"SubscriberSubscriptionsLength",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"}],name:"getSubscriptionsByPlan",outputs:[{components:[{internalType:"uint256",name:"id",type:"uint256"},{internalType:"address",name:"merchantAddress",type:"address"},{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"address",name:"subscriberAddress",type:"address"},{internalType:"uint256",name:"currencyCode",type:"uint256"},{internalType:"uint256",name:"subscriptionAmount",type:"uint256"},{internalType:"uint256",name:"paymentFrequency",type:"uint256"},{internalType:"bool",name:"isRecurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"bytes32",name:"customAttributes",type:"bytes32"},{internalType:"uint256",name:"lastPaymentDate",type:"uint256"},{internalType:"uint256",name:"nextPaymentDate",type:"uint256"}],internalType:"struct SubscryptsStorage.Subscription[]",name:"",type:"tuple[]"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"MerchantPlanSubscriptionsLength",type:"uint256"}],stateMutability:"view",type:"function"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"facetAddr",type:"address"}],name:"AdminFacetUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newFundAddress",type:"address"}],name:"ContractFundAddressChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"newSanctionsCheckEnabled",type:"bool"},{indexed:!1,internalType:"address",name:"newSanctionsContract",type:"address"}],name:"ContractSanctionsChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"address",name:"newDexFactory",type:"address"},{indexed:!1,internalType:"address",name:"newDexRouter",type:"address"},{indexed:!1,internalType:"address",name:"newDexPair",type:"address"},{indexed:!1,internalType:"address",name:"newDexPositionManager",type:"address"},{indexed:!1,internalType:"address",name:"newDexQuoter",type:"address"},{indexed:!1,internalType:"address",name:"newDexUSDC",type:"address"}],name:"DexGovernanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"newHaltNonServiceTransfers",type:"bool"},{indexed:!1,internalType:"bool",name:"newHaltPlanCreation",type:"bool"},{indexed:!1,internalType:"bool",name:"newHaltSubscriptions",type:"bool"},{indexed:!1,internalType:"bool",name:"newHaltSubscriptionPayments",type:"bool"},{indexed:!1,internalType:"bool",name:"newHaltCurrencyUSD",type:"bool"}],name:"HaltStatesChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"facetAddr",type:"address"}],name:"PaymentUsdcUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"planid",type:"uint256"},{indexed:!1,internalType:"address",name:"newMerchant",type:"address"},{indexed:!1,internalType:"uint256",name:"newAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newFrequency",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newReferralBonus",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newCommission",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newDescription",type:"bytes32"},{indexed:!1,internalType:"bytes32",name:"newAttributes",type:"bytes32"},{indexed:!1,internalType:"uint256",name:"newVerifExpDate",type:"uint256"},{indexed:!1,internalType:"bool",name:"newActive",type:"bool"}],name:"PlanChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"newPlanCreationCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newPlanVerificationCost",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newPlanDefaultCommission",type:"uint256"}],name:"PlanGovernanceChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"uint256",name:"indexStart",type:"uint256"},{indexed:!1,internalType:"uint256",name:"indexEnd",type:"uint256"},{indexed:!1,internalType:"uint256",name:"planid",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newAmount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"newFrequency",type:"uint256"},{indexed:!1,internalType:"bytes32",name:"newAttribute",type:"bytes32"},{indexed:!1,internalType:"bool",name:"overrideRecurring",type:"bool"},{indexed:!1,internalType:"uint256",name:"subscriptionChanged",type:"uint256"}],name:"PlanSubscriptionsBulkChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"logicAddr",type:"address"}],name:"ProxyLogicUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!1,internalType:"bool",name:"newEnabled",type:"bool"},{indexed:!1,internalType:"uint256",name:"newMax",type:"uint256"}],name:"SubscriptionCollectPassiveChanged",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"facetAddr",type:"address"}],name:"SubscriptionFacetUpdated",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"facetAddr",type:"address"}],name:"ViewFacetUpdated",type:"event"},{inputs:[{internalType:"address payable",name:"newcontractFundAddress",type:"address"}],name:"contractFundAddressCHG",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"newSanctionsCheckEnabled",type:"bool"},{internalType:"address",name:"newSanctionsContract",type:"address"}],name:"contractSanctionsContractCHG",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"newDexFactory",type:"address"},{internalType:"address",name:"newDexRouter",type:"address"},{internalType:"address",name:"newDexPair",type:"address"},{internalType:"address",name:"newDexPositionManager",type:"address"},{internalType:"address",name:"newDexQuoter",type:"address"},{internalType:"address",name:"newDexUSDC",type:"address"}],name:"dexGovernanceCHG",outputs:[{internalType:"address",name:"updatedDexFactory",type:"address"},{internalType:"address",name:"updatedDexRouter",type:"address"},{internalType:"address",name:"updatedDexPair",type:"address"},{internalType:"address",name:"updatedDexPositionManager",type:"address"},{internalType:"address",name:"updatedDexQuoter",type:"address"},{internalType:"address",name:"updateddexUSDC",type:"address"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"address",name:"merchant",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"frequency",type:"uint256"},{internalType:"uint256",name:"referralbonus",type:"uint256"},{internalType:"uint256",name:"contractcommission",type:"uint256"},{internalType:"bytes32",name:"description",type:"bytes32"},{internalType:"bytes32",name:"setAttribute",type:"bytes32"},{internalType:"uint256",name:"verifExpDate",type:"uint256"},{internalType:"bool",name:"active",type:"bool"}],name:"planChange",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"},{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"frequency",type:"uint256"},{internalType:"bytes32",name:"attribute",type:"bytes32"},{internalType:"bool",name:"overrideRecurring",type:"bool"}],name:"planChangeSubscriptionsBulk",outputs:[{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"SubscriptionChanged",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"newPlanCreationCost",type:"uint256"},{internalType:"uint256",name:"newPlanVerificationCost",type:"uint256"},{internalType:"uint256",name:"newPlanDefaultCommission",type:"uint256"}],name:"planGoveranceCHG",outputs:[{internalType:"uint256",name:"PlanCreationCost",type:"uint256"},{internalType:"uint256",name:"PlanVerificationCost",type:"uint256"},{internalType:"uint256",name:"PlanDefaultCommission",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"facetAddr",type:"address"}],name:"setFacetAdmin",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"facetAddr",type:"address"}],name:"setFacetPaymentUsdc",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"facetAddr",type:"address"}],name:"setFacetSubscription",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"facetAddr",type:"address"}],name:"setFacetView",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"haltNonServiceTransfers",type:"bool"},{internalType:"bool",name:"haltPlanCreation",type:"bool"},{internalType:"bool",name:"haltSubscriptions",type:"bool"},{internalType:"bool",name:"haltSubscriptionPayments",type:"bool"},{internalType:"bool",name:"haltCurrencyUSD",type:"bool"}],name:"setHaltStates",outputs:[{internalType:"bool",name:"IsHaltNonServiceTransfers",type:"bool"},{internalType:"bool",name:"IsHaltPlanCreation",type:"bool"},{internalType:"bool",name:"IsHaltSubscriptions",type:"bool"},{internalType:"bool",name:"IsHaltSubscriptionPayments",type:"bool"},{internalType:"bool",name:"IsHaltCurrencyUSD",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"logicAddr",type:"address"}],name:"setProxyLogicAddress",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bool",name:"enable",type:"bool"},{internalType:"uint256",name:"newsubscriptionCollectPassiveMax",type:"uint256"}],name:"subscriptionCollectPassiveCHG",outputs:[],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"id",type:"uint256"},{indexed:!1,internalType:"uint256",name:"currency",type:"uint256"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"},{indexed:!1,internalType:"uint256",name:"frequency",type:"uint256"}],name:"_planCreate",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"subscriptionId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"planId",type:"uint256"},{indexed:!1,internalType:"address",name:"subscriber",type:"address"},{indexed:!1,internalType:"bool",name:"recurring",type:"bool"},{indexed:!1,internalType:"uint256",name:"remainingCycles",type:"uint256"},{indexed:!1,internalType:"address",name:"referral",type:"address"}],name:"_subscriptionCreate",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"subscriptionId",type:"uint256"},{indexed:!1,internalType:"uint256",name:"planId",type:"uint256"},{indexed:!1,internalType:"address",name:"subscriber",type:"address"},{indexed:!1,internalType:"uint256",name:"amount",type:"uint256"}],name:"_subscriptionPay",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"subscriptionId",type:"uint256"},{indexed:!1,internalType:"address",name:"merchant",type:"address"},{indexed:!1,internalType:"uint256",name:"planId",type:"uint256"},{indexed:!1,internalType:"address",name:"subscriber",type:"address"},{indexed:!1,internalType:"bool",name:"enabled",type:"bool"}],name:"_subscriptionRecurring",type:"event"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"subscriptionid",type:"uint256"},{indexed:!1,internalType:"address",name:"merchant",type:"address"},{indexed:!1,internalType:"uint256",name:"planfk",type:"uint256"},{indexed:!1,internalType:"address",name:"subscriber",type:"address"}],name:"_subscriptionStop",type:"event"},{inputs:[{internalType:"uint256",name:"amountUSDC18",type:"uint256"}],name:"convertOtherCurrencyToToken",outputs:[{internalType:"uint256",name:"outputSUBS18",type:"uint256"},{internalType:"uint256",name:"inputUSDC18",type:"uint256"},{internalType:"uint256",name:"value1USDCInSUBS",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"amountSUBS18",type:"uint256"}],name:"convertTokenToOtherCurrency",outputs:[{internalType:"uint256",name:"outputUSDC18",type:"uint256"},{internalType:"uint256",name:"inputSUBS18",type:"uint256"},{internalType:"uint256",name:"value1SUBSInUSDC",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"uint256",name:"currency",type:"uint256"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint256",name:"frequency",type:"uint256"},{internalType:"bytes32",name:"description",type:"bytes32"},{internalType:"bytes32",name:"setAttribute",type:"bytes32"},{internalType:"uint256",name:"referralBonus",type:"uint256"}],name:"planCreate",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"payable",type:"function"},{inputs:[{internalType:"uint256",name:"subscriptionid",type:"uint256"},{internalType:"bytes32",name:"newAttribute",type:"bytes32"}],name:"subscriptionAttributeCHG",outputs:[{internalType:"bool",name:"Success",type:"bool"},{internalType:"uint256",name:"Subscriptionid",type:"uint256"},{internalType:"bytes32",name:"NewAttribute",type:"bytes32"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"},{internalType:"uint256",name:"maxCollect",type:"uint256"}],name:"subscriptionCollect",outputs:[{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"MaxCollect",type:"uint256"},{internalType:"uint256",name:"SubscriptionRenewed",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"subscriber",type:"address"},{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"},{internalType:"uint256",name:"maxCollect",type:"uint256"}],name:"subscriptionCollectByAddress",outputs:[{internalType:"address",name:"Subscriber",type:"address"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"MaxCollect",type:"uint256"},{internalType:"uint256",name:"SubscriptionRenewed",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"uint256",name:"indexStart",type:"uint256"},{internalType:"uint256",name:"indexEnd",type:"uint256"},{internalType:"uint256",name:"maxCollect",type:"uint256"}],name:"subscriptionCollectByPlan",outputs:[{internalType:"uint256",name:"PlanId",type:"uint256"},{internalType:"uint256",name:"IndexStart",type:"uint256"},{internalType:"uint256",name:"IndexEnd",type:"uint256"},{internalType:"uint256",name:"MaxCollect",type:"uint256"},{internalType:"uint256",name:"SubscriptionRenewed",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"}],name:"subscriptionCollectPassive",outputs:[{internalType:"bool",name:"Success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"address",name:"subscriber",type:"address"},{internalType:"bool",name:"recurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"address",name:"referral",type:"address"},{internalType:"bool",name:"onlycreate",type:"bool"},{internalType:"address",name:"deductfrom",type:"address"}],name:"subscriptionCreate",outputs:[{internalType:"uint256",name:"Subscriptionid",type:"uint256"},{internalType:"bool",name:"AlreadyExist",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"planid",type:"uint256"},{internalType:"address",name:"subscriber",type:"address"},{internalType:"address",name:"referral",type:"address"},{internalType:"bool",name:"giveaway",type:"bool"},{internalType:"address",name:"deductfrom",type:"address"},{internalType:"uint256",name:"timebonus",type:"uint256"}],name:"subscriptionGift",outputs:[{internalType:"uint256",name:"Planid",type:"uint256"},{internalType:"address",name:"Subscriber",type:"address"},{internalType:"address",name:"Referral",type:"address"},{internalType:"bool",name:"Success",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"subscriptionid",type:"uint256"},{internalType:"bool",name:"enabled",type:"bool"},{internalType:"uint256",name:"setCycles",type:"uint256"}],name:"subscriptionRecurringCHG",outputs:[{internalType:"uint256",name:"Subcriptionid",type:"uint256"},{internalType:"bool",name:"Recurring",type:"bool"},{internalType:"uint256",name:"RemainingCycles",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{anonymous:!1,inputs:[{indexed:!0,internalType:"uint256",name:"subscriptionId",type:"uint256"},{indexed:!0,internalType:"address",name:"subscriber",type:"address"},{indexed:!1,internalType:"uint256",name:"subsAmount18",type:"uint256"},{indexed:!1,internalType:"uint256",name:"usdcSpent6",type:"uint256"},{indexed:!1,internalType:"uint24",name:"feeTier",type:"uint24"}],name:"subscriptionPaidWithUsdc",type:"event"},{inputs:[{internalType:"uint256",name:"planId",type:"uint256"},{internalType:"bool",name:"recurring",type:"bool"},{internalType:"uint256",name:"remainingCycles",type:"uint256"},{internalType:"address",name:"referral",type:"address"},{internalType:"uint24",name:"feeTier",type:"uint24"},{internalType:"uint256",name:"deadline",type:"uint256"},{internalType:"uint256",name:"nonce",type:"uint256"},{internalType:"uint256",name:"permitDeadline",type:"uint256"},{internalType:"bytes",name:"signature",type:"bytes"},{internalType:"uint256",name:"maxUsdcIn6Cap",type:"uint256"}],name:"paySubscriptionWithUsdc",outputs:[{internalType:"uint256",name:"subId",type:"uint256"},{internalType:"bool",name:"subExist",type:"bool"},{internalType:"uint256",name:"subsPaid18",type:"uint256"},{internalType:"uint256",name:"usdcSpent6",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"uint256",name:"subsOut18",type:"uint256"},{internalType:"uint24",name:"feeTier",type:"uint24"}],name:"quoteUsdcForSubs",outputs:[{internalType:"uint256",name:"usdcQuoted6",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"SUBS",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"USDC",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_recipient",type:"address"},{internalType:"uint256",name:"_quantity",type:"uint256"}],name:"crossmintOnramp",outputs:[],stateMutability:"payable",type:"function"},{inputs:[],name:"poolFee1",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[],name:"poolFee2",outputs:[{internalType:"uint24",name:"",type:"uint24"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"_usdc",type:"address"},{internalType:"address",name:"_subs",type:"address"},{internalType:"uint24",name:"_fee1",type:"uint24"},{internalType:"uint24",name:"_fee2",type:"uint24"}],name:"setConfig",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_router",type:"address"},{internalType:"address",name:"_weth",type:"address"}],name:"setInfrastructure",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[],name:"universalRouter",outputs:[{internalType:"contract IUniversalRouter",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"withdraw",outputs:[],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"_token",type:"address"}],name:"withdrawToken",outputs:[],stateMutability:"nonpayable",type:"function"}],Kt=[{anonymous:!1,inputs:[{indexed:!0,internalType:"address",name:"owner",type:"address"},{indexed:!0,internalType:"address",name:"spender",type:"address"},{indexed:!1,internalType:"uint256",name:"value",type:"uint256"}],name:"Approval",type:"event"},{inputs:[{internalType:"address",name:"owner",type:"address"},{internalType:"address",name:"spender",type:"address"}],name:"allowance",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"spender",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"approve",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"account",type:"address"}],name:"balanceOf",outputs:[{internalType:"uint256",name:"",type:"uint256"}],stateMutability:"view",type:"function"},{inputs:[],name:"decimals",outputs:[{internalType:"uint8",name:"",type:"uint8"}],stateMutability:"view",type:"function"},{inputs:[],name:"symbol",outputs:[{internalType:"string",name:"",type:"string"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transfer",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"address",name:"from",type:"address"},{internalType:"address",name:"to",type:"address"},{internalType:"uint256",name:"value",type:"uint256"}],name:"transferFrom",outputs:[{internalType:"bool",name:"",type:"bool"}],stateMutability:"nonpayable",type:"function"}],Re=[{inputs:[{internalType:"address",name:"_factory",type:"address"},{internalType:"address",name:"_WETH9",type:"address"}],stateMutability:"nonpayable",type:"constructor"},{inputs:[],name:"WETH9",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[],name:"factory",outputs:[{internalType:"address",name:"",type:"address"}],stateMutability:"view",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountIn",type:"uint256"}],name:"quoteExactInput",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactInputSingleParams",name:"params",type:"tuple"}],name:"quoteExactInputSingle",outputs:[{internalType:"uint256",name:"amountOut",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"bytes",name:"path",type:"bytes"},{internalType:"uint256",name:"amountOut",type:"uint256"}],name:"quoteExactOutput",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160[]",name:"sqrtPriceX96AfterList",type:"uint160[]"},{internalType:"uint32[]",name:"initializedTicksCrossedList",type:"uint32[]"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{components:[{internalType:"address",name:"tokenIn",type:"address"},{internalType:"address",name:"tokenOut",type:"address"},{internalType:"uint256",name:"amount",type:"uint256"},{internalType:"uint24",name:"fee",type:"uint24"},{internalType:"uint160",name:"sqrtPriceLimitX96",type:"uint160"}],internalType:"struct IQuoterV2.QuoteExactOutputSingleParams",name:"params",type:"tuple"}],name:"quoteExactOutputSingle",outputs:[{internalType:"uint256",name:"amountIn",type:"uint256"},{internalType:"uint160",name:"sqrtPriceX96After",type:"uint160"},{internalType:"uint32",name:"initializedTicksCrossed",type:"uint32"},{internalType:"uint256",name:"gasEstimate",type:"uint256"}],stateMutability:"nonpayable",type:"function"},{inputs:[{internalType:"int256",name:"amount0Delta",type:"int256"},{internalType:"int256",name:"amount1Delta",type:"int256"},{internalType:"bytes",name:"path",type:"bytes"}],name:"uniswapV3SwapCallback",outputs:[],stateMutability:"view",type:"function"}],L=t=>new j.ethers.Contract(Ie,we,t),zt=t=>{try{return t?j.ethers.encodeBytes32String(t):j.ethers.ZeroHash}catch(e){return console.error("Error encoding bytes32:",e),j.ethers.ZeroHash}},Ee=t=>{try{return j.ethers.decodeBytes32String(t).replace(/\0/g,"")}catch{return t}},Xt=async(t,e,n,a,r,i,p,c,d,l,y)=>{const o=L(t),b=r||j.ethers.ZeroAddress;return await o.paySubscriptionWithUsdc(e,n,a,b,i,p,c,d,l,y)},Yt=async(t,e,n)=>{const a=L(t),r=zt(n);return await a.subscriptionAttributeCHG(e,r)},Qt=async(t,e,n,a,r,i,p,c)=>{const d=L(t),l=i||j.ethers.ZeroAddress;return await d.subscriptionCreate(e,n,a,r,l,p,c)},ve=async(t,e,n,a)=>await L(t).subscriptionRecurringCHG(e,n,a),Je=t=>({id:t.id,merchantAddress:t.merchantAddress,currencyCode:t.currencyCode,subscriptionAmount:t.subscriptionAmount,paymentFrequency:t.paymentFrequency,referralBonus:t.referralBonus,commission:t.commission,description:Ee(t.description),defaultAttributes:Ee(t.defaultAttributes),verificationExpiryDate:t.verificationExpiryDate,subscriberCount:t.subscriberCount,isActive:t.isActive}),Te=t=>({id:t.id,merchantAddress:t.merchantAddress,planId:t.planId,subscriberAddress:t.subscriberAddress,currencyCode:t.currencyCode,subscriptionAmount:t.subscriptionAmount,paymentFrequency:t.paymentFrequency,isRecurring:t.isRecurring,remainingCycles:t.remainingCycles,customAttributes:Ee(t.customAttributes),lastPaymentDate:t.lastPaymentDate,nextPaymentDate:t.nextPaymentDate}),Zt=async t=>await L(t)._planAutoIncrement(),Jt=async(t,e)=>await L(t).convertOtherCurrencyToToken(e),et=async(t,e)=>await L(t).convertTokenToOtherCurrency(e),Me=async(t,e)=>{const n=await L(t).getPlan(e);return Je(n)},en=async(t,e,n)=>{const a=await L(t).getPlans(e,n);return[a[0].map(Je),a[1],a[2],a[3]]},ke=async(t,e,n)=>{const a=await L(t).getPlanSubscription(e,n);return Te(a)},De=async(t,e)=>{const n=await L(t).getSubscription(e);return Te(n)},tn=async(t,e,n,a)=>{const r=await L(t).getSubscriptionsByAddress(e,n,a);return[r[0].map(Te),r[1],r[2],r[3]]},tt=async(t,e,n,a)=>{const r=await L(t).getSubscriptionsByPlan(e,n,a);return[r[0].map(Te),r[1],r[2],r[3]]},nt=(t,e)=>{for(const n of t.logs)try{const a=e.parseLog({topics:[...n.topics],data:n.data});if(a&&a.name==="_subscriptionCreate")return a.args.subscriptionId}catch{continue}throw new Error(`Subscription ID not found in transaction logs: ${t.hash}`)},nn=(t,e)=>{for(const n of t.logs)try{const a=e.parseLog({topics:[...n.topics],data:n.data});if(a&&a.name==="subscriptionPaidWithUsdc")return{subsAmount18:a.args.subsAmount18,usdcSpent6:a.args.usdcSpent6}}catch{continue}return null},st=async(t,e,n)=>{try{const a=t instanceof j.ethers.Contract?t:L(t),r=await a.getPlanSubscription(e,n),i=(r==null?void 0:r.id)??(r==null?void 0:r[0])??0n;if(i===0n)return{subscriptionId:0n,nextPaymentDate:0n};const p=await a.getSubscription(i),c=(p==null?void 0:p.nextPaymentDate)??(p==null?void 0:p[11])??0n;return{subscriptionId:i,nextPaymentDate:c}}catch{return{subscriptionId:0n,nextPaymentDate:0n}}},at=async(t,e,n,a)=>{try{const r=t instanceof j.ethers.Contract?t:L(t),i=await r.getPlanSubscription(e,n),p=(i==null?void 0:i.id)??(i==null?void 0:i[0])??0n;if(p===0n)return null;const c=await r.getSubscription(p),d=(c==null?void 0:c.nextPaymentDate)??(c==null?void 0:c[11])??0n;return d>0n&&d>a?p:null}catch{return null}},sn=async(t,e)=>{const n=L(t),a=new j.ethers.Interface(we),i=(await st(n,e.planId,e.subscriber)).nextPaymentDate,c=await(await Qt(t,e.planId,e.subscriber,e.recurring,e.remainingCycles,e.referral,e.onlyCreate,e.deductFrom)).wait();if(!c)throw new Error("Transaction receipt not available");let d=null;try{d=nt(c,a)}catch{}if(d===null&&(d=await at(n,e.planId,e.subscriber,i),d===null))throw new Error(`Subscription verification failed: nextPaymentDate did not change. Transaction: ${c.hash}`);return{subscriptionId:d,alreadyExist:i>0n}},an=async(t,e,n)=>{const a=L(t),r=new j.ethers.Interface(we),p=(await st(a,e.planId,n)).nextPaymentDate,d=await(await Xt(t,e.planId,e.recurring,e.remainingCycles,e.referral,e.feeTier,e.deadline,e.nonce,e.permitDeadline,e.signature,e.maxUsdcIn6Cap)).wait();if(!d)throw new Error("Transaction receipt not available");let l=null,y=null;try{l=nt(d,r),y=nn(d,r)}catch{}if(l===null&&(l=await at(a,e.planId,n,p),l===null))throw new Error(`Subscription verification failed: nextPaymentDate did not change. Transaction: ${d.hash}`);return{subId:l,subExist:p>0n,subsPaid18:(y==null?void 0:y.subsAmount18)||0n,usdcSpent6:(y==null?void 0:y.usdcSpent6)||0n}};class Ve{constructor(e,n,a,r){M(this,"contract");M(this,"decimals");M(this,"symbol");this.contract=new j.Contract(e,Kt,n),this.decimals=a,this.symbol=r}async getBalance(e){try{return await this.contract.balanceOf(e)}catch(n){throw new te(`Failed to fetch ${this.symbol} balance`,{address:e,error:n})}}async getAllowance(e,n){try{return await this.contract.allowance(e,n)}catch(a){throw new te(`Failed to fetch ${this.symbol} allowance`,{owner:e,spender:n,error:a})}}async approve(e,n){try{const r=await(await this.contract.approve(e,n)).wait();if(!r)throw new te("Transaction receipt not available");return r.hash}catch(a){throw new te(`Failed to approve ${this.symbol}`,{spender:e,amount:n.toString(),error:a})}}async ensureAllowance(e,n,a){const r=await this.getBalance(e);if(r<a)throw new fe(a,r,this.symbol);return await this.getAllowance(e,n)>=a?{needsApproval:!1}:{needsApproval:!0,txHash:await this.approve(n,a)}}getContract(){return this.contract}getDecimals(){return this.decimals}getSymbol(){return this.symbol}}class rn{constructor(e,n){M(this,"cache");M(this,"config");M(this,"inFlightRequests");M(this,"stats");M(this,"chainId");this.cache=new Map,this.inFlightRequests=new Map,this.stats={hits:0,misses:0},this.chainId=e,this.config={enabled:!0,defaultTTL:6e4,maxEntries:500,...n}}async get(e,n,a){if(!this.config.enabled)return n();const r=`${this.chainId}:${e}`,i=this.cache.get(r);if(i&&!this.isExpired(i))return this.stats.hits++,i.data;if(this.stats.misses++,this.inFlightRequests.has(r))return this.inFlightRequests.get(r);const p=n();this.inFlightRequests.set(r,p);try{const c=await p;return this.set(r,c,a??this.config.defaultTTL),c}finally{this.inFlightRequests.delete(r)}}set(e,n,a){const r=e.includes(":")?e:`${this.chainId}:${e}`;if(this.cache.size>=this.config.maxEntries){const i=this.cache.keys().next().value;i!==void 0&&this.cache.delete(i)}this.cache.set(r,{data:n,timestamp:Date.now(),ttl:a})}isExpired(e){return e.ttl===-1?!1:Date.now()-e.timestamp>e.ttl}invalidate(e){if(!e){this.cache.clear();return}const n=`${this.chainId}:${e}`,a=new RegExp(n);for(const r of this.cache.keys())a.test(r)&&this.cache.delete(r)}clear(){this.cache.clear(),this.inFlightRequests.clear(),this.stats={hits:0,misses:0}}getStats(){const e=this.stats.hits+this.stats.misses;return{hits:this.stats.hits,misses:this.stats.misses,entries:this.cache.size,hitRate:e>0?this.stats.hits/e:0}}}const he=t=>Ae,xe=Gt,rt=t=>{if(t!==K)throw new Error(`Only Arbitrum One (chain ${K}) supported`);return Ht},it=t=>{if(t!==K)throw new Error(`Only Arbitrum One (chain ${K}) supported`);return _e},oe={info:"color: #3B82F6; font-weight: bold;",debug:"color: #8B5CF6; font-weight: bold;",warn:"color: #F59E0B; font-weight: bold;",error:"color: #EF4444; font-weight: bold;",success:"color: #10B981; font-weight: bold;"};class cn{constructor(){M(this,"level","info");M(this,"prefix","[Subscrypts]");M(this,"performanceMetrics",[]);M(this,"correlationIdCounter",0)}configure(e){e.level!==void 0&&(this.level=e.level),e.prefix!==void 0&&(this.prefix=e.prefix)}getLevel(){return this.level}generateCorrelationId(){return`${Date.now()}-${++this.correlationIdCounter}`}async trackPerformance(e,n){if(this.level!=="debug")return n();const a=performance.now();try{const r=await n(),i=performance.now()-a;return this.performanceMetrics.push({operation:e,duration:i,timestamp:Date.now()}),this.debug(`⏱️ ${e}: ${i.toFixed(2)}ms`),r}catch(r){const i=performance.now()-a;throw this.debug(`⏱️ ${e}: ${i.toFixed(2)}ms (failed)`),r}}getPerformanceMetrics(){return[...this.performanceMetrics]}clearMetrics(){this.performanceMetrics=[]}shouldLog(e){return this.level==="silent"?!1:this.level==="debug"||this.level==="info"&&e!=="debug"}debug(e,n){this.shouldLog("debug")&&console.log(`%c${this.prefix} DEBUG:`,oe.debug,e,n!==void 0?n:"")}info(e,n){this.shouldLog("info")&&console.log(`%c${this.prefix}`,oe.info,e,n!==void 0?n:"")}warn(e,n){this.shouldLog("info")&&console.warn(`%c${this.prefix} WARNING:`,oe.warn,e,n!==void 0?n:"")}error(e,n){this.shouldLog("info")&&console.error(`%c${this.prefix} ERROR:`,oe.error,e,n!==void 0?n:"")}success(e,n){this.shouldLog("info")&&console.log(`%c${this.prefix} ✓`,oe.success,e,n!==void 0?n:"")}group(e){this.shouldLog("debug")&&console.group(`${this.prefix} ${e}`)}groupEnd(){this.shouldLog("debug")&&console.groupEnd()}table(e){this.shouldLog("debug")&&console.table(e)}}const h=new cn;function ge(t){if(typeof t=="bigint")return t.toString();if(Array.isArray(t))return t.map(ge);if(t&&typeof t=="object"){const e={};for(const[n,a]of Object.entries(t))e[n]=ge(a);return e}return t}class ct{constructor(e){M(this,"id","injected");M(this,"name");M(this,"icon");M(this,"provider",null);M(this,"accountsHandler",null);M(this,"chainHandler",null);this.name=(e==null?void 0:e.name)||this.detectWalletName(),this.icon=e==null?void 0:e.icon}detectWalletName(){return typeof window>"u"||!window.ethereum?"Browser Wallet":window.ethereum.isMetaMask?"MetaMask":window.ethereum.isCoinbaseWallet?"Coinbase Wallet":"Browser Wallet"}isAvailable(){return typeof window<"u"&&!!window.ethereum}async connect(){if(!this.isAvailable())throw new B("No Ethereum wallet found. Please install MetaMask or another Web3 wallet.");try{const e=window.ethereum;this.provider=new j.BrowserProvider(e);const n=await this.provider.send("eth_requestAccounts",[]);if(!n||n.length===0)throw new B("No accounts found. Please unlock your wallet.");const a=await this.provider.getNetwork(),r=Number(a.chainId),i=await this.provider.getSigner();return{provider:this.provider,signer:i,address:n[0],chainId:r}}catch(e){throw e instanceof B?e:new B("Failed to connect wallet",{error:e})}}async disconnect(){this.removeListeners(),this.provider=null}async reconnect(){if(!this.isAvailable())return null;try{const e=window.ethereum;this.provider=new j.BrowserProvider(e);const n=await this.provider.send("eth_accounts",[]);if(!n||n.length===0)return null;const a=await this.provider.getNetwork(),r=Number(a.chainId),i=await this.provider.getSigner();return{provider:this.provider,signer:i,address:n[0],chainId:r}}catch{return null}}onAccountsChanged(e){window.ethereum&&(this.accountsHandler=(...n)=>{e(n[0])},window.ethereum.on("accountsChanged",this.accountsHandler))}onChainChanged(e){window.ethereum&&(this.chainHandler=(...n)=>{const a=n[0];e(parseInt(a,16))},window.ethereum.on("chainChanged",this.chainHandler))}removeListeners(){window.ethereum&&(this.accountsHandler&&(window.ethereum.removeListener("accountsChanged",this.accountsHandler),this.accountsHandler=null),this.chainHandler&&(window.ethereum.removeListener("chainChanged",this.chainHandler),this.chainHandler=null))}async switchNetwork(e){if(!window.ethereum)throw new B("No Ethereum wallet found");const n=he();try{await window.ethereum.request({method:"wallet_switchEthereumChain",params:[{chainId:`0x${e.toString(16)}`}]})}catch(a){if(a.code===4902)await this.addNetwork(n);else throw new ue(`Failed to switch to chain ${e}`,{chainId:e,error:a})}}async addNetwork(e){if(!window.ethereum)throw new B("No Ethereum wallet found");try{await window.ethereum.request({method:"wallet_addEthereumChain",params:[{chainId:`0x${e.chainId.toString(16)}`,chainName:e.name,nativeCurrency:e.nativeCurrency,rpcUrls:[e.rpcUrl],blockExplorerUrls:[e.blockExplorer]}]})}catch(n){throw new ue(`Failed to add ${e.name} network`,{network:e,error:n})}}}class on{constructor(e,n){M(this,"id","external");M(this,"name","External Provider");M(this,"icon");M(this,"config");M(this,"chainId");this.config=e,this.chainId=n}isAvailable(){return!0}async connect(){return{provider:this.config.provider,signer:this.config.signer,address:this.config.address,chainId:this.chainId}}async disconnect(){}async reconnect(){return this.connect()}updateConfig(e,n){this.config=e,this.chainId=n}}const Be="subscrypts_wallet_session",un=7*24*60*60*1e3;function Ce(t,e){try{const n={connectorId:t,address:e,timestamp:Date.now()};localStorage.setItem(Be,JSON.stringify(n))}catch{}}function ln(){try{const t=localStorage.getItem(Be);if(!t)return null;const e=JSON.parse(t);return!e.connectorId||!e.address||!e.timestamp?(Y(),null):e}catch{return Y(),null}}function Y(){try{localStorage.removeItem(Be)}catch{}}function dn(t){return Date.now()-t.timestamp>un}function pn({children:t,enableWalletManagement:e=!0,externalProvider:n,network:a=se.NETWORK,balanceRefreshInterval:r=se.BALANCE_REFRESH_INTERVAL,debug:i="info",onAccountChange:p,onChainChange:c,connectors:d,persistSession:l=!0,caching:y}){const o=he();u.useEffect(()=>{h.configure({level:i}),i!=="silent"&&h.info(`SDK v${Mt} initialized`),i==="debug"&&h.debug("Configuration:",{enableWalletManagement:e,network:a,balanceRefreshInterval:r,debugLevel:i,hasConnectors:!!d,persistSession:l})},[i,e,a,r,d,l]);const b=u.useMemo(()=>d||(!e&&n?[new on(n,o.chainId)]:e?[new ct]:[]),[d,e,n,o.chainId]),g=!!d,[m,T]=u.useState({address:null,chainId:null,isConnected:!1,isConnecting:!1,error:null}),[S,f]=u.useState(null),[x,E]=u.useState(null),[_,N]=u.useState(null),[C,A]=u.useState(null),[k,I]=u.useState(null),[q,D]=u.useState(null),[F,G]=u.useState(null),[P,Se]=u.useState(null),O=u.useMemo(()=>new Lt,[]),H=u.useRef(!1),He=u.useMemo(()=>new rn(o.chainId,{enabled:(y==null?void 0:y.enabled)??!0,defaultTTL:(y==null?void 0:y.defaultTTL)??6e4,maxEntries:(y==null?void 0:y.maxEntries)??500}),[o.chainId,y==null?void 0:y.enabled,y==null?void 0:y.defaultTTL,y==null?void 0:y.maxEntries]);u.useEffect(()=>{const w=x||S;if(!w||!m.chainId){N(null),A(null),I(null);return}try{const v=xe(m.chainId),R=rt(m.chainId),$=it(m.chainId);N(new j.Contract(v,we,w)),A(new j.Contract(R,["function balanceOf(address) view returns (uint256)","function allowance(address,address) view returns (uint256)","function approve(address,uint256) returns (bool)"],w)),I(new j.Contract($,["function balanceOf(address) view returns (uint256)","function allowance(address,address) view returns (uint256)","function approve(address,uint256) returns (bool)"],w))}catch(v){console.error("Failed to initialize contracts:",v)}},[x,S,m.chainId]);const ce=u.useCallback(async()=>{if(!(!m.address||!C||!k))try{const[w,v]=await Promise.all([C.balanceOf(m.address),k.balanceOf(m.address)]);D(w),G(v)}catch(w){console.error("Failed to fetch balances:",w)}},[m.address,C,k]);u.useEffect(()=>{if(!m.isConnected)return;ce();const w=setInterval(ce,r);return()=>clearInterval(w)},[m.isConnected,ce,r]);const X=u.useCallback((w,v)=>{E(v.provider),f(v.signer),Se(w),T({address:v.address,chainId:v.chainId,isConnected:!0,isConnecting:!1,error:null}),l&&Ce(w.id,v.address),h.info(`Wallet connected via ${w.name}: ${v.address.slice(0,6)}...${v.address.slice(-4)}`),h.debug("Wallet details:",{connector:w.id,address:v.address,chainId:v.chainId})},[l]),We=u.useCallback(()=>{f(null),E(null),Se(null),T({address:null,chainId:null,isConnected:!1,isConnecting:!1,error:null}),D(null),G(null),Y()},[]),pe=u.useCallback(async w=>{const v=b.find(R=>R.id===w);if(!v)throw new B(`Connector "${w}" not found`);if(!v.isAvailable())throw new B(`Connector "${v.name}" is not available`);T(R=>({...R,isConnecting:!0,error:null}));try{const R=await v.connect();if(R.chainId!==o.chainId&&v.switchNetwork){await v.switchNetwork(o.chainId);const $=await v.connect();X(v,$)}else X(v,R)}catch(R){throw h.error(`Connection via ${v.name} failed:`,R),T($=>({...$,isConnecting:!1,error:R})),R}},[b,o.chainId,X]),ye=u.useCallback(async()=>{if(g){const w=b.find(v=>v.isAvailable());if(w){await pe(w.id);return}throw new B("No available wallet connectors")}if(!e)throw new B("Internal wallet management is disabled");T(w=>({...w,isConnecting:!0,error:null}));try{const w=await O.connect();if(w.chainId!==o.chainId){await O.switchNetwork(o);const R=await O.connect();w.chainId=R.chainId}const v=await w.provider.getSigner();E(w.provider),f(v),T({address:w.address,chainId:w.chainId,isConnected:!0,isConnecting:!1,error:null}),l&&Ce("injected",w.address),h.info(`Wallet connected: ${w.address.slice(0,6)}...${w.address.slice(-4)}`),h.debug("Wallet details:",{address:w.address,chainId:w.chainId})}catch(w){throw h.error("Wallet connection failed:",w),T(v=>({...v,isConnecting:!1,error:w})),w}},[g,b,pe,e,O,o,l]),Z=u.useCallback(async()=>{var w;if(h.info("Wallet disconnected"),P)try{(w=P.removeListeners)==null||w.call(P),await P.disconnect()}catch{}We()},[P,We]),J=u.useCallback(async w=>{if(w!==42161)throw new Error("Only Arbitrum One (chain ID 42161) is supported");if(P!=null&&P.switchNetwork){await P.switchNetwork(w);const R=await P.connect();X(P,R);return}const v=he();await O.switchNetwork(v),e&&await ye()},[P,X,O,e,ye]);u.useEffect(()=>{if(H.current||(H.current=!0,!l))return;const w=ln();if(!w||dn(w)){Y();return}const v=b.find(R=>R.id===w.connectorId);if(!v||!v.isAvailable()){Y();return}v.reconnect&&v.reconnect().then(R=>{R?(X(v,R),h.debug("Session restored via",v.name)):Y()}).catch(()=>{Y()})},[l,b,X]),u.useEffect(()=>{if(P)return P.onAccountsChanged&&P.onAccountsChanged(w=>{if(w.length===0)Z();else if(w[0]!==m.address){const v=m.address;T(R=>({...R,address:w[0]})),l&&Ce(P.id,w[0]),p&&v&&p(w[0],v)}}),P.onChainChanged&&P.onChainChanged(w=>{const v=m.chainId;T(R=>({...R,chainId:w})),c&&v&&c(w,v),w!==o.chainId&&J(o.chainId).catch(console.error)}),()=>{var w;(w=P.removeListeners)==null||w.call(P)}},[P,Z,m.address,m.chainId,o.chainId,J,p,c,l]),u.useEffect(()=>{g||!e&&n&&(E(n.provider),f(n.signer),T({address:n.address,chainId:o.chainId,isConnected:!0,isConnecting:!1,error:null}))},[g,e,n,o.chainId]),u.useEffect(()=>{if(g||!e||P)return;const w=(...R)=>{const $=R[0];if($.length===0)Z();else if($[0]!==m.address){const ee=m.address;T(me=>({...me,address:$[0]})),p&&ee&&p($[0],ee)}},v=(...R)=>{const $=R[0],ee=parseInt($,16),me=m.chainId;T(Dt=>({...Dt,chainId:ee})),c&&me&&c(ee,me),ee!==o.chainId&&J(o.chainId).catch(console.error)};return O.onAccountsChanged(w),O.onChainChanged(v),()=>{O.removeAccountsChangedListener(w),O.removeChainChangedListener(v)}},[g,e,P,O,Z,m.address,m.chainId,o.chainId,J,p,c]);const kt=u.useMemo(()=>({wallet:m,signer:S,provider:x,network:o,switchNetwork:J,subscryptsContract:_,subsTokenContract:C,usdcTokenContract:k,subsBalance:q,usdcBalance:F,refreshBalances:ce,cacheManager:He,connectors:b,activeConnector:P,connectWith:pe,...e||g?{connect:ye,disconnect:Z}:{}}),[m,S,x,o,J,_,C,k,q,F,ce,He,b,P,pe,e,g,ye,Z]);return s.jsx(Ze.Provider,{value:kt,children:t})}function ot(t,e="Address"){if(!t||t.trim()==="")throw new W(e,`${e} is required`);if(!j.isAddress(t))throw new W(e,`Invalid ${e.toLowerCase()}: ${t}`);return j.getAddress(t)}function ut(t,e="Value"){if(typeof t!="number"||isNaN(t))throw new W(e,`${e} must be a number`);if(t<=0)throw new W(e,`${e} must be positive`)}function yn(t,e="Value"){if(typeof t!="bigint")throw new W(e,`${e} must be a bigint`);if(t<=0n)throw new W(e,`${e} must be positive`)}function ae(t){if(!t||t.trim()==="")throw new W("planId","Plan ID is required")}function lt(t){if(ut(t,"Cycle limit"),!Number.isInteger(t))throw new W("cycleLimit","Cycle limit must be an integer");if(t>1e3)throw new W("cycleLimit","Cycle limit cannot exceed 1000")}async function Ge(t,e,n){try{const a=typeof e=="string"?BigInt(e):e,r=await t.getPlanSubscription(a,n);return r&&r.id>0n}catch{return!1}}async function Ke(t,e,n){try{const[a,r]=await t.subCheckSanctions(e,n);return{merchantSanctioned:a,subscriberSanctioned:r}}catch(a){return console.warn("Sanctions check failed, allowing transaction:",a),{merchantSanctioned:!1,subscriberSanctioned:!1}}}function dt(t,e){const{subscryptsContract:n,wallet:a,cacheManager:r}=U(),[i,p]=u.useState(null),[c,d]=u.useState(!0),[l,y]=u.useState(null),o=e||a.address,b=u.useCallback(async()=>{try{ae(t)}catch(m){y(m),d(!1);return}if(!n){y(new Error("Subscrypts contract not initialized")),d(!1);return}if(!o){y(new Error("No wallet address available")),d(!1);return}if(!r){y(new Error("Cache manager not initialized")),d(!1);return}d(!0),y(null);try{const m=n.runner;if(!m)throw new Error("Contract runner not available");const T=`subscription-status:${t}:${o}`,S=A=>{if(!A||!A.nextPaymentDate)return 3e4;const k=Math.floor(Date.now()/1e3),I=Number(A.nextPaymentDate)-k;return I<300?1e4:I<3600?3e4:6e4},f=await r.get(T,async()=>{const A=await ke(m,BigInt(t),o);return!A||A.id===0n?null:await De(m,A.id)},void 0);f&&r.set(T,f,S(f));const x=f,E=(x==null?void 0:x.id)??0n;if(E===0n||!x){p({isActive:!1,expirationDate:null,isAutoRenewing:!1,remainingCycles:0,subscriptionId:null}),d(!1);return}const _=Math.floor(Date.now()/1e3),N=x.nextPaymentDate??0n,C=Number(N)>_;p({isActive:C,expirationDate:new Date(Number(N)*1e3),isAutoRenewing:x.isRecurring,remainingCycles:Number(x.remainingCycles),subscriptionId:E.toString()}),d(!1)}catch(m){y(m),d(!1),p(null)}},[n,t,o,r]);u.useEffect(()=>{b()},[b]);const g=u.useCallback(async()=>{await b()},[b]);return{status:i,isLoading:c,error:l,refetch:g}}const pt={name:"Permit2",chainId:42161,verifyingContract:je},yt={TokenPermissions:[{name:"token",type:"address"},{name:"amount",type:"uint256"}],PermitTransferFrom:[{name:"permitted",type:"TokenPermissions"},{name:"spender",type:"address"},{name:"nonce",type:"uint256"},{name:"deadline",type:"uint256"}]};async function mt(t,e,n,a,r){h.debug("Generating PERMIT2 signature:",{token:e,amount:n.toString(),spender:a,deadline:r.toString()});const i=j.ethers.hexlify(j.ethers.randomBytes(32)),p={permitted:{token:e,amount:n.toString()},spender:a,nonce:BigInt(i).toString(),deadline:r.toString()};h.debug("EIP-712 message:",p),h.info("Requesting wallet signature...");const c=await t.signTypedData(pt,yt,p);return h.debug("PERMIT2 signature obtained:",{nonce:i,signatureLength:c.length}),{signature:c,nonce:i}}function bt(){const{subscryptsContract:t,subsTokenContract:e,usdcTokenContract:n,wallet:a,signer:r,cacheManager:i}=U(),[p,c]=u.useState(!1),[d,l]=u.useState("idle"),[y,o]=u.useState(null),[b,g]=u.useState(null),[m,T]=u.useState(null);return{subscribe:u.useCallback(async f=>{h.group(`Subscribe (${f.paymentMethod})`),h.debug("Subscribe params:",ge(f));try{ae(f.planId),lt(f.cycleLimit),h.debug("Validation passed")}catch(x){throw h.error("Validation failed:",x),h.groupEnd(),o(x),x}if(!t||!a.address||!r){const x=new Error("Wallet not connected or contract not initialized");throw h.error("Pre-condition failed:",x.message),h.groupEnd(),o(x),x}if(!e||!n){const x=new Error("Token contracts not initialized");throw h.error("Pre-condition failed:",x.message),h.groupEnd(),o(x),x}c(!0),o(null),l("idle"),g(null),T(null);try{const x=xe(a.chainId);if(f.paymentMethod==="SUBS"){h.info("Starting SUBS payment flow"),h.info("Checking sanctions status...");const E=await t.getPlan(BigInt(f.planId)),_=await Ke(t,E.merchantAddress,a.address);if(_.merchantSanctioned)throw h.error("Merchant address is sanctioned"),new be(E.merchantAddress,!0,{planId:f.planId});if(_.subscriberSanctioned)throw h.error("Subscriber address is sanctioned"),new be(a.address,!1,{planId:f.planId});h.debug("Sanctions check passed");const N=new Ve(e.target,r,Q.SUBS,"SUBS");l("approving"),h.info("Checking SUBS allowance...");const C=BigInt("1000000000000000000000");try{await N.ensureAllowance(a.address,x,C),h.debug("SUBS allowance confirmed")}catch(I){if(I instanceof fe)throw h.error("Insufficient SUBS balance:",I),h.groupEnd(),o(I),c(!1),l("error"),I;h.warn("Allowance check warning (continuing):",I)}f.referralAddress&&f.referralAddress!==j.ZeroAddress&&(h.info("Validating referral address..."),await Ge(t,f.planId,f.referralAddress)?h.debug("Referral address validated successfully"):h.warn(`Referral address is not a subscriber to this plan: ${f.referralAddress} - Referral bonus will NOT be applied by the contract`)),l("subscribing");const k=(await sn(r,{planId:BigInt(f.planId),subscriber:a.address,recurring:f.autoRenew,remainingCycles:BigInt(f.cycleLimit),referral:f.referralAddress||j.ZeroAddress,onlyCreate:!1,deductFrom:a.address})).subscriptionId.toString();return T(k),l("success"),c(!1),h.debug("Auto-invalidating cache after successful subscription"),i.invalidate("my-subscriptions:"),i.invalidate(`subscription-status:${f.planId}:`),h.debug("Cache invalidated successfully"),h.success(`Subscription ID: ${k}`),h.groupEnd(),k}else{h.info("Starting USDC payment flow");const E=new Ve(n.target,r,Q.USDC,"USDC");l("approving");const _=r.provider;if(!_)throw h.error("Provider not available"),h.groupEnd(),new te("Provider not available");h.info("Fetching plan data...");const N=await t.getPlan(BigInt(f.planId));h.debug("Plan data:",ge({subscriptionAmount:N.subscriptionAmount,currencyCode:N.currencyCode})),h.info("Checking sanctions status...");const C=await Ke(t,N.merchantAddress,a.address);if(C.merchantSanctioned)throw h.error("Merchant address is sanctioned"),new be(N.merchantAddress,!0,{planId:f.planId});if(C.subscriberSanctioned)throw h.error("Subscriber address is sanctioned"),new be(a.address,!1,{planId:f.planId});h.debug("Sanctions check passed");let A=N.subscriptionAmount;Number(N.currencyCode)===1&&(h.debug("USD-denominated plan, converting to SUBS..."),A=(await t.convertOtherCurrencyToToken(N.subscriptionAmount)).outputSUBS18,h.debug("Conversion result:",{outputSUBS18:A.toString()})),h.debug("Required SUBS:",A.toString()),h.info("Fetching USDC quote from Uniswap...");const q=(await new j.Contract(Pe,Re,_).quoteExactOutputSingle.staticCall({tokenIn:_e,tokenOut:x,amount:A,fee:se.UNISWAP_FEE_TIER,sqrtPriceLimitX96:0n}))[0],D=q*10050n/10000n;h.debug("Quote result:",{usdcNeeded:q.toString(),maxUsdcIn:D.toString(),slippageBuffer:"0.5%"}),h.info("Checking USDC allowance for PERMIT2...");try{await E.ensureAllowance(a.address,je,D),h.debug("USDC allowance confirmed for PERMIT2")}catch(H){if(H instanceof fe)throw h.error("Insufficient USDC balance:",H),h.groupEnd(),o(H),c(!1),l("error"),H;h.warn("Allowance check warning (continuing):",H)}const F=BigInt(Math.floor(Date.now()/1e3)+1800);h.info("Generating PERMIT2 signature..."),l("approving");const{signature:G,nonce:P}=await mt(r,n.target,D,x,F);h.debug("PERMIT2 signature generated:",{nonce:P.toString(),deadline:F.toString(),signatureLength:G.length}),f.referralAddress&&f.referralAddress!==j.ZeroAddress&&(h.info("Validating referral address..."),await Ge(t,f.planId,f.referralAddress)?h.debug("Referral address validated successfully"):h.warn(`Referral address is not a subscriber to this plan: ${f.referralAddress} - Referral bonus will NOT be applied by the contract`)),l("subscribing");const O=(await an(r,{planId:BigInt(f.planId),recurring:f.autoRenew,remainingCycles:BigInt(f.cycleLimit),referral:f.referralAddress||j.ZeroAddress,feeTier:BigInt(se.UNISWAP_FEE_TIER),deadline:F,nonce:BigInt(P),permitDeadline:F,signature:G,maxUsdcIn6Cap:D},a.address)).subId.toString();return T(O),l("success"),c(!1),h.debug("Auto-invalidating cache after successful subscription"),i.invalidate("my-subscriptions:"),i.invalidate(`subscription-status:${f.planId}:`),h.debug("Cache invalidated successfully"),h.success(`Subscription ID: ${O}`),h.groupEnd(),O}}catch(x){h.error("Subscribe failed:",x),h.groupEnd();const E=new ne("Failed to create subscription",void 0,{error:x});throw o(E),l("error"),c(!1),E}},[t,e,n,a,r]),isSubscribing:p,txState:d,error:y,txHash:b,subscriptionId:m}}function ft(t){const{signer:e}=U(),[n,a]=u.useState("idle"),[r,i]=u.useState(null),[p,c]=u.useState(!1),d=BigInt(t),l=u.useCallback(async()=>{if(!e)throw new Error("Wallet not connected");h.info(`Cancelling subscription ${t}`),c(!0),a("subscribing"),i(null);try{await(await ve(e,d,!1,0n)).wait(),a("success"),h.info(`Subscription ${t} cancelled`)}catch(g){const m=new ne("Failed to cancel subscription",void 0,{error:g});throw i(m),a("error"),m}finally{c(!1)}},[e,d,t]),y=u.useCallback(async g=>{if(!e)throw new Error("Wallet not connected");h.info(`Setting auto-renew=${g} for subscription ${t}`),c(!0),a("subscribing"),i(null);try{await(await ve(e,d,g,0n)).wait(),a("success"),h.info(`Subscription ${t} auto-renew set to ${g}`)}catch(m){const T=new ne("Failed to update auto-renewal",void 0,{error:m});throw i(T),a("error"),T}finally{c(!1)}},[e,d,t]),o=u.useCallback(async g=>{if(!e)throw new Error("Wallet not connected");h.info(`Updating cycles to ${g} for subscription ${t}`),c(!0),a("subscribing"),i(null);try{await(await ve(e,d,!0,BigInt(g))).wait(),a("success"),h.info(`Subscription ${t} cycles updated to ${g}`)}catch(m){const T=new ne("Failed to update payment cycles",void 0,{error:m});throw i(T),a("error"),T}finally{c(!1)}},[e,d,t]),b=u.useCallback(async g=>{if(!e)throw new Error("Wallet not connected");h.info(`Updating attributes for subscription ${t}`),c(!0),a("subscribing"),i(null);try{await(await Yt(e,d,g)).wait(),a("success"),h.info(`Subscription ${t} attributes updated`)}catch(m){const T=new ne("Failed to update subscription attributes",void 0,{error:m});throw i(T),a("error"),T}finally{c(!1)}},[e,d,t]);return{cancelSubscription:l,toggleAutoRenew:y,updateCycles:o,updateAttributes:b,txState:n,error:r,isProcessing:p}}function ze(t){return{id:t.id.toString(),merchantAddress:t.merchantAddress,planId:t.planId.toString(),subscriber:t.subscriberAddress,currencyCode:t.currencyCode,subscriptionAmount:t.subscriptionAmount,paymentFrequency:t.paymentFrequency,isAutoRenewing:t.isRecurring,remainingCycles:Number(t.remainingCycles),customAttributes:t.customAttributes,lastPaymentDate:new Date(Number(t.lastPaymentDate)*1e3),nextPaymentDate:new Date(Number(t.nextPaymentDate)*1e3)}}function ht(t,e=10,n){const{provider:a,wallet:r,cacheManager:i}=U(),[p,c]=u.useState([]),[d,l]=u.useState(0),[y,o]=u.useState(1),[b,g]=u.useState(!0),[m,T]=u.useState(null),S=t||(r==null?void 0:r.address),f=u.useCallback(async()=>{if(!S){T(new Error("No wallet address provided")),g(!1);return}if(!a||!i){T(new Error("Provider not initialized")),g(!1);return}g(!0),T(null);try{const C=`my-subscriptions:${S}`;let A=await i.get(C,async()=>{const D=await tn(a,S,0n,100n),[F]=D;return F.map(ze)},12e4);if(A.length===0&&n&&n.length>0){console.warn("getSubscriptionsByAddress returned empty, falling back to plan loop method");for(const D of n)try{const F=await ke(a,BigInt(D),S);if(F&&F.id&&F.id!==0n){const G=await De(a,F.id);G&&A.push(ze(G))}}catch(F){console.warn(`Failed to fetch subscription for plan ${D}:`,F)}}n&&n.length>0&&A.length>0&&(A=A.filter(D=>n.includes(D.planId)));const k=(y-1)*e,I=y*e,q=A.slice(k,I);c(q),l(A.length),g(!1)}catch(C){T(C),g(!1),c([]),l(0)}},[a,S,y,e,n,i]);u.useEffect(()=>{f()},[f]);const x=u.useCallback(()=>{y*e<d&&o(C=>C+1)},[y,e,d]),E=u.useCallback(()=>{y>1&&o(C=>C-1)},[y]),_=y*e<d,N=u.useCallback(async()=>{await f()},[f]);return{subscriptions:p,total:d,page:y,pageSize:e,hasMore:_,isLoading:b,error:m,nextPage:x,prevPage:E,refetch:N}}function Ue(t,e,n=4){const r=j.formatUnits(t,e).split(".");if(r.length===1)return r[0];const i=r[1].slice(0,n);return`${r[0]}.${i}`}function mn(t,e){return j.parseUnits(t,e)}function le(t){return Ue(t,18,4)}function Le(t){return Ue(t,6,2)}function Fe(t){return new Intl.DateTimeFormat("en-US",{year:"numeric",month:"short",day:"numeric"}).format(t)}function bn(t){return new Intl.DateTimeFormat("en-US",{year:"numeric",month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"}).format(t)}function fn(t){const e=Math.floor(t/86400),n=Math.floor(t%86400/3600),a=Math.floor(t%3600/60);return e>0?`${e} day${e>1?"s":""}`:n>0?`${n} hour${n>1?"s":""}`:a>0?`${a} minute${a>1?"s":""}`:`${t} second${t>1?"s":""}`}function hn(t,e=6,n=4){return t?t.length<=e+n?t:`${t.slice(0,e)}...${t.slice(-n)}`:""}function gn(t,e=2){return`${t.toFixed(e)}%`}function gt(t,e="en-US"){return new Intl.NumberFormat(e,{style:"currency",currency:"USD",minimumFractionDigits:2,maximumFractionDigits:2}).format(t)}function Ne(t){const{subsBalance:e,usdcBalance:n,refreshBalances:a,wallet:r}=U(),i=t==="SUBS"?e:n,p=r.isConnected&&i===null,c=i!==null?t==="SUBS"?le(i):Le(i):"0.00";return{balance:i,formatted:c,isLoading:p,refetch:a}}function wt(){const{wallet:t,connect:e,disconnect:n,switchNetwork:a,connectors:r,activeConnector:i,connectWith:p}=U();return{...t,connect:e,disconnect:n,switchNetwork:a,connectors:r,activeConnector:i,connectWith:p}}function wn(t){const{provider:e,cacheManager:n}=U(),[a,r]=u.useState(null),[i,p]=u.useState(!0),[c,d]=u.useState(null),l=u.useCallback(async()=>{try{ae(t)}catch(o){d(o),p(!1);return}if(!e||!n){d(new Error("Provider not initialized")),p(!1);return}p(!0),d(null);try{const o=`plan:${t}`,b=await n.get(o,()=>Me(e,BigInt(t)),-1);r(b),p(!1)}catch(o){d(o),p(!1),r(null)}},[e,t,n]);u.useEffect(()=>{t&&l()},[l,t]);const y=u.useCallback(async()=>{await l()},[l]);return{plan:a,isLoading:i,error:c,refetch:y}}function Tt(t){const{provider:e}=U(),[n,a]=u.useState([]),[r,i]=u.useState(!0),[p,c]=u.useState(null),d=u.useMemo(()=>t.join(","),[t]),l=u.useCallback(async()=>{if(!t||t.length===0){a([]),i(!1);return}try{t.forEach(o=>ae(o))}catch(o){c(o),i(!1);return}if(!e){c(new Error("Provider not initialized")),i(!1);return}i(!0),c(null);try{const o=t.map(g=>Me(e,BigInt(g))),b=await Promise.all(o);a(b),i(!1)}catch(o){c(o),i(!1),a([])}},[e,d]);u.useEffect(()=>{l()},[l]);const y=u.useCallback(async()=>{await l()},[l]);return{plans:n,isLoading:r,error:p,refetch:y}}function xt(t){const{provider:e}=U(),[n,a]=u.useState([]),[r,i]=u.useState(0),[p,c]=u.useState(!0),[d,l]=u.useState(null),y=u.useCallback(async()=>{try{ot(t)}catch(b){l(b),c(!1);return}if(!e){l(new Error("Provider not initialized")),c(!1);return}c(!0),l(null);try{const b=await Zt(e),g=Number(b);if(g===0){a([]),i(0),c(!1);return}const[m]=await en(e,1n,BigInt(g)),T=m.filter(S=>S.merchantAddress.toLowerCase()===t.toLowerCase());a(T),i(T.length),c(!1)}catch(b){l(b),c(!1),a([])}},[e,t]);u.useEffect(()=>{t&&y()},[y,t]);const o=u.useCallback(async()=>{await y()},[y]);return{plans:n,total:r,isLoading:p,error:d,refetch:o}}const Xe=10n**BigInt(Q.SUBS),Tn=6e4;function St(t=Tn){const{provider:e}=U(),[n,a]=u.useState(null),[r,i]=u.useState(null),[p,c]=u.useState(!0),[d,l]=u.useState(null),y=u.useRef(null),o=u.useCallback(async()=>{if(!e){l(new Error("Provider not initialized")),c(!1);return}c(!0),l(null);try{const g=await et(e,Xe),m=BigInt(g.toString());i(m);const T=Number(m)/Number(Xe);a(T),c(!1)}catch(g){l(g),c(!1)}},[e]);u.useEffect(()=>(o(),t>0&&(y.current=setInterval(o,t)),()=>{y.current&&clearInterval(y.current)}),[o,t]);const b=u.useCallback(async()=>{await o()},[o]);return{priceUsd:n,rawPrice:r,isLoading:p,error:d,refetch:b}}const Ye=10n**BigInt(Q.SUBS),xn=6e4;function Sn(t){const e=Number(t);return e<=0?"One-time":e<=86400?"Daily":e<=604800?"Weekly":e<=1209600?"Bi-weekly":e<=2678400?"Monthly":e<=7948800?"Quarterly":e<=15897600?"Semi-annually":e<=31536e3?"Annually":`Every ${Math.round(e/86400)} days`}function vn(t,e=xn){const{provider:n,wallet:a}=U(),[r,i]=u.useState(null),[p,c]=u.useState(!0),[d,l]=u.useState(null),y=u.useRef(null),o=u.useCallback(async()=>{var g;try{ae(t)}catch(m){l(m),c(!1);return}if(!n){l(new Error("Provider not initialized")),c(!1);return}c(!0),l(null);try{const m=await Me(n,BigInt(t)),T=Number(m.currencyCode)===1,S=Sn(m.paymentFrequency);let f,x=null;if(T){const N=await Jt(n,m.subscriptionAmount);f=BigInt(((g=N.outputSUBS18)==null?void 0:g.toString())??N.toString()),x=Number(m.subscriptionAmount)/Number(Ye)}else{f=m.subscriptionAmount;try{const N=await et(n,f);x=Number(BigInt(N.toString()))/Number(Ye)}catch{x=null}}let E=null,_=null;try{const N=xe(a.chainId??42161),k=(await new j.Contract(Pe,Re,n).quoteExactOutputSingle.staticCall({tokenIn:_e,tokenOut:N,amount:f,fee:se.UNISWAP_FEE_TIER,sqrtPriceLimitX96:0n}))[0];E=k,_=Le(k)}catch{}i({subsAmount:f,subsFormatted:le(f),usdcAmount:E,usdcFormatted:_,usdValue:x,frequency:S,isUsdDenominated:T}),c(!1)}catch(m){l(m),c(!1),i(null)}},[n,a.chainId,t]);u.useEffect(()=>(t&&(o(),e>0&&(y.current=setInterval(o,e))),()=>{y.current&&clearInterval(y.current)}),[o,t,e]);const b=u.useCallback(async()=>{await o()},[o]);return{price:r,isLoading:p,error:d,refetch:b}}function Cn(t){const{subscryptsContract:e}=U(),[n,a]=u.useState(!1),[r,i]=u.useState(null),{onSubscriptionCreated:p,onSubscriptionPaid:c,onSubscriptionStopped:d}=t;return u.useEffect(()=>{if(!e){a(!1);return}try{if(p){const l=(y,o,b,g)=>{p({subscriptionId:y,planId:o,subscriber:b,referral:g})};e.on("_subscriptionCreate",l)}if(c){const l=(y,o,b)=>{c({subscriptionId:y,payer:o,amount:b})};e.on("_subscriptionPay",l)}if(d){const l=(y,o,b)=>{d({subscriptionId:y,subscriber:o,enabled:b})};e.on("_subscriptionRecurring",l)}a(!0),i(null)}catch(l){i(l),a(!1)}return()=>{e&&(e.removeAllListeners("_subscriptionCreate"),e.removeAllListeners("_subscriptionPay"),e.removeAllListeners("_subscriptionRecurring")),a(!1)}},[e,p,c,d]),{isListening:n,error:r}}function Oe(){const{wallet:t}=U(),e=(t==null?void 0:t.address)||"";return xt(e)}const En=3*24*60*60*1e3;function re(t){const{subscription:e,now:n=new Date}=t;if(!e)return{state:"not-found",isActive:!1,daysUntilExpiry:null,nextPaymentDate:null,isAutoRenewing:!1,remainingCycles:0};const{nextPaymentDate:a,isAutoRenewing:r,remainingCycles:i}=e;if(a<=n)return{state:"expired",isActive:!1,daysUntilExpiry:0,nextPaymentDate:a,isAutoRenewing:r,remainingCycles:i};if(!r&&i===0){const d=a.getTime()-n.getTime();return{state:"cancelled",isActive:!0,daysUntilExpiry:Math.ceil(d/(24*60*60*1e3)),nextPaymentDate:a,isAutoRenewing:r,remainingCycles:i}}const p=a.getTime()-n.getTime(),c=Math.ceil(p/(24*60*60*1e3));return p<En?{state:"expiring-soon",isActive:!0,daysUntilExpiry:c,nextPaymentDate:a,isAutoRenewing:r,remainingCycles:i}:{state:"active",isActive:!0,daysUntilExpiry:c,nextPaymentDate:a,isAutoRenewing:r,remainingCycles:i}}function vt(t,e=10){const{provider:n}=U(),[a,r]=u.useState([]),[i,p]=u.useState(0),[c,d]=u.useState(0),[l,y]=u.useState(1),[o,b]=u.useState(!0),[g,m]=u.useState(null),T=u.useCallback(async()=>{if(!t){m(new Error("Plan ID is required")),b(!1);return}if(!n){m(new Error("Provider not initialized")),b(!1);return}b(!0),m(null);try{const _=BigInt((l-1)*e+1),N=BigInt(l*e),C=await tt(n,BigInt(t),_,N),[A,,,k]=C;r(A),p(Number(k));const I=A.filter(q=>re({subscription:q}).isActive).length;d(I),b(!1)}catch(_){m(_),b(!1),r([]),p(0),d(0)}},[n,t,l,e]);u.useEffect(()=>{T()},[T]);const S=u.useCallback(()=>{l*e<i&&y(_=>_+1)},[l,e,i]),f=u.useCallback(()=>{l>1&&y(_=>_-1)},[l]),x=l*e<i,E=u.useCallback(async()=>{await T()},[T]);return{subscribers:a,total:i,activeCount:c,page:l,pageSize:e,hasMore:x,isLoading:o,error:g,nextPage:S,prevPage:f,refetch:E}}function Ct(t){const{provider:e}=U(),{plans:n,isLoading:a,error:r}=Oe(),{priceUsd:i}=St(),[p,c]=u.useState(null),[d,l]=u.useState(!0),[y,o]=u.useState(null),b=u.useCallback(async()=>{if(r){o(r),l(!1);return}if(!a){if(!e){o(new Error("Provider not initialized")),l(!1);return}l(!0),o(null);try{const m=t?n.filter(C=>t.includes(C.id.toString())):n;if(m.length===0){c({totalSubscribers:0,activeSubscribers:0,monthlyRecurringRevenue:0n,mrrFormatted:"0.0000",mrrUsdEstimate:0}),l(!1);return}const T=m.map(async C=>{const A=Number(C.subscriberCount);if(A===0)return[];const[k]=await tt(e,C.id,1n,BigInt(A));return k}),f=(await Promise.all(T)).flat(),x=f.filter(C=>re({subscription:C}).isActive),E=2592000n;let _=0n;for(const C of x){const k=C.subscriptionAmount/C.paymentFrequency*E;_+=k}const N=i?Number(_)/1e18*i:null;c({totalSubscribers:f.length,activeSubscribers:x.length,monthlyRecurringRevenue:_,mrrFormatted:le(_),mrrUsdEstimate:N}),l(!1)}catch(m){o(m),l(!1),c(null)}}},[e,n,t,a,r,i]);u.useEffect(()=>{b()},[b]);const g=u.useCallback(async()=>{await b()},[b]);return{revenue:p,isLoading:d,error:y,refetch:g}}function z(){return s.jsx("div",{className:"subscrypts-flex subscrypts-items-center subscrypts-justify-center subscrypts-p-4",children:s.jsx("div",{className:"subscrypts-animate-spin subscrypts-rounded-full subscrypts-h-8 subscrypts-w-8 subscrypts-border-b-2 subscrypts-border-brand-primary",role:"status","aria-label":"Loading",children:s.jsx("span",{className:"subscrypts-sr-only",children:"Loading..."})})})}function Nn(t,e){const{subscryptsContract:n,wallet:a}=U(),[r,i]=u.useState(!1),[p,c]=u.useState(!0),d=u.useCallback(async()=>{if(!n||!a.address||t.length===0){i(!1),c(!1);return}c(!0);try{const l=n.runner;if(!l){i(!1),c(!1);return}const y=Math.floor(Date.now()/1e3),o=await Promise.all(t.map(async g=>{try{const m=await ke(l,BigInt(g),a.address),T=(m==null?void 0:m.id)??0n;if(T===0n||!m)return!1;const S=await De(l,T);if(!S)return!1;const f=S.nextPaymentDate??0n;return Number(f)>y}catch{return!1}})),b=e?o.every(g=>g):o.some(g=>g);i(b)}catch{i(!1)}finally{c(!1)}},[n,a.address,t,e]);return u.useEffect(()=>{d()},[d]),{isActive:r,isLoading:p}}function An({planId:t,planIds:e,requireAll:n=!1,fallbackUrl:a,loadingComponent:r,children:i,onAccessDenied:p}){var g;const c=e||(t?[t]:[]),d=!e&&!!t,l=dt(d?t:"0"),y=Nn(d?[]:c,n),o=d?l.isLoading:y.isLoading,b=d?!!((g=l.status)!=null&&g.isActive):y.isActive;return u.useEffect(()=>{!o&&!b&&(p&&p(),a&&(window.location.href=a))},[o,b,a,p]),o?s.jsx(s.Fragment,{children:r||s.jsx(z,{})}):b?s.jsx(s.Fragment,{children:i}):null}function de({isOpen:t,onClose:e,title:n,children:a,size:r="md"}){if(u.useEffect(()=>{const p=c=>{c.key==="Escape"&&t&&e()};return document.addEventListener("keydown",p),()=>document.removeEventListener("keydown",p)},[t,e]),u.useEffect(()=>(t?document.body.style.overflow="hidden":document.body.style.overflow="unset",()=>{document.body.style.overflow="unset"}),[t]),!t)return null;const i={sm:"subscrypts-max-w-md",md:"subscrypts-max-w-lg",lg:"subscrypts-max-w-2xl"};return s.jsx("div",{className:"subscrypts-modal-overlay",onClick:e,children:s.jsxs("div",{className:`subscrypts-modal-content ${i[r]}`,onClick:p=>p.stopPropagation(),children:[n&&s.jsxs("div",{className:"subscrypts-modal-header",children:[s.jsx("h2",{className:"subscrypts-modal-title",children:n}),s.jsx("button",{onClick:e,className:"subscrypts-modal-close","aria-label":"Close modal",children:"×"})]}),s.jsx("div",{className:"subscrypts-modal-body",children:a})]})})}function In({cycleLimit:t,onCycleLimitChange:e,autoRenew:n,onAutoRenewChange:a,paymentMethod:r,onPaymentMethodChange:i,onNext:p,onCancel:c}){const{formatted:d}=Ne("SUBS"),{formatted:l}=Ne("USDC"),y=[12,24,36];return s.jsxs("div",{className:"subscrypts-config-step",children:[s.jsxs("div",{className:"subscrypts-form-group",children:[s.jsx("label",{className:"subscrypts-label",children:"Cycle Limit"}),s.jsx("div",{className:"subscrypts-cycle-options",children:y.map(o=>s.jsxs("button",{onClick:()=>e(o),className:`subscrypts-cycle-option ${t===o?"subscrypts-cycle-option-active":""}`,children:[o," cycles"]},o))}),s.jsx("input",{type:"number",value:t,onChange:o=>e(Number(o.target.value)),min:1,max:1e3,className:"subscrypts-input subscrypts-mt-2",placeholder:"Custom cycles"})]}),s.jsxs("div",{className:"subscrypts-form-group",children:[s.jsxs("label",{className:"subscrypts-label subscrypts-flex subscrypts-items-center",children:[s.jsx("input",{type:"checkbox",checked:n,onChange:o=>a(o.target.checked),className:"subscrypts-checkbox"}),s.jsx("span",{className:"subscrypts-ml-2",children:"Enable Auto-Renewal"})]}),s.jsx("p",{className:"subscrypts-text-sm subscrypts-text-secondary",children:"Automatically renew subscription when it expires"})]}),s.jsxs("div",{className:"subscrypts-form-group",children:[s.jsx("label",{className:"subscrypts-label",children:"Payment Method"}),s.jsxs("div",{className:"subscrypts-payment-methods",children:[s.jsxs("button",{onClick:()=>i("SUBS"),className:`subscrypts-payment-card ${r==="SUBS"?"subscrypts-payment-card-active":""}`,children:[s.jsx("div",{className:"subscrypts-payment-card-header",children:s.jsx("span",{className:"subscrypts-payment-card-title",children:"Pay with SUBS"})}),s.jsxs("div",{className:"subscrypts-payment-card-balance",children:["Balance: ",d," SUBS"]})]}),s.jsxs("button",{onClick:()=>i("USDC"),className:`subscrypts-payment-card ${r==="USDC"?"subscrypts-payment-card-active":""}`,children:[s.jsxs("div",{className:"subscrypts-payment-card-header",children:[s.jsx("span",{className:"subscrypts-payment-card-title",children:"Pay with USDC"}),s.jsx("span",{className:"subscrypts-badge",children:"Auto-Swap"})]}),s.jsxs("div",{className:"subscrypts-payment-card-balance",children:["Balance: ",l," USDC"]})]})]})]}),s.jsxs("div",{className:"subscrypts-form-actions",children:[s.jsx("button",{onClick:c,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-md",children:"Cancel"}),s.jsx("button",{onClick:p,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md",children:"Next"})]})]})}const Et={ACTION_REJECTED:{title:"Transaction Rejected",message:"You rejected the transaction in your wallet.",suggestion:"Click retry if you would like to try again.",isRetryable:!0},INSUFFICIENT_FUNDS:{title:"Insufficient Gas",message:"You do not have enough ETH to pay for network fees.",suggestion:"Add ETH to your wallet on Arbitrum to cover gas fees.",isRetryable:!1},CALL_EXCEPTION:{title:"Contract Error",message:"The smart contract returned an error.",suggestion:"The plan may no longer be available, or your subscription may already exist.",isRetryable:!0},NETWORK_ERROR:{title:"Network Error",message:"Could not connect to the Arbitrum network.",suggestion:"Check your internet connection and try again.",isRetryable:!0},TIMEOUT:{title:"Request Timeout",message:"The request took too long to complete.",suggestion:"The network may be congested. Please try again.",isRetryable:!0},UNPREDICTABLE_GAS_LIMIT:{title:"Transaction Would Fail",message:"This transaction would likely fail if submitted.",suggestion:"Check that you have sufficient token balance and allowance.",isRetryable:!1},NONCE_EXPIRED:{title:"Transaction Outdated",message:"The transaction nonce has expired.",suggestion:"Please try the transaction again.",isRetryable:!0},REPLACEMENT_UNDERPRICED:{title:"Gas Price Too Low",message:"The replacement transaction gas price is too low.",suggestion:"Wait for the pending transaction to complete, then try again.",isRetryable:!0},SERVER_ERROR:{title:"Server Error",message:"The RPC server returned an error.",suggestion:"The network may be experiencing issues. Please try again later.",isRetryable:!0},WALLET_ERROR:{title:"Wallet Error",message:"There was a problem with your wallet connection.",suggestion:"Try disconnecting and reconnecting your wallet.",isRetryable:!0},NETWORK_MISMATCH:{title:"Wrong Network",message:"Your wallet is connected to the wrong network.",suggestion:"Please switch to Arbitrum One in your wallet.",isRetryable:!0},INSUFFICIENT_BALANCE:{title:"Insufficient Balance",message:"You do not have enough tokens to complete this transaction.",suggestion:"Add more tokens to your wallet before trying again.",isRetryable:!1},TRANSACTION_ERROR:{title:"Transaction Failed",message:"The transaction failed to execute.",suggestion:"Please try again. If the issue persists, the contract conditions may have changed.",isRetryable:!0},VALIDATION_ERROR:{title:"Invalid Input",message:"The provided input is invalid.",suggestion:"Please check your input values and try again.",isRetryable:!1},SANCTIONS_ERROR:{title:"Address Sanctioned",message:"This wallet address is sanctioned and cannot be used for subscriptions.",suggestion:"This address has been flagged by compliance systems. Contact support if you believe this is an error.",isRetryable:!1}},_n={title:"Something Went Wrong",message:"An unexpected error occurred.",suggestion:"Please try again. If the issue persists, check your wallet and network connection.",isRetryable:!0};function Nt(t){if(!t)return"UNKNOWN";if(typeof t=="object"&&t!==null){const e=t;if(typeof e.code=="string")return e.code;if(e.info&&typeof e.info=="object"){const a=e.info;if(a.error&&typeof a.error=="object"){const r=a.error;if(typeof r.code=="string")return r.code}}const n=typeof e.message=="string"?e.message.toLowerCase():"";if(n.includes("user rejected")||n.includes("user denied"))return"ACTION_REJECTED";if(n.includes("insufficient funds"))return"INSUFFICIENT_FUNDS";if(n.includes("network")||n.includes("could not detect"))return"NETWORK_ERROR";if(n.includes("timeout")||n.includes("timed out"))return"TIMEOUT";if(n.includes("nonce"))return"NONCE_EXPIRED"}return"UNKNOWN"}function At(t){const e=Nt(t);return Et[e]||_n}function ie({error:t,onRetry:e,onDismiss:n,compact:a=!1,className:r=""}){if(!t)return null;const{title:i,message:p,suggestion:c,isRetryable:d}=At(t);return a?s.jsx("div",{className:`subscrypts-error-display subscrypts-error-display-compact ${r}`,children:s.jsxs("div",{className:"subscrypts-error-display-content",children:[s.jsxs("p",{className:"subscrypts-error-display-message",children:[s.jsxs("strong",{children:[i,":"]})," ",p]}),d&&e&&s.jsx("button",{onClick:e,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-sm",children:"Retry"})]})}):s.jsxs("div",{className:`subscrypts-error-display ${r}`,children:[s.jsx("div",{className:"subscrypts-error-display-icon",children:"✕"}),s.jsx("h3",{className:"subscrypts-error-display-title",children:i}),s.jsx("p",{className:"subscrypts-error-display-message",children:p}),s.jsx("p",{className:"subscrypts-error-display-suggestion",children:c}),s.jsxs("div",{className:"subscrypts-error-display-actions",children:[n&&s.jsx("button",{onClick:n,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-sm",children:"Dismiss"}),d&&e&&s.jsx("button",{onClick:e,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-sm",children:"Try Again"})]})]})}function Pn({paymentMethod:t,txState:e,error:n,subscriptionId:a,txHash:r,onExecute:i,onClose:p,onBack:c}){const d=()=>{switch(e){case"idle":return"Ready to subscribe";case"approving":return`Approving ${t}...`;case"waiting_approval":return"Waiting for wallet confirmation...";case"subscribing":return"Creating subscription...";case"waiting_subscribe":return"Waiting for wallet confirmation...";case"success":return"Subscription created successfully!";case"error":return"Transaction failed";default:return"Processing..."}},l=["approving","waiting_approval","subscribing","waiting_subscribe"].includes(e),y=e==="success",o=e==="error";return s.jsxs("div",{className:"subscrypts-transaction-step",children:[s.jsxs("div",{className:"subscrypts-transaction-status",children:[l&&s.jsx(z,{}),y&&s.jsx("div",{className:"subscrypts-success-icon",children:"✓"}),o&&s.jsx("div",{className:"subscrypts-error-icon",children:"✕"}),s.jsx("p",{className:"subscrypts-transaction-message",children:d()}),n&&s.jsx(ie,{error:n,compact:!0,onRetry:o?i:void 0}),a&&s.jsxs("div",{className:"subscrypts-info-box",children:[s.jsx("p",{className:"subscrypts-info-label",children:"Subscription ID"}),s.jsx("p",{className:"subscrypts-info-value",children:a})]}),r&&s.jsx("a",{href:`https://arbiscan.io/tx/${r}`,target:"_blank",rel:"noopener noreferrer",className:"subscrypts-link subscrypts-arbiscan-link",children:"View on Arbiscan →"})]}),s.jsxs("div",{className:"subscrypts-form-actions",children:[e==="idle"&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:c,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-md",children:"Back"}),s.jsx("button",{onClick:i,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md",children:"Subscribe"})]}),o&&s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:c,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-md",children:"Back"}),s.jsx("button",{onClick:i,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md",children:"Retry"})]}),y&&s.jsx("button",{onClick:p,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md subscrypts-w-full",children:"Close"}),l&&s.jsx("p",{className:"subscrypts-text-sm subscrypts-text-secondary subscrypts-text-center",children:"Please confirm the transaction in your wallet"})]})]})}function $e({planId:t,isOpen:e,onClose:n,referralAddress:a,onSuccess:r,onError:i}){const[p,c]=u.useState("configuration"),[d,l]=u.useState(12),[y,o]=u.useState(!1),[b,g]=u.useState("SUBS"),{subscribe:m,txState:T,error:S,subscriptionId:f,txHash:x}=bt(),E=()=>{c("transaction")},_=async()=>{try{const C=await m({planId:t,cycleLimit:d,autoRenew:y,paymentMethod:b,referralAddress:a});c("success"),r&&r(C)}catch(C){i&&i(C)}},N=()=>{c("configuration"),l(12),o(!1),g("SUBS"),n()};return s.jsxs(de,{isOpen:e,onClose:N,title:`Subscribe to Plan ${t}`,size:"md",children:[p==="configuration"&&s.jsx(In,{cycleLimit:d,onCycleLimitChange:l,autoRenew:y,onAutoRenewChange:o,paymentMethod:b,onPaymentMethodChange:g,onNext:E,onCancel:N}),p==="transaction"&&s.jsx(Pn,{paymentMethod:b,txState:T,error:S,subscriptionId:f,txHash:x,onExecute:_,onClose:N,onBack:()=>c("configuration")}),p==="success"&&s.jsxs("div",{className:"subscrypts-checkout-success",children:[s.jsx("div",{className:"subscrypts-success-icon",children:"✓"}),s.jsx("h3",{className:"subscrypts-success-title",children:"Subscription Created!"}),s.jsx("p",{className:"subscrypts-success-message",children:"Your subscription has been successfully created."}),f&&s.jsxs("p",{className:"subscrypts-success-id",children:["Subscription ID: ",f]}),x&&s.jsx("a",{href:`https://arbiscan.io/tx/${x}`,target:"_blank",rel:"noopener noreferrer",className:"subscrypts-link subscrypts-arbiscan-link",children:"View on Arbiscan →"}),s.jsx("button",{onClick:N,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md",children:"Close"})]})]})}function jn({planId:t,variant:e="primary",size:n="md",children:a,referralAddress:r,onSuccess:i}){const[p,c]=u.useState(!1),{isConnected:d,connect:l}=wt(),y=()=>{!d&&l?l():c(!0)},o=b=>{c(!1),i&&i(b)};return s.jsxs(s.Fragment,{children:[s.jsx("button",{onClick:y,className:`subscrypts-btn subscrypts-btn-${e} subscrypts-btn-${n}`,children:a||"Subscribe"}),s.jsx($e,{planId:t,isOpen:p,onClose:()=>c(!1),referralAddress:r,onSuccess:o})]})}function Rn(t){const n=Number(t)/86400;return n===1?"Daily":n===7?"Weekly":n===14?"Bi-weekly":n>=28&&n<=31?"Monthly":n>=89&&n<=92?"Quarterly":n>=365&&n<=366?"Yearly":`Every ${n} days`}function Qe(t,e){const n=BigInt(10**e),a=t/n,r=t%n;if(r===0n)return a.toString();const i=r.toString().padStart(e,"0").replace(/0+$/,"");return`${a}.${i}`}function It({plan:t,currency:e="SUBS",showFields:n=["description","amount","frequency"],onSubscribe:a,subscribeLabel:r="Subscribe",className:i="",showSubscribeButton:p=!0,featured:c=!1,title:d}){const l=e==="SUBS"?Q.SUBS:Q.USDC,y=Qe(t.subscriptionAmount,l),o=Rn(t.paymentFrequency),b=()=>{a&&a(t.id.toString())},g=["subscrypts-plan-card",c?"subscrypts-plan-card-featured":"",i].filter(Boolean).join(" ");return s.jsxs("div",{className:g,children:[s.jsxs("div",{className:"subscrypts-plan-card-header",children:[d&&s.jsx("h3",{className:"subscrypts-plan-card-title",children:d}),!d&&t.description&&s.jsx("h3",{className:"subscrypts-plan-card-title",children:t.description}),c&&s.jsx("span",{className:"subscrypts-plan-card-badge",children:"Featured"})]}),n.includes("amount")&&s.jsxs("div",{className:"subscrypts-plan-card-price",children:[s.jsx("span",{className:"subscrypts-plan-card-amount",children:y}),s.jsx("span",{className:"subscrypts-plan-card-currency",children:e}),n.includes("frequency")&&s.jsxs("span",{className:"subscrypts-plan-card-frequency",children:["/ ",o]})]}),s.jsxs("div",{className:"subscrypts-plan-card-details",children:[n.includes("description")&&t.description&&!d&&s.jsx("p",{className:"subscrypts-plan-card-description",children:t.description}),n.includes("subscribers")&&s.jsxs("p",{className:"subscrypts-plan-card-subscribers",children:[t.subscriberCount.toString()," subscribers"]}),n.includes("merchant")&&s.jsxs("p",{className:"subscrypts-plan-card-merchant",children:["Merchant: ",t.merchantAddress.slice(0,6),"...",t.merchantAddress.slice(-4)]}),n.includes("referralBonus")&&t.referralBonus>0n&&s.jsxs("p",{className:"subscrypts-plan-card-referral",children:["Referral Bonus: ",Qe(t.referralBonus,l)," ",e]}),n.includes("attributes")&&t.defaultAttributes&&s.jsx("p",{className:"subscrypts-plan-card-attributes",children:t.defaultAttributes})]}),p&&s.jsx("div",{className:"subscrypts-plan-card-actions",children:s.jsx("button",{onClick:b,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-md subscrypts-w-full",disabled:!t.isActive,children:t.isActive?r:"Unavailable"})})]})}function Mn({plans:t,currency:e="SUBS",showFields:n=["description","amount","frequency"],columns:a,onSubscribe:r,subscribeLabel:i="Subscribe",className:p="",onSubscriptionSuccess:c,onSubscriptionError:d,referralAddress:l,loadingComponent:y,errorComponent:o}){const b=t.map(I=>typeof I=="string"?{planId:I}:I),g=b.map(I=>I.planId),{plans:m,isLoading:T,error:S}=Tt(g),[f,x]=u.useState(null),E=a||Math.min(b.length,3),_=I=>{r?r(I):x(I)},N=()=>{x(null)},C=I=>{c&&f&&c(I,f),x(null)},A=I=>{d&&f&&d(I,f)};if(T)return y||s.jsxs("div",{className:"subscrypts-pricing-table-loading",children:[s.jsx(z,{}),s.jsx("p",{children:"Loading plans..."})]});if(S)return o||s.jsx("div",{className:"subscrypts-pricing-table-error",children:s.jsxs("p",{children:["Failed to load plans: ",S.message]})});if(m.length===0)return s.jsx("div",{className:"subscrypts-pricing-table-empty",children:s.jsx("p",{children:"No plans available"})});const k=`subscrypts-pricing-table subscrypts-pricing-table-cols-${E} ${p}`;return s.jsxs(s.Fragment,{children:[s.jsx("div",{className:k,children:m.map((I,q)=>{const D=b[q];return s.jsx(It,{plan:I,currency:e,showFields:n,onSubscribe:_,subscribeLabel:D.subscribeLabel||i,featured:D.featured,title:D.title},I.id.toString())})}),f&&s.jsx($e,{planId:f,isOpen:!0,onClose:N,onSuccess:C,onError:A,referralAddress:l})]})}function kn({currentChainId:t,onSwitch:e,onDismiss:n,className:a=""}){return s.jsxs("div",{className:`subscrypts-network-prompt ${a}`,children:[s.jsx("div",{className:"subscrypts-network-prompt-icon",children:"⚠"}),s.jsxs("div",{className:"subscrypts-network-prompt-content",children:[s.jsx("h3",{className:"subscrypts-network-prompt-title",children:"Wrong Network"}),s.jsxs("p",{className:"subscrypts-network-prompt-message",children:["You are connected to chain ",t||"unknown",". Please switch to ",Ae.name," to continue."]})]}),s.jsxs("div",{className:"subscrypts-network-prompt-actions",children:[n&&s.jsx("button",{onClick:n,className:"subscrypts-btn subscrypts-btn-outline subscrypts-btn-sm",children:"Dismiss"}),s.jsx("button",{onClick:e,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-sm",children:"Switch to Arbitrum"})]})]})}class Dn extends u.Component{constructor(n){super(n);M(this,"resetError",()=>{this.setState({hasError:!1,error:null})});this.state={hasError:!1,error:null}}static getDerivedStateFromError(n){return{hasError:!0,error:n}}componentDidCatch(n,a){this.props.onError&&this.props.onError(n,a)}render(){if(this.state.hasError&&this.state.error){const{fallback:n}=this.props;return typeof n=="function"?n(this.state.error,this.resetError):n||s.jsxs("div",{className:"subscrypts-error-boundary-fallback",children:[s.jsx("div",{className:"subscrypts-error-boundary-icon",children:"⚠"}),s.jsx("h3",{className:"subscrypts-error-boundary-title",children:"Something went wrong"}),s.jsx("p",{className:"subscrypts-error-boundary-message",children:this.state.error.message}),s.jsx("button",{onClick:this.resetError,className:"subscrypts-btn subscrypts-btn-primary subscrypts-btn-sm",children:"Try Again"})]})}return this.props.children}}function Bn({isOpen:t,onClose:e,connectors:n,onConnect:a,className:r=""}){const[i,p]=u.useState(null),[c,d]=u.useState(null),l=n.filter(o=>o.isAvailable()),y=async o=>{p(o),d(null);try{await a(o),e()}catch(b){d(b)}finally{p(null)}};return s.jsx(de,{isOpen:t,onClose:e,title:"Connect Wallet",size:"sm",children:s.jsxs("div",{className:`subscrypts-connect-wallet ${r}`,children:[c&&s.jsx(ie,{error:c,compact:!0,onDismiss:()=>d(null)}),l.length===0?s.jsxs("div",{className:"subscrypts-connect-wallet-empty",children:[s.jsx("p",{children:"No wallets detected."}),s.jsx("p",{children:"Please install MetaMask or another Web3 wallet to continue."})]}):s.jsx("div",{className:"subscrypts-connect-wallet-list",children:l.map(o=>s.jsxs("button",{onClick:()=>y(o.id),disabled:i!==null,className:`subscrypts-connect-wallet-option ${i===o.id?"subscrypts-connect-wallet-option-loading":""}`,children:[o.icon&&s.jsx("img",{src:o.icon,alt:o.name,className:"subscrypts-connect-wallet-icon"}),s.jsx("span",{className:"subscrypts-connect-wallet-name",children:o.name}),i===o.id&&s.jsx("span",{className:"subscrypts-connect-wallet-spinner"})]},o.id))})]})})}function _t({isOpen:t,title:e,message:n,confirmLabel:a="Confirm",cancelLabel:r="Cancel",variant:i="default",onConfirm:p,onCancel:c}){return s.jsx(de,{isOpen:t,onClose:c,title:e,children:s.jsxs("div",{className:"subscrypts-confirm-dialog",children:[s.jsx("p",{className:"subscrypts-confirm-dialog__message",children:n}),s.jsxs("div",{className:"subscrypts-confirm-dialog__actions",children:[s.jsx("button",{className:"subscrypts-btn subscrypts-btn-secondary",onClick:c,children:r}),s.jsx("button",{className:`subscrypts-btn ${i==="danger"?"subscrypts-btn-danger":"subscrypts-btn-primary"}`,onClick:p,children:a})]})]})})}function Pt({isOpen:t,onClose:e,subscriptionId:n,subscription:a,onCancelled:r,onUpdated:i}){const{cancelSubscription:p,toggleAutoRenew:c,updateCycles:d,txState:l,error:y,isProcessing:o}=ft(n),[b,g]=u.useState(!1),m=async()=>{g(!1);try{await p(),r==null||r()}catch{}},T=async()=>{if(a)try{await c(!a.isAutoRenewing),i==null||i()}catch{}},S=async f=>{try{await d(f),i==null||i()}catch{}};return s.jsxs(s.Fragment,{children:[s.jsx(de,{isOpen:t,onClose:e,title:"Manage Subscription",children:s.jsxs("div",{className:"subscrypts-manage-modal",children:[a&&s.jsxs("div",{className:"subscrypts-manage-modal__info",children:[s.jsxs("div",{className:"subscrypts-manage-modal__row",children:[s.jsx("span",{className:"subscrypts-manage-modal__label",children:"Subscription ID"}),s.jsxs("span",{className:"subscrypts-manage-modal__value",children:["#",n]})]}),s.jsxs("div",{className:"subscrypts-manage-modal__row",children:[s.jsx("span",{className:"subscrypts-manage-modal__label",children:"Next Payment"}),s.jsx("span",{className:"subscrypts-manage-modal__value",children:Fe(a.nextPaymentDate)})]}),s.jsxs("div",{className:"subscrypts-manage-modal__row",children:[s.jsx("span",{className:"subscrypts-manage-modal__label",children:"Auto-Renewal"}),s.jsx("span",{className:"subscrypts-manage-modal__value",children:a.isAutoRenewing?"Enabled":"Disabled"})]}),s.jsxs("div",{className:"subscrypts-manage-modal__row",children:[s.jsx("span",{className:"subscrypts-manage-modal__label",children:"Remaining Cycles"}),s.jsx("span",{className:"subscrypts-manage-modal__value",children:a.remainingCycles})]})]}),s.jsx(ie,{error:y,compact:!0}),o&&s.jsxs("div",{className:"subscrypts-manage-modal__processing",children:[s.jsx(z,{}),s.jsx("span",{children:"Processing transaction..."})]}),l==="success"&&s.jsx("div",{className:"subscrypts-manage-modal__success",children:"Subscription updated successfully."}),s.jsxs("div",{className:"subscrypts-manage-modal__actions",children:[s.jsxs("button",{className:"subscrypts-btn subscrypts-btn-secondary",onClick:T,disabled:o||!a,children:[a!=null&&a.isAutoRenewing?"Disable":"Enable"," Auto-Renewal"]}),s.jsx("button",{className:"subscrypts-btn subscrypts-btn-secondary",onClick:()=>S(12),disabled:o,children:"Set 12 Cycles"}),s.jsx("button",{className:"subscrypts-btn subscrypts-btn-danger",onClick:()=>g(!0),disabled:o,children:"Cancel Subscription"})]})]})}),s.jsx(_t,{isOpen:b,title:"Cancel Subscription?",message:"Your subscription will remain active until the end of the current billing period. After that, access will be revoked and auto-renewal will be disabled.",variant:"danger",confirmLabel:"Cancel Subscription",onConfirm:m,onCancel:()=>g(!1)})]})}function jt({subscription:t,showManageButton:e=!0,showFiatPrice:n=!1,onManage:a,onCancelled:r,onUpdated:i,className:p=""}){const[c,d]=u.useState(!1),l=re({subscription:t}),y=()=>{switch(l.state){case"active":return"active";case"expiring-soon":return"expiring";case"expired":return"expired";case"cancelled":return"cancelled";default:return"expired"}},o=()=>{switch(l.state){case"active":return"Active";case"expiring-soon":return"Expiring Soon";case"expired":return"Expired";case"cancelled":return"Cancelled";default:return"Unknown"}},b=()=>{const f=Number(t.paymentFrequency)/86400;return f===1?"Daily":f===7?"Weekly":f===30||f===31?"Monthly":f===365?"Yearly":`Every ${f} days`},g=()=>{a?a(t.id):d(!0)},m=()=>{d(!1),r==null||r()},T=()=>{d(!1),i==null||i()};return s.jsxs(s.Fragment,{children:[s.jsxs("div",{className:`subscrypts-subscription-card ${p}`,children:[s.jsx("div",{className:"subscrypts-subscription-card__header",children:s.jsx("span",{className:`subscrypts-subscription-card__badge subscrypts-subscription-card__badge--${y()}`,children:o()})}),s.jsxs("div",{className:"subscrypts-subscription-card__content",children:[s.jsxs("div",{className:"subscrypts-subscription-card__amount",children:[le(t.subscriptionAmount)," SUBS"]}),s.jsx("div",{className:"subscrypts-subscription-card__frequency",children:b()})]}),s.jsxs("div",{className:"subscrypts-subscription-card__details",children:[s.jsxs("div",{className:"subscrypts-subscription-card__detail-row",children:[s.jsx("span",{className:"subscrypts-subscription-card__detail-label",children:"Next Payment"}),s.jsx("span",{className:"subscrypts-subscription-card__detail-value",children:Fe(t.nextPaymentDate)})]}),s.jsxs("div",{className:"subscrypts-subscription-card__detail-row",children:[s.jsx("span",{className:"subscrypts-subscription-card__detail-label",children:"Auto-Renewal"}),s.jsx("span",{className:"subscrypts-subscription-card__detail-value",children:t.isAutoRenewing?"Enabled":"Disabled"})]}),s.jsxs("div",{className:"subscrypts-subscription-card__detail-row",children:[s.jsx("span",{className:"subscrypts-subscription-card__detail-label",children:"Remaining Cycles"}),s.jsx("span",{className:"subscrypts-subscription-card__detail-value",children:t.remainingCycles===0?"Unlimited":t.remainingCycles})]}),l.daysUntilExpiry!==null&&s.jsxs("div",{className:"subscrypts-subscription-card__detail-row",children:[s.jsx("span",{className:"subscrypts-subscription-card__detail-label",children:"Days Until Expiry"}),s.jsx("span",{className:"subscrypts-subscription-card__detail-value",children:l.daysUntilExpiry})]})]}),e&&s.jsx("div",{className:"subscrypts-subscription-card__actions",children:s.jsx("button",{className:"subscrypts-btn subscrypts-btn-secondary",onClick:g,children:"Manage"})})]}),!a&&s.jsx(Pt,{isOpen:c,onClose:()=>d(!1),subscriptionId:t.id,subscription:t,onCancelled:m,onUpdated:T})]})}function Un({address:t,pageSize:e=10,showFiatPrices:n=!1,emptyComponent:a,loadingComponent:r,className:i="",onSubscriptionCancelled:p,onSubscriptionUpdated:c}){const{subscriptions:d,total:l,page:y,hasMore:o,isLoading:b,error:g,nextPage:m,prevPage:T,refetch:S}=ht(t,e);if(b&&d.length===0)return r?s.jsx(s.Fragment,{children:r}):s.jsxs("div",{className:"subscrypts-subscription-dashboard__loading",children:[s.jsx(z,{}),s.jsx("p",{children:"Loading subscriptions..."})]});if(g)return s.jsx("div",{className:"subscrypts-subscription-dashboard__error",children:s.jsx(ie,{error:g,onRetry:S})});if(d.length===0&&!b)return a?s.jsx(s.Fragment,{children:a}):s.jsxs("div",{className:"subscrypts-subscription-dashboard__empty",children:[s.jsx("p",{className:"subscrypts-subscription-dashboard__empty-text",children:"No subscriptions found"}),s.jsx("p",{className:"subscrypts-subscription-dashboard__empty-subtext",children:"Subscribe to a plan to get started"})]});const f=E=>{S(),p==null||p(E)},x=E=>{S(),c==null||c(E)};return s.jsxs("div",{className:`subscrypts-subscription-dashboard ${i}`,children:[s.jsxs("div",{className:"subscrypts-subscription-dashboard__header",children:[s.jsx("h2",{className:"subscrypts-subscription-dashboard__title",children:"My Subscriptions"}),s.jsxs("p",{className:"subscrypts-subscription-dashboard__subtitle",children:[l," ",l===1?"subscription":"subscriptions"]})]}),s.jsx("div",{className:"subscrypts-subscription-dashboard__grid",children:d.map(E=>s.jsx(jt,{subscription:E,showFiatPrice:n,onCancelled:()=>f(E.id),onUpdated:()=>x(E.id)},E.id))}),l>e&&s.jsxs("div",{className:"subscrypts-subscription-dashboard__pagination",children:[s.jsx("button",{className:"subscrypts-btn subscrypts-btn-secondary subscrypts-subscription-dashboard__pagination-btn",onClick:T,disabled:y===1||b,children:"Previous"}),s.jsxs("span",{className:"subscrypts-subscription-dashboard__pagination-info",children:["Page ",y," of ",Math.ceil(l/e)]}),s.jsx("button",{className:"subscrypts-btn subscrypts-btn-secondary subscrypts-subscription-dashboard__pagination-btn",onClick:m,disabled:!o||b,children:"Next"})]})]})}function Ln({merchantAddress:t,className:e=""}){const{revenue:n,isLoading:a,error:r}=Ct(),{plans:i,isLoading:p,error:c}=Oe(),[d,l]=u.useState(null),{subscribers:y,total:o,activeCount:b,isLoading:g}=vt(d||"0",10),m=a||p,T=r||c;return m?s.jsxs("div",{className:"subscrypts-merchant-dashboard__loading",children:[s.jsx(z,{}),s.jsx("p",{children:"Loading dashboard..."})]}):T?s.jsx("div",{className:"subscrypts-merchant-dashboard__error",children:s.jsx(ie,{error:T})}):!i||i.length===0?s.jsx("div",{className:`subscrypts-merchant-dashboard ${e}`,children:s.jsxs("div",{className:"subscrypts-merchant-dashboard__empty",children:[s.jsx("h2",{className:"subscrypts-merchant-dashboard__empty-title",children:"No Plans Yet"}),s.jsx("p",{className:"subscrypts-merchant-dashboard__empty-text",children:"Create your first subscription plan to start earning revenue"})]})}):s.jsxs("div",{className:`subscrypts-merchant-dashboard ${e}`,children:[s.jsx("div",{className:"subscrypts-merchant-dashboard__header",children:s.jsx("h1",{className:"subscrypts-merchant-dashboard__title",children:"Merchant Dashboard"})}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__revenue-card",children:[s.jsx("h2",{className:"subscrypts-merchant-dashboard__section-title",children:"Revenue Overview"}),n&&s.jsxs("div",{className:"subscrypts-merchant-dashboard__metrics",children:[s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric",children:[s.jsx("div",{className:"subscrypts-merchant-dashboard__metric-label",children:"Monthly Recurring Revenue"}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric-value subscrypts-merchant-dashboard__metric-value--primary",children:[n.mrrFormatted," SUBS"]}),n.mrrUsdEstimate!==null&&s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric-subvalue",children:["≈ ",gt(n.mrrUsdEstimate)]})]}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric",children:[s.jsx("div",{className:"subscrypts-merchant-dashboard__metric-label",children:"Active Subscribers"}),s.jsx("div",{className:"subscrypts-merchant-dashboard__metric-value",children:n.activeSubscribers}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric-subvalue",children:["of ",n.totalSubscribers," total"]})]}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric",children:[s.jsx("div",{className:"subscrypts-merchant-dashboard__metric-label",children:"Active Plans"}),s.jsx("div",{className:"subscrypts-merchant-dashboard__metric-value",children:i.filter(S=>S.isActive).length}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__metric-subvalue",children:["of ",i.length," total"]})]})]})]}),s.jsxs("div",{className:"subscrypts-merchant-dashboard__section",children:[s.jsx("h2",{className:"subscrypts-merchant-dashboard__section-title",children:"Your Plans"}),s.jsx("div",{className:"subscrypts-merchant-dashboard__plans-grid",children:i.map(S=>s.jsxs("div",{className:`subscrypts-merchant-dashboard__plan-card ${d===S.id.toString()?"subscrypts-merchant-dashboard__plan-card--selected":""}`,onClick:()=>l(S.id.toString()),children:[s.jsxs("div",{className:"subscrypts-merchant-dashboard__plan-header",children:[s.jsxs("h3",{className:"subscrypts-merchant-dashboard__plan-name",children:["Plan #",S.id.toString()]}),S.isActive&&s.jsx("span",{className:"subscrypts-merchant-dashboard__plan-badge",children:"Active"})]}),s.jsx("div",{className:"subscrypts-merchant-dashboard__plan-description",children:S.description||"No description"}),s.jsx("div",{className:"subscrypts-merchant-dashboard__plan-stats",children:s.jsxs("div",{className:"subscrypts-merchant-dashboard__plan-stat",children:[s.jsx("span",{className:"subscrypts-merchant-dashboard__plan-stat-label",children:"Subscribers:"}),s.jsx("span",{className:"subscrypts-merchant-dashboard__plan-stat-value",children:S.subscriberCount.toString()})]})})]},S.id.toString()))})]}),d&&s.jsxs("div",{className:"subscrypts-merchant-dashboard__section",children:[s.jsxs("h2",{className:"subscrypts-merchant-dashboard__section-title",children:["Subscribers for Plan #",d]}),g?s.jsxs("div",{className:"subscrypts-merchant-dashboard__subscribers-loading",children:[s.jsx(z,{}),s.jsx("p",{children:"Loading subscribers..."})]}):y.length===0?s.jsx("div",{className:"subscrypts-merchant-dashboard__subscribers-empty",children:s.jsx("p",{children:"No subscribers yet for this plan"})}):s.jsxs(s.Fragment,{children:[s.jsx("div",{className:"subscrypts-merchant-dashboard__subscribers-summary",children:s.jsxs("p",{children:[b," active out of ",o," total subscribers"]})}),s.jsx("div",{className:"subscrypts-merchant-dashboard__subscribers-list",children:y.map(S=>s.jsxs("div",{className:"subscrypts-merchant-dashboard__subscriber-item",children:[s.jsxs("div",{className:"subscrypts-merchant-dashboard__subscriber-address",children:[S.subscriber.slice(0,6),"...",S.subscriber.slice(-4)]}),s.jsx("div",{className:"subscrypts-merchant-dashboard__subscriber-status",children:S.isAutoRenewing?"Auto-renewing":"Manual"}),s.jsx("div",{className:"subscrypts-merchant-dashboard__subscriber-cycles",children:S.remainingCycles===0?"Unlimited":`${S.remainingCycles} cycles`})]},S.id))})]})]})]})}function Fn(t){return t?re({subscription:t}).isActive:!1}function qe(t,e=new Date){return t.nextPaymentDate<=e}function Rt(t,e=new Date){return qe(t,e)&&t.isAutoRenewing&&t.remainingCycles>0}function On(t,e=new Date){const n=re({subscription:t,now:e});return{state:n.state,isPaymentDue:t?qe(t,e):!1,shouldRenew:t?Rt(t,e):!1,daysUntilExpiry:n.daysUntilExpiry,cyclesRemaining:n.remainingCycles}}const Mt="1.4.1";exports.ARBITRUM_ONE=Ae;exports.CheckoutWizard=$e;exports.ConfirmDialog=_t;exports.ConnectWalletModal=Bn;exports.ContractError=te;exports.DEFAULTS=se;exports.DEX_QUOTER_ABI=Re;exports.DEX_QUOTER_ADDRESS=Pe;exports.ERROR_CODE_MAP=Et;exports.ErrorDisplay=ie;exports.InjectedConnector=ct;exports.InsufficientBalanceError=fe;exports.LoadingSpinner=z;exports.ManageSubscriptionModal=Pt;exports.MerchantDashboard=Ln;exports.Modal=de;exports.NetworkError=ue;exports.NetworkSwitchPrompt=kn;exports.PERMIT2_ADDRESS=je;exports.PERMIT2_DOMAIN=pt;exports.PERMIT2_TYPES=yt;exports.PlanCard=It;exports.PricingTable=Mn;exports.SubscriptionCard=jt;exports.SubscriptionDashboard=Un;exports.SubscriptionGuard=An;exports.SubscryptsButton=jn;exports.SubscryptsError=V;exports.SubscryptsErrorBoundary=Dn;exports.SubscryptsProvider=pn;exports.TOKEN_DECIMALS=Q;exports.TransactionError=ne;exports.VERSION=Mt;exports.ValidationError=W;exports.WalletError=B;exports.canAccess=Fn;exports.formatDate=Fe;exports.formatDateTime=bn;exports.formatDuration=fn;exports.formatFiatPrice=gt;exports.formatPercentage=gn;exports.formatSubs=le;exports.formatTokenAmount=Ue;exports.formatUsdc=Le;exports.generatePermit2Signature=mt;exports.getErrorCode=Nt;exports.getErrorMessage=At;exports.getNetworkConfig=he;exports.getSubsTokenAddress=rt;exports.getSubscriptionHealth=On;exports.getSubscryptsContractAddress=xe;exports.getUsdcTokenAddress=it;exports.isArbitrumNetwork=Vt;exports.isPaymentDue=qe;exports.logger=h;exports.parseTokenAmount=mn;exports.resolveSubscriptionStatus=re;exports.shortenAddress=hn;exports.shouldRenew=Rt;exports.useManageSubscription=ft;exports.useMerchantPlans=Oe;exports.useMerchantRevenue=Ct;exports.useMerchantSubscribers=vt;exports.useMySubscriptions=ht;exports.usePlan=wn;exports.usePlanPrice=vn;exports.usePlans=Tt;exports.usePlansByMerchant=xt;exports.useSUBSPrice=St;exports.useSubscribe=bt;exports.useSubscriptionStatus=dt;exports.useSubscrypts=U;exports.useSubscryptsEvents=Cn;exports.useTokenBalance=Ne;exports.useWallet=wt;exports.validateAddress=ot;exports.validateCycleLimit=lt;exports.validatePlanId=ae;exports.validatePositiveBigInt=yn;exports.validatePositiveNumber=ut;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|