@use-glyph/sdk-react 2.1.12 → 2.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,16 @@
1
- import { default as react, ComponentProps, HTMLAttributes, PropsWithChildren } from 'react';
1
+ import { default as react, ComponentProps, ComponentPropsWithoutRef, ComponentRef, HTMLAttributes, PropsWithChildren } from 'react';
2
2
  import { Drawer as DrawerPrimitive } from 'vaul';
3
3
  declare const Drawer: ({ shouldScaleBackground, repositionInputs, ...props }: ComponentProps<typeof DrawerPrimitive.Root>) => import("react/jsx-runtime").JSX.Element;
4
- declare const DrawerTrigger: react.ForwardRefExoticComponent<import('@radix-ui/react-dialog').DialogTriggerProps & react.RefAttributes<HTMLButtonElement>>;
4
+ declare const DrawerTrigger: typeof DrawerPrimitive.Trigger;
5
5
  declare const DrawerPortal: react.FC<PropsWithChildren>;
6
- declare const DrawerClose: react.ForwardRefExoticComponent<import('@radix-ui/react-dialog').DialogCloseProps & react.RefAttributes<HTMLButtonElement>>;
7
- declare const DrawerHandle: react.ForwardRefExoticComponent<Omit<react.DetailedHTMLProps<react.HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
8
- preventCycle?: boolean | undefined;
9
- } & react.RefAttributes<HTMLDivElement>>;
10
- declare const DrawerOverlay: react.ForwardRefExoticComponent<Omit<Omit<import('@radix-ui/react-dialog').DialogOverlayProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>>;
11
- declare const DrawerContent: react.ForwardRefExoticComponent<Omit<Omit<import('@radix-ui/react-dialog').DialogContentProps & react.RefAttributes<HTMLDivElement>, "ref"> & react.RefAttributes<HTMLDivElement>, "ref"> & {
6
+ declare const DrawerClose: typeof DrawerPrimitive.Close;
7
+ declare const DrawerHandle: typeof DrawerPrimitive.Handle;
8
+ declare const DrawerOverlay: react.ForwardRefExoticComponent<ComponentPropsWithoutRef<typeof DrawerPrimitive.Overlay> & react.RefAttributes<ComponentRef<typeof DrawerPrimitive.Overlay>>>;
9
+ declare const DrawerContent: react.ForwardRefExoticComponent<ComponentPropsWithoutRef<typeof DrawerPrimitive.Content> & {
12
10
  childrenWrapperClassName?: string;
13
- } & react.RefAttributes<HTMLDivElement>>;
11
+ } & react.RefAttributes<ComponentRef<typeof DrawerPrimitive.Content>>>;
14
12
  declare const DrawerHeader: ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
15
13
  declare const DrawerFooter: ({ className, ...props }: HTMLAttributes<HTMLDivElement>) => import("react/jsx-runtime").JSX.Element;
16
- declare const DrawerTitle: react.ForwardRefExoticComponent<Omit<import('@radix-ui/react-dialog').DialogTitleProps & react.RefAttributes<HTMLHeadingElement>, "ref"> & react.RefAttributes<HTMLHeadingElement>>;
17
- declare const DrawerDescription: react.ForwardRefExoticComponent<Omit<import('@radix-ui/react-dialog').DialogDescriptionProps & react.RefAttributes<HTMLParagraphElement>, "ref"> & react.RefAttributes<HTMLParagraphElement>>;
14
+ declare const DrawerTitle: react.ForwardRefExoticComponent<ComponentPropsWithoutRef<typeof DrawerPrimitive.Title> & react.RefAttributes<ComponentRef<typeof DrawerPrimitive.Title>>>;
15
+ declare const DrawerDescription: react.ForwardRefExoticComponent<ComponentPropsWithoutRef<typeof DrawerPrimitive.Description> & react.RefAttributes<ComponentRef<typeof DrawerPrimitive.Description>>>;
18
16
  export { Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHandle, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger };
@@ -0,0 +1,11 @@
1
+ import { GlyphApiFetch } from './GlyphContext';
2
+ export type ScopedGlyphData<T> = {
3
+ scope: string;
4
+ value: T;
5
+ };
6
+ export declare class GlyphDataRequestError extends Error {
7
+ readonly status: number;
8
+ constructor(status: number);
9
+ }
10
+ export declare function fetchScopedGlyphData<T>(apiFetch: GlyphApiFetch | null, path: string, signal: AbortSignal, isCurrent: () => boolean, scope: string): Promise<ScopedGlyphData<T>>;
11
+ export declare function shouldRetryGlyphData(error: Error, failureCount: number, limit: number): boolean;
@@ -0,0 +1,11 @@
1
+ import { User } from '@privy-io/react-auth';
2
+ /** Select supported EVM signers, preserving Glyph > other cross-app > native precedence. */
3
+ export declare function selectPrivyWallet(user: User | null, glyphAppId?: string): {
4
+ address: string;
5
+ usesCrossapp: boolean;
6
+ providerAppId: string;
7
+ } | {
8
+ address: string;
9
+ usesCrossapp: boolean;
10
+ providerAppId: null;
11
+ } | null;
@@ -1,2 +1,2 @@
1
1
  import { GlyphWidgetBalances } from '../types';
2
- export declare function useBalancesForChain(chainId?: number | "all"): import('@tanstack/react-query').UseQueryResult<GlyphWidgetBalances | null, Error>;
2
+ export declare function useBalancesForChain(chainId?: number | "all"): import('@tanstack/react-query').UseQueryResult<NoInfer<GlyphWidgetBalances | null>, Error>;
@@ -1,5 +1,5 @@
1
1
  import { SignTypedDataParams, UnsignedTransactionRequest } from '@privy-io/react-auth';
2
- import { GlyphWidgetBalances, GlyphWidgetUser } from '../types';
2
+ import { GlyphAuthError, GlyphWidgetBalances, GlyphWidgetUser } from '../types';
3
3
  export interface GlyphInterface {
4
4
  /**
5
5
  * Check whether the `GlyphContext` is ready to be used. You should wait for this to
@@ -27,6 +27,10 @@ export interface GlyphInterface {
27
27
  transaction: UnsignedTransactionRequest;
28
28
  }) => Promise<string>;
29
29
  login: () => void;
30
+ /** Retry wallet authentication from a fresh click. False means deferred or failed. */
31
+ signIn: () => Promise<boolean>;
32
+ needsSignature: boolean;
33
+ authError: GlyphAuthError | null;
30
34
  logout: () => void;
31
35
  /**
32
36
  * The base URL for the Glyph Widget API (optional, uses default DASHBOARD_BASE_URL from envs if not provided)
@@ -5,7 +5,7 @@ export declare const checkIfGasIsEnough: (gasCurrencyAddress: string, sourceToke
5
5
  export declare const useRelayQuote: (enabled?: boolean) => {
6
6
  appFeesWaived: boolean;
7
7
  operation: string;
8
- data: Execute;
8
+ data: NoInfer<Execute>;
9
9
  error: Error;
10
10
  isError: true;
11
11
  isPending: false;
@@ -28,13 +28,13 @@ export declare const useRelayQuote: (enabled?: boolean) => {
28
28
  isRefetching: boolean;
29
29
  isStale: boolean;
30
30
  isEnabled: boolean;
31
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
31
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
32
32
  fetchStatus: import('@tanstack/react-query').FetchStatus;
33
- promise: Promise<Execute>;
33
+ promise: Promise<NoInfer<Execute>>;
34
34
  } | {
35
35
  appFeesWaived: boolean;
36
36
  operation: string;
37
- data: Execute;
37
+ data: NoInfer<Execute>;
38
38
  error: null;
39
39
  isError: false;
40
40
  isPending: false;
@@ -57,9 +57,9 @@ export declare const useRelayQuote: (enabled?: boolean) => {
57
57
  isRefetching: boolean;
58
58
  isStale: boolean;
59
59
  isEnabled: boolean;
60
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
60
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
61
61
  fetchStatus: import('@tanstack/react-query').FetchStatus;
62
- promise: Promise<Execute>;
62
+ promise: Promise<NoInfer<Execute>>;
63
63
  } | {
64
64
  appFeesWaived: boolean;
65
65
  operation: string;
@@ -86,9 +86,9 @@ export declare const useRelayQuote: (enabled?: boolean) => {
86
86
  isRefetching: boolean;
87
87
  isStale: boolean;
88
88
  isEnabled: boolean;
89
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
89
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
90
90
  fetchStatus: import('@tanstack/react-query').FetchStatus;
91
- promise: Promise<Execute>;
91
+ promise: Promise<NoInfer<Execute>>;
92
92
  } | {
93
93
  appFeesWaived: boolean;
94
94
  operation: string;
@@ -115,9 +115,9 @@ export declare const useRelayQuote: (enabled?: boolean) => {
115
115
  isRefetching: boolean;
116
116
  isStale: boolean;
117
117
  isEnabled: boolean;
118
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
118
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
119
119
  fetchStatus: import('@tanstack/react-query').FetchStatus;
120
- promise: Promise<Execute>;
120
+ promise: Promise<NoInfer<Execute>>;
121
121
  } | {
122
122
  appFeesWaived: boolean;
123
123
  operation: string;
@@ -144,13 +144,13 @@ export declare const useRelayQuote: (enabled?: boolean) => {
144
144
  isRefetching: boolean;
145
145
  isStale: boolean;
146
146
  isEnabled: boolean;
147
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
147
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
148
148
  fetchStatus: import('@tanstack/react-query').FetchStatus;
149
- promise: Promise<Execute>;
149
+ promise: Promise<NoInfer<Execute>>;
150
150
  } | {
151
151
  appFeesWaived: boolean;
152
152
  operation: string;
153
- data: Execute;
153
+ data: NoInfer<Execute>;
154
154
  isError: false;
155
155
  error: null;
156
156
  isPending: false;
@@ -173,7 +173,7 @@ export declare const useRelayQuote: (enabled?: boolean) => {
173
173
  isRefetching: boolean;
174
174
  isStale: boolean;
175
175
  isEnabled: boolean;
176
- refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<Execute, Error>>;
176
+ refetch: (options?: import('@tanstack/react-query').RefetchOptions) => Promise<import('@tanstack/react-query').QueryObserverResult<NoInfer<Execute>, Error>>;
177
177
  fetchStatus: import('@tanstack/react-query').FetchStatus;
178
- promise: Promise<Execute>;
178
+ promise: Promise<NoInfer<Execute>>;
179
179
  };
@@ -7,7 +7,7 @@ export type GetCurrenciesResponse = paths["/currencies/v2"]["post"]["responses"]
7
7
  type QueryType = typeof useQuery<GetCurrenciesResponse, DefaultError, GetCurrenciesResponse, QueryKey>;
8
8
  type QueryOptions = Parameters<QueryType>["0"];
9
9
  export declare const queryTokenList: (options?: GetCurrenciesBody, headers?: Record<string, string>) => Promise<GetCurrenciesResponse>;
10
- export default function (options?: GetCurrenciesBody, queryOptions?: Partial<QueryOptions>): Omit<import('@tanstack/react-query').UseQueryResult<{
10
+ export default function (options?: GetCurrenciesBody, queryOptions?: Partial<QueryOptions>): Omit<import('@tanstack/react-query').UseQueryResult<NoInfer<{
11
11
  chainId?: number;
12
12
  address?: string;
13
13
  symbol?: string;
@@ -19,7 +19,7 @@ export default function (options?: GetCurrenciesBody, queryOptions?: Partial<Que
19
19
  verified?: boolean;
20
20
  isNative?: boolean;
21
21
  };
22
- }[], Error>, "data"> & {
22
+ }[]>, Error>, "data"> & {
23
23
  data?: GetCurrenciesResponse;
24
24
  };
25
25
  export {};
@@ -16,7 +16,7 @@ export { useGlyphTokenGate, useGlyphOwnershipCheck, type GlyphOwnershipCheckRequ
16
16
  export { useGlyphView } from './hooks/useGlyphView';
17
17
  export { glyphConnectorDetails } from './lib/constants';
18
18
  export { GlyphViewType as GlyphView, StrategyType, WalletClientType } from './types';
19
- export type { GlyphWidgetUser } from './types';
19
+ export type { GlyphWidgetUser, GlyphAuthError, GlyphAuthErrorReason } from './types';
20
20
  export { GlyphProvider, GlyphWidget, LoginButton, LogoutButton, SignUpButton, Wallet, ChainSelector };
21
21
  export { NativeGlyphConnectButton } from './components/NativeGlyphConnectButton';
22
22
  export { useNativeGlyphConnection } from './hooks/useNativeGlyphConnection';
@@ -0,0 +1,15 @@
1
+ import { GlyphAuthError, GlyphAuthErrorReason } from '../types';
2
+ export declare class WalletAuthFailure extends Error {
3
+ readonly reason: GlyphAuthErrorReason;
4
+ readonly retryAfterMs?: number | undefined;
5
+ constructor(reason: GlyphAuthErrorReason, message: string, retryAfterMs?: number | undefined);
6
+ }
7
+ export declare function walletAuthOrigin(value: string): string | null;
8
+ export declare function hasWalletActivation(): boolean;
9
+ export declare function signingFailure(error: unknown): WalletAuthFailure;
10
+ export declare function fetchWalletMessage(origin: string, address: string, signal: AbortSignal): Promise<{
11
+ message: string;
12
+ nonce: string;
13
+ }>;
14
+ export declare function verifyWalletSignature(origin: string, address: string, signature: string, nonce: string, signal: AbortSignal): Promise<string>;
15
+ export declare function publicAuthError(error: unknown): GlyphAuthError;
@@ -0,0 +1,36 @@
1
+ import { GlyphApiFetch } from '../context/GlyphContext';
2
+ import { GlyphAuthError } from '../types';
3
+ type Snapshot = {
4
+ generation: number;
5
+ ready: boolean;
6
+ authenticated: boolean;
7
+ needsSignature: boolean;
8
+ authError: GlyphAuthError | null;
9
+ apiFetch: GlyphApiFetch | null;
10
+ };
11
+ type Options = {
12
+ address: string;
13
+ origin: string;
14
+ /** Stable connector family; runtime instance identity is fenced by isCurrent. */
15
+ connector: string;
16
+ popup: boolean;
17
+ isCurrent: () => boolean;
18
+ sign: (message: string) => Promise<string>;
19
+ onLogin: () => void;
20
+ onAuthError: (error: GlyphAuthError) => void;
21
+ storage?: Pick<Storage, "getItem" | "setItem" | "removeItem">;
22
+ activation?: () => boolean;
23
+ };
24
+ /** One mounted wallet/origin/connector capability. No async result can change another generation. */
25
+ export declare function createWalletAuthSession(options: Options): {
26
+ subscribe(listener: () => void): () => void;
27
+ getSnapshot: () => Readonly<Snapshot>;
28
+ current: (generation?: number) => boolean;
29
+ signIn: (generation: number) => Promise<boolean>;
30
+ automatic(): void;
31
+ start(): void;
32
+ stop(forget?: boolean): void;
33
+ logout(): void;
34
+ forget(): void;
35
+ };
36
+ export {};
@@ -29,11 +29,19 @@ export declare const GlyphViewType: {
29
29
  readonly OPEN: "open";
30
30
  };
31
31
  export type GlyphViewType = (typeof GlyphViewType)[keyof typeof GlyphViewType];
32
+ export type GlyphAuthErrorReason = "popup_blocked" | "rejected" | "verify_failed" | "network";
33
+ /** Static, credential-free failure information. No raw provider causes are exposed. */
34
+ export type GlyphAuthError = {
35
+ reason: GlyphAuthErrorReason;
36
+ message: string;
37
+ retryAt?: number;
38
+ };
32
39
  export interface BaseGlyphProviderOptions extends PropsWithChildren {
33
40
  glyphUrl?: string;
34
41
  useStagingTenant?: boolean;
35
42
  onLogin?: () => void;
36
43
  onLogout?: () => void;
44
+ onAuthError?: (error: GlyphAuthError) => void;
37
45
  /**
38
46
  * Optional per-chain RPC override. Maps a chainId to a single RPC URL or an array of URLs
39
47
  * (used as a viem `fallback` transport). Chains without an entry keep the default RPC
@@ -119,7 +127,8 @@ export type GlyphWidgetProps = {
119
127
  };
120
128
  export type GlyphWidgetUser = {
121
129
  hasProfile: boolean;
122
- id: string;
130
+ /** Legacy field; the current widget user API does not return an id. */
131
+ id?: string;
123
132
  name: string;
124
133
  picture: string;
125
134
  evmWallet: string;
package/package.json CHANGED
@@ -1,94 +1,105 @@
1
1
  {
2
- "name": "@use-glyph/sdk-react",
3
- "version": "2.1.12",
4
- "type": "module",
5
- "license": "GLYPH-1.0",
6
- "sideEffects": false,
7
- "main": "dist/glyph-widget.umd.js",
8
- "module": "dist/glyph-widget.es.js",
9
- "types": "dist/types/index.d.ts",
10
- "exports": {
11
- ".": [
12
- {
13
- "types": "./dist/types/index.d.ts",
14
- "require": "./dist/glyph-widget.umd.js",
15
- "import": "./dist/glyph-widget.es.js"
16
- }
2
+ "name": "@use-glyph/sdk-react",
3
+ "version": "2.2.1",
4
+ "type": "module",
5
+ "license": "GLYPH-1.0",
6
+ "sideEffects": false,
7
+ "main": "dist/glyph-widget.umd.js",
8
+ "module": "dist/glyph-widget.es.js",
9
+ "types": "dist/types/index.d.ts",
10
+ "exports": {
11
+ ".": [
12
+ {
13
+ "types": "./dist/types/index.d.ts",
14
+ "require": "./dist/glyph-widget.umd.js",
15
+ "import": "./dist/glyph-widget.es.js"
16
+ }
17
+ ],
18
+ "./*": [
19
+ "./src/*.ts",
20
+ "./src/*.tsx"
21
+ ],
22
+ "./style.css": {
23
+ "import": "./dist/assets/sdk-react.css",
24
+ "require": "./dist/assets/sdk-react.css"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md"
17
30
  ],
18
- "./*": [
19
- "./src/*.ts",
20
- "./src/*.tsx"
21
- ],
22
- "./style.css": {
23
- "import": "./dist/assets/sdk-react.css",
24
- "require": "./dist/assets/sdk-react.css"
31
+ "scripts": {
32
+ "watch:unix": "test -f .env && export $(cat .env | xargs) || true && vite build --watch",
33
+ "watch:windows": "if exist .env (set /p env=<.env && vite build --watch) else (vite build --watch)",
34
+ "watch": "node -e \"process.platform === 'win32' ? require('child_process').execSync('npm run watch:windows', {stdio: 'inherit'}) : require('child_process').execSync('npm run watch:unix', {stdio: 'inherit'})\"",
35
+ "build:unix": "test -f .env && export $(cat .env | xargs) || true && vite build",
36
+ "build:windows": "if exist .env (set /p env=<.env && vite build) else (vite build)",
37
+ "build": "node -e \"process.platform === 'win32' ? require('child_process').execSync('npm run build:windows', {stdio: 'inherit'}) : require('child_process').execSync('npm run build:unix', {stdio: 'inherit'})\"",
38
+ "prebuild": "rimraf dist",
39
+ "lint": "eslint ."
40
+ },
41
+ "devDependencies": {
42
+ "@privy-io/cross-app-connect": "0.7.3",
43
+ "@privy-io/react-auth": "3.48.1",
44
+ "@privy-io/wagmi": "4.0.19",
45
+ "@rainbow-me/rainbowkit": "2.2.11",
46
+ "@tanstack/react-query": "5.101.1",
47
+ "@types/react": "19.1.1",
48
+ "@types/react-dom": "19.1.1",
49
+ "react": "19.1.3",
50
+ "react-dom": "19.1.3",
51
+ "viem": "2.57.5",
52
+ "wagmi": "2.19.5",
53
+ "@eslint/js": "^9.34.0",
54
+ "@types/node": "^24.3.0",
55
+ "@vitejs/plugin-react": "^5.0.2",
56
+ "autoprefixer": "^10.4.21",
57
+ "dotenv": "^17.2.1",
58
+ "eslint": "^9.34.0",
59
+ "eslint-plugin-react-hooks": "^5.2.0",
60
+ "eslint-plugin-react-refresh": "^0.4.20",
61
+ "globals": "^16.3.0",
62
+ "path": "^0.12.7",
63
+ "postcss": "^8.5.6",
64
+ "prettier": "^3.6.2",
65
+ "rimraf": "^6.0.1",
66
+ "tailwind-merge": "^2.6.0",
67
+ "tailwind-scrollbar": "3.1.0",
68
+ "tailwindcss": "^3.4.17",
69
+ "tailwindcss-animate": "^1.0.7",
70
+ "typescript": "~5.9.3",
71
+ "typescript-eslint": "^8.41.0",
72
+ "vite": "7.3.7",
73
+ "vite-plugin-dts": "^4.5.4"
74
+ },
75
+ "peerDependencies": {
76
+ "@privy-io/cross-app-connect": ">=0.2.1 <0.8",
77
+ "@privy-io/react-auth": ">=3.14.1 <3.49.0",
78
+ "@privy-io/wagmi": ">=4.0.19 <5",
79
+ "@rainbow-me/rainbowkit": ">=2.2.11 <3",
80
+ "@tanstack/react-query": ">=5.76.0 <6",
81
+ "@types/react": "^18.x || ^19.x",
82
+ "@types/react-dom": "^18.x || ^19.x",
83
+ "react": "^18.x || ^19.x",
84
+ "react-dom": "^18.x || ^19.x",
85
+ "viem": ">=2.57.5 <3",
86
+ "wagmi": ">=2.19.5 <3"
87
+ },
88
+ "dependencies": {
89
+ "@radix-ui/react-accordion": "^1.2.12",
90
+ "@radix-ui/react-dialog": "^1.1.15",
91
+ "@radix-ui/react-popover": "^1.1.15",
92
+ "@radix-ui/react-slot": "^1.2.3",
93
+ "@radix-ui/react-tooltip": "1.2.8",
94
+ "@relayprotocol/relay-sdk": "3.2.0",
95
+ "@types/throttle-debounce": "5.0.2",
96
+ "class-variance-authority": "^0.7.1",
97
+ "clsx": "^2.1.1",
98
+ "lucide-react": "^0.542.0",
99
+ "qrcode.react": "^4.2.0",
100
+ "sonner": "2.0.7",
101
+ "throttle-debounce": "5.0.2",
102
+ "truncate-eth-address": "1.0.2",
103
+ "vaul": "1.1.2"
25
104
  }
26
- },
27
- "files": [
28
- "dist",
29
- "README.md"
30
- ],
31
- "devDependencies": {
32
- "@eslint/js": "^9.34.0",
33
- "@types/node": "^24.3.0",
34
- "@vitejs/plugin-react": "^5.0.2",
35
- "autoprefixer": "^10.4.21",
36
- "dotenv": "^17.2.1",
37
- "eslint": "^9.34.0",
38
- "eslint-plugin-react-hooks": "^5.2.0",
39
- "eslint-plugin-react-refresh": "^0.4.20",
40
- "globals": "^16.3.0",
41
- "path": "^0.12.7",
42
- "postcss": "^8.5.6",
43
- "prettier": "^3.6.2",
44
- "rimraf": "^6.0.1",
45
- "tailwind-merge": "^2.6.0",
46
- "tailwind-scrollbar": "3.1.0",
47
- "tailwindcss": "^3.4.17",
48
- "tailwindcss-animate": "^1.0.7",
49
- "typescript": "~5.9.3",
50
- "typescript-eslint": "^8.41.0",
51
- "vite": "7.1.3",
52
- "vite-plugin-dts": "^4.5.4"
53
- },
54
- "peerDependencies": {
55
- "@privy-io/cross-app-connect": ">=0.2.1",
56
- "@privy-io/react-auth": ">=3.9.0",
57
- "@privy-io/wagmi": ">=2.0.0",
58
- "@rainbow-me/rainbowkit": ">=2.2.8",
59
- "@tanstack/react-query": ">=5.76.0",
60
- "@types/react": "^18.x || ^19.x",
61
- "@types/react-dom": "^18.x || ^19.x",
62
- "react": "^18.x || ^19.x",
63
- "react-dom": "^18.x || ^19.x",
64
- "viem": ">=2.30.0",
65
- "wagmi": ">=2.10.0"
66
- },
67
- "dependencies": {
68
- "@radix-ui/react-accordion": "^1.2.12",
69
- "@radix-ui/react-dialog": "^1.1.15",
70
- "@radix-ui/react-popover": "^1.1.15",
71
- "@radix-ui/react-slot": "^1.2.3",
72
- "@radix-ui/react-tooltip": "1.2.8",
73
- "@relayprotocol/relay-sdk": "3.1.0",
74
- "@types/throttle-debounce": "5.0.2",
75
- "class-variance-authority": "^0.7.1",
76
- "clsx": "^2.1.1",
77
- "lucide-react": "^0.542.0",
78
- "qrcode.react": "^4.2.0",
79
- "sonner": "2.0.7",
80
- "throttle-debounce": "5.0.2",
81
- "truncate-eth-address": "1.0.2",
82
- "vaul": "1.1.2"
83
- },
84
- "scripts": {
85
- "watch:unix": "test -f .env && export $(cat .env | xargs) || true && vite build --watch",
86
- "watch:windows": "if exist .env (set /p env=<.env && vite build --watch) else (vite build --watch)",
87
- "watch": "node -e \"process.platform === 'win32' ? require('child_process').execSync('npm run watch:windows', {stdio: 'inherit'}) : require('child_process').execSync('npm run watch:unix', {stdio: 'inherit'})\"",
88
- "build:unix": "test -f .env && export $(cat .env | xargs) || true && vite build",
89
- "build:windows": "if exist .env (set /p env=<.env && vite build) else (vite build)",
90
- "build": "node -e \"process.platform === 'win32' ? require('child_process').execSync('npm run build:windows', {stdio: 'inherit'}) : require('child_process').execSync('npm run build:unix', {stdio: 'inherit'})\"",
91
- "prebuild": "rimraf dist",
92
- "lint": "eslint ."
93
- }
94
- }
105
+ }