├── .gitignore
├── public
├── park-1.png
├── park-2.png
├── park-3.png
└── park-4.png
├── next-env.d.ts
├── prettier.config.js
├── app
├── config.ts
├── layout.tsx
├── api
│ ├── tx-success
│ │ └── route.ts
│ ├── tx
│ │ └── route.ts
│ └── frame
│ │ └── route.ts
├── page.tsx
└── _contracts
│ └── BuyMeACoffeeABI.ts
├── tsconfig.json
├── package.json
├── LICENSE
├── README.md
└── yarn.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_STORE
3 | .next/
--------------------------------------------------------------------------------
/public/park-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kamigordon/a-frame-in-100-lines/HEAD/public/park-1.png
--------------------------------------------------------------------------------
/public/park-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kamigordon/a-frame-in-100-lines/HEAD/public/park-2.png
--------------------------------------------------------------------------------
/public/park-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kamigordon/a-frame-in-100-lines/HEAD/public/park-3.png
--------------------------------------------------------------------------------
/public/park-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kamigordon/a-frame-in-100-lines/HEAD/public/park-4.png
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/prettier.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | arrowParens: 'always',
3 | bracketSameLine: false,
4 | jsxSingleQuote: false,
5 | plugins: [],
6 | printWidth: 100,
7 | semi: true,
8 | singleQuote: true,
9 | tabWidth: 2,
10 | trailingComma: 'all',
11 | useTabs: false,
12 | };
13 |
--------------------------------------------------------------------------------
/app/config.ts:
--------------------------------------------------------------------------------
1 | // use NODE_ENV to not have to change config based on where it's deployed
2 | export const NEXT_PUBLIC_URL =
3 | process.env.NODE_ENV == 'development' ? 'http://localhost:3000' : 'https://zizzamia.xyz';
4 | export const BUY_MY_COFFEE_CONTRACT_ADDR = '0xcD3D5E4E498BAb2e0832257569c3Fd4AE439dD6f';
5 |
--------------------------------------------------------------------------------
/app/layout.tsx:
--------------------------------------------------------------------------------
1 | export const viewport = {
2 | width: 'device-width',
3 | initialScale: 1.0,
4 | };
5 |
6 | export default function RootLayout({ children }: { children: React.ReactNode }) {
7 | return (
8 |
9 |
{children}
10 |
11 | );
12 | }
13 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es2020",
4 | "lib": ["dom", "dom.iterable", "esnext"],
5 | "allowJs": true,
6 | "skipLibCheck": true,
7 | "strict": true,
8 | "noEmit": true,
9 | "esModuleInterop": true,
10 | "module": "NodeNext",
11 | "moduleResolution": "NodeNext",
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "jsx": "preserve",
15 | "incremental": true,
16 | "plugins": [
17 | {
18 | "name": "next",
19 | },
20 | ],
21 | },
22 | "include": ["custom.d.ts", "next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
23 | "exclude": ["contracts", "node_modules"],
24 | }
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "a-frame-in-100-lines",
3 | "version": "0.13.0",
4 | "scripts": {
5 | "build": "rm -rf .next && next build",
6 | "dev": "next dev",
7 | "format": "prettier --log-level warn --write .",
8 | "start": "next start",
9 | "test": "echo \"Error: no test specified\" && exit 1"
10 | },
11 | "keywords": [],
12 | "author": "https://twitter.com/Zizzamia",
13 | "license": "MIT",
14 | "dependencies": {
15 | "@coinbase/onchainkit": "0.14.1",
16 | "next": "13.5.6",
17 | "react": "^18.2.0",
18 | "react-dom": "^18.2.0",
19 | "viem": "^2.7.1"
20 | },
21 | "devDependencies": {
22 | "@types/node": "^20.11.8",
23 | "@types/react": "18.2.48",
24 | "prettier": "^3.2.4",
25 | "typescript": "^5.3.3"
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/api/tx-success/route.ts:
--------------------------------------------------------------------------------
1 | import { FrameRequest, getFrameMessage, getFrameHtmlResponse } from '@coinbase/onchainkit/frame';
2 | import { NextRequest, NextResponse } from 'next/server';
3 | import { NEXT_PUBLIC_URL } from '../../config';
4 |
5 | async function getResponse(req: NextRequest): Promise {
6 | const body: FrameRequest = await req.json();
7 | const { isValid } = await getFrameMessage(body);
8 |
9 | if (!isValid) {
10 | return new NextResponse('Message not valid', { status: 500 });
11 | }
12 |
13 | return new NextResponse(
14 | getFrameHtmlResponse({
15 | buttons: [
16 | {
17 | label: `Tx: ${body?.untrustedData?.transactionId || '--'}`,
18 | },
19 | ],
20 | image: {
21 | src: `${NEXT_PUBLIC_URL}/park-4.png`,
22 | },
23 | }),
24 | );
25 | }
26 |
27 | export async function POST(req: NextRequest): Promise {
28 | return getResponse(req);
29 | }
30 |
31 | export const dynamic = 'force-dynamic';
32 |
--------------------------------------------------------------------------------
/app/page.tsx:
--------------------------------------------------------------------------------
1 | import { getFrameMetadata } from '@coinbase/onchainkit/frame';
2 | import type { Metadata } from 'next';
3 | import { NEXT_PUBLIC_URL } from './config';
4 |
5 | const frameMetadata = getFrameMetadata({
6 | buttons: [
7 | {
8 | label: 'Story time',
9 | },
10 | {
11 | action: 'tx',
12 | label: 'Send Base Sepolia',
13 | target: `${NEXT_PUBLIC_URL}/api/tx`,
14 | postUrl: `${NEXT_PUBLIC_URL}/api/tx-success`,
15 | },
16 | ],
17 | image: {
18 | src: `${NEXT_PUBLIC_URL}/park-3.png`,
19 | aspectRatio: '1:1',
20 | },
21 | input: {
22 | text: 'Tell me a story',
23 | },
24 | postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
25 | });
26 |
27 | export const metadata: Metadata = {
28 | title: 'zizzamia.xyz',
29 | description: 'LFG',
30 | openGraph: {
31 | title: 'zizzamia.xyz',
32 | description: 'LFG',
33 | images: [`${NEXT_PUBLIC_URL}/park-1.png`],
34 | },
35 | other: {
36 | ...frameMetadata,
37 | },
38 | };
39 |
40 | export default function Page() {
41 | return (
42 | <>
43 | zizzamia.xyz
44 | >
45 | );
46 | }
47 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Leonardo Zizzamia
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/app/api/tx/route.ts:
--------------------------------------------------------------------------------
1 | import { FrameRequest, getFrameMessage } from '@coinbase/onchainkit/frame';
2 | import { NextRequest, NextResponse } from 'next/server';
3 | import { encodeFunctionData, parseEther } from 'viem';
4 | import { baseSepolia } from 'viem/chains';
5 | import BuyMeACoffeeABI from '../../_contracts/BuyMeACoffeeABI';
6 | import { BUY_MY_COFFEE_CONTRACT_ADDR } from '../../config';
7 | import type { FrameTransactionResponse } from '@coinbase/onchainkit/frame';
8 |
9 | async function getResponse(req: NextRequest): Promise {
10 | const body: FrameRequest = await req.json();
11 | // Remember to replace 'NEYNAR_ONCHAIN_KIT' with your own Neynar API key
12 | const { isValid } = await getFrameMessage(body, { neynarApiKey: 'NEYNAR_ONCHAIN_KIT' });
13 |
14 | if (!isValid) {
15 | return new NextResponse('Message not valid', { status: 500 });
16 | }
17 |
18 | const data = encodeFunctionData({
19 | abi: BuyMeACoffeeABI,
20 | functionName: 'buyCoffee',
21 | args: [parseEther('1'), 'Coffee all day!'],
22 | });
23 |
24 | const txData: FrameTransactionResponse = {
25 | chainId: `eip155:${baseSepolia.id}`,
26 | method: 'eth_sendTransaction',
27 | params: {
28 | abi: [],
29 | data,
30 | to: BUY_MY_COFFEE_CONTRACT_ADDR,
31 | value: parseEther('0.00004').toString(), // 0.00004 ETH
32 | },
33 | };
34 | return NextResponse.json(txData);
35 | }
36 |
37 | export async function POST(req: NextRequest): Promise {
38 | return getResponse(req);
39 | }
40 |
41 | export const dynamic = 'force-dynamic';
42 |
--------------------------------------------------------------------------------
/app/api/frame/route.ts:
--------------------------------------------------------------------------------
1 | import { FrameRequest, getFrameMessage, getFrameHtmlResponse } from '@coinbase/onchainkit/frame';
2 | import { NextRequest, NextResponse } from 'next/server';
3 | import { NEXT_PUBLIC_URL } from '../../config';
4 |
5 | async function getResponse(req: NextRequest): Promise {
6 | const body: FrameRequest = await req.json();
7 | const { isValid, message } = await getFrameMessage(body, { neynarApiKey: 'NEYNAR_ONCHAIN_KIT' });
8 |
9 | if (!isValid) {
10 | return new NextResponse('Message not valid', { status: 500 });
11 | }
12 |
13 | const text = message.input || '';
14 | let state = {
15 | page: 0,
16 | };
17 | try {
18 | state = JSON.parse(decodeURIComponent(message.state?.serialized));
19 | } catch (e) {
20 | console.error(e);
21 | }
22 |
23 | /**
24 | * Use this code to redirect to a different page
25 | */
26 | if (message?.button === 3) {
27 | return NextResponse.redirect(
28 | 'https://www.google.com/search?q=cute+dog+pictures&tbm=isch&source=lnms',
29 | { status: 302 },
30 | );
31 | }
32 |
33 | return new NextResponse(
34 | getFrameHtmlResponse({
35 | buttons: [
36 | {
37 | label: `State: ${state?.page || 0}`,
38 | },
39 | {
40 | action: 'link',
41 | label: 'OnchainKit',
42 | target: 'https://onchainkit.xyz',
43 | },
44 | {
45 | action: 'post_redirect',
46 | label: 'Dog pictures',
47 | },
48 | ],
49 | image: {
50 | src: `${NEXT_PUBLIC_URL}/park-1.png`,
51 | },
52 | postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
53 | state: {
54 | page: state?.page + 1,
55 | time: new Date().toISOString(),
56 | },
57 | }),
58 | );
59 | }
60 |
61 | export async function POST(req: NextRequest): Promise {
62 | return getResponse(req);
63 | }
64 |
65 | export const dynamic = 'force-dynamic';
66 |
--------------------------------------------------------------------------------
/app/_contracts/BuyMeACoffeeABI.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * This ABI is trimmed down to just the functions we expect to call for the
3 | * sake of minimizing bytes downloaded.
4 | */
5 | const abi = [
6 | { type: 'constructor', inputs: [], stateMutability: 'nonpayable' },
7 | { type: 'receive', stateMutability: 'payable' },
8 | {
9 | type: 'function',
10 | name: 'buyCoffee',
11 | inputs: [
12 | { name: 'numCoffees', type: 'uint256', internalType: 'uint256' },
13 | { name: 'message', type: 'string', internalType: 'string' },
14 | ],
15 | outputs: [],
16 | stateMutability: 'payable',
17 | },
18 | {
19 | type: 'function',
20 | name: 'getMemos',
21 | inputs: [
22 | { name: 'index', type: 'uint256', internalType: 'uint256' },
23 | { name: 'size', type: 'uint256', internalType: 'uint256' },
24 | ],
25 | outputs: [
26 | {
27 | name: '',
28 | type: 'tuple[]',
29 | internalType: 'struct Memo[]',
30 | components: [
31 | { name: 'numCoffees', type: 'uint256', internalType: 'uint256' },
32 | { name: 'message', type: 'string', internalType: 'string' },
33 | { name: 'time', type: 'uint256', internalType: 'uint256' },
34 | { name: 'userAddress', type: 'address', internalType: 'address' },
35 | ],
36 | },
37 | ],
38 | stateMutability: 'view',
39 | },
40 | {
41 | type: 'function',
42 | name: 'memos',
43 | inputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],
44 | outputs: [
45 | { name: 'numCoffees', type: 'uint256', internalType: 'uint256' },
46 | { name: 'message', type: 'string', internalType: 'string' },
47 | { name: 'time', type: 'uint256', internalType: 'uint256' },
48 | { name: 'userAddress', type: 'address', internalType: 'address' },
49 | ],
50 | stateMutability: 'view',
51 | },
52 | {
53 | type: 'function',
54 | name: 'modifyMemoMessage',
55 | inputs: [
56 | { name: 'index', type: 'uint256', internalType: 'uint256' },
57 | { name: 'message', type: 'string', internalType: 'string' },
58 | ],
59 | outputs: [],
60 | stateMutability: 'nonpayable',
61 | },
62 | {
63 | type: 'function',
64 | name: 'owner',
65 | inputs: [],
66 | outputs: [{ name: '', type: 'address', internalType: 'address payable' }],
67 | stateMutability: 'view',
68 | },
69 | {
70 | type: 'function',
71 | name: 'price',
72 | inputs: [],
73 | outputs: [{ name: '', type: 'uint256', internalType: 'uint256' }],
74 | stateMutability: 'view',
75 | },
76 | {
77 | type: 'function',
78 | name: 'removeMemo',
79 | inputs: [{ name: 'index', type: 'uint256', internalType: 'uint256' }],
80 | outputs: [],
81 | stateMutability: 'nonpayable',
82 | },
83 | {
84 | type: 'function',
85 | name: 'setPriceForCoffee',
86 | inputs: [{ name: '_price', type: 'uint256', internalType: 'uint256' }],
87 | outputs: [],
88 | stateMutability: 'nonpayable',
89 | },
90 | {
91 | type: 'function',
92 | name: 'withdrawTips',
93 | inputs: [],
94 | outputs: [],
95 | stateMutability: 'nonpayable',
96 | },
97 | {
98 | type: 'event',
99 | name: 'BuyMeACoffeeEvent',
100 | inputs: [
101 | { name: 'buyer', type: 'address', indexed: true, internalType: 'address' },
102 | { name: 'price', type: 'uint256', indexed: false, internalType: 'uint256' },
103 | ],
104 | anonymous: false,
105 | },
106 | {
107 | type: 'event',
108 | name: 'NewMemo',
109 | inputs: [
110 | { name: 'userAddress', type: 'address', indexed: true, internalType: 'address' },
111 | { name: 'time', type: 'uint256', indexed: false, internalType: 'uint256' },
112 | { name: 'numCoffees', type: 'uint256', indexed: false, internalType: 'uint256' },
113 | { name: 'message', type: 'string', indexed: false, internalType: 'string' },
114 | ],
115 | anonymous: false,
116 | },
117 | { type: 'error', name: 'InsufficientFunds', inputs: [] },
118 | {
119 | type: 'error',
120 | name: 'InvalidArguments',
121 | inputs: [{ name: 'message', type: 'string', internalType: 'string' }],
122 | },
123 | { type: 'error', name: 'OnlyOwner', inputs: [] },
124 | ] as const;
125 |
126 | export default abi;
127 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | # A Frame in 100 lines (or less)
9 |
10 | Farcaster Frames in less than 100 lines, and ready to be deployed to Vercel.
11 |
12 | To test a **deployed** Frame, use: https://warpcast.com/~/developers/frames.
13 |
14 | To test a **localhost** Frame, use: [Framegear](https://onchainkit.xyz/frame/framegear).
15 | A simple tool that allows you to run and test your frames locally:
16 |
17 | - without publishing
18 | - without casting
19 | - without spending warps
20 |
21 | And let us know what you build by either mentioning @zizzamia on [Warpcast](https://warpcast.com/zizzamia) or [X](https://twitter.com/Zizzamia).
22 |
23 |
24 |
25 | Have fun! ⛵️
26 |
27 |
28 |
29 | ## App Routing files
30 |
31 | - app/
32 | - [config.ts](https://github.com/Zizzamia/a-frame-in-100-lines?tab=readme-ov-file#appconfigts)
33 | - [layout.tsx](https://github.com/Zizzamia/a-frame-in-100-lines?tab=readme-ov-file#applayouttsx)
34 | - [page.tsx](https://github.com/Zizzamia/a-frame-in-100-lines?tab=readme-ov-file#apppagetsx)
35 | - api/
36 | - frame/
37 | - [route.ts](https://github.com/Zizzamia/a-frame-in-100-lines?tab=readme-ov-file#appapiframeroutets)
38 |
39 |
40 |
41 | ### `app/page.tsx`
42 |
43 | ```tsx
44 | import { getFrameMetadata } from '@coinbase/onchainkit/frame';
45 | import type { Metadata } from 'next';
46 | import { NEXT_PUBLIC_URL } from './config';
47 |
48 | const frameMetadata = getFrameMetadata({
49 | buttons: [
50 | {
51 | label: 'Story time!',
52 | },
53 | {
54 | action: 'link',
55 | label: 'Link to Google',
56 | target: 'https://www.google.com',
57 | },
58 | {
59 | label: 'Redirect to pictures',
60 | action: 'post_redirect',
61 | },
62 | ],
63 | image: {
64 | src: `${NEXT_PUBLIC_URL}/park-3.png`,
65 | aspectRatio: '1:1',
66 | },
67 | input: {
68 | text: 'Tell me a boat story',
69 | },
70 | postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
71 | });
72 |
73 | export const metadata: Metadata = {
74 | title: 'zizzamia.xyz',
75 | description: 'LFG',
76 | openGraph: {
77 | title: 'zizzamia.xyz',
78 | description: 'LFG',
79 | images: [`${NEXT_PUBLIC_URL}/park-1.png`],
80 | },
81 | other: {
82 | ...frameMetadata,
83 | },
84 | };
85 |
86 | export default function Page() {
87 | return (
88 | <>
89 | zizzamia.xyz
90 | >
91 | );
92 | }
93 | ```
94 |
95 | ### `app/layout.tsx`
96 |
97 | ```tsx
98 | export const viewport = {
99 | width: 'device-width',
100 | initialScale: 1.0,
101 | };
102 |
103 | export default function RootLayout({ children }: { children: React.ReactNode }) {
104 | return (
105 |
106 | {children}
107 |
108 | );
109 | }
110 | ```
111 |
112 | ### `app/config.ts`
113 |
114 | ```ts
115 | export const NEXT_PUBLIC_URL = 'https://zizzamia.xyz';
116 | ```
117 |
118 | ### `app/api/frame/route.ts`
119 |
120 | ```ts
121 | import { FrameRequest, getFrameMessage, getFrameHtmlResponse } from '@coinbase/onchainkit/frame';
122 | import { NextRequest, NextResponse } from 'next/server';
123 | import { NEXT_PUBLIC_URL } from '../../config';
124 |
125 | async function getResponse(req: NextRequest): Promise {
126 | let accountAddress: string | undefined = '';
127 | let text: string | undefined = '';
128 |
129 | const body: FrameRequest = await req.json();
130 | const { isValid, message } = await getFrameMessage(body, { neynarApiKey: 'NEYNAR_ONCHAIN_KIT' });
131 |
132 | if (isValid) {
133 | accountAddress = message.interactor.verified_accounts[0];
134 | }
135 |
136 | if (message?.input) {
137 | text = message.input;
138 | }
139 |
140 | if (message?.button === 3) {
141 | return NextResponse.redirect(
142 | 'https://www.google.com/search?q=cute+dog+pictures&tbm=isch&source=lnms',
143 | { status: 302 },
144 | );
145 | }
146 |
147 | return new NextResponse(
148 | getFrameHtmlResponse({
149 | buttons: [
150 | {
151 | label: `🌲 ${text} 🌲`,
152 | },
153 | ],
154 | image: {
155 | src: `${NEXT_PUBLIC_URL}/park-1.png`,
156 | },
157 | postUrl: `${NEXT_PUBLIC_URL}/api/frame`,
158 | }),
159 | );
160 | }
161 |
162 | export async function POST(req: NextRequest): Promise {
163 | return getResponse(req);
164 | }
165 |
166 | export const dynamic = 'force-dynamic';
167 | ```
168 |
169 |
170 |
171 | ## Resources
172 |
173 | - [Official Farcaster Frames documentation](https://docs.farcaster.xyz/learn/what-is-farcaster/frames)
174 | - [Official Farcaster Frame specification](https://docs.farcaster.xyz/reference/frames/spec)
175 | - [OnchainKit documentation](https://onchainkit.xyz)
176 |
177 |
178 |
179 | ## Community ☁️ 🌁 ☁️
180 |
181 | Check out the following places for more OnchainKit-related content:
182 |
183 | - Follow @zizzamia ([X](https://twitter.com/zizzamia), [Farcaster](https://warpcast.com/zizzamia)) for project updates
184 | - Join the discussions on our [OnchainKit warpcast channel](https://warpcast.com/~/channel/onchainkit)
185 |
186 | ## Authors
187 |
188 | - [@zizzamia](https://github.com/zizzamia.png) ([X](https://twitter.com/Zizzamia))
189 | - [@cnasc](https://github.com/cnasc.png) ([warpcast](https://warpcast.com/cnasc))
190 |
191 | ## License
192 |
193 | This project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details
194 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@adraffy/ens-normalize@1.10.0":
6 | version "1.10.0"
7 | resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.0.tgz#d2a39395c587e092d77cbbc80acf956a54f38bf7"
8 | integrity sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==
9 |
10 | "@coinbase/onchainkit@0.14.1":
11 | version "0.14.1"
12 | resolved "https://registry.yarnpkg.com/@coinbase/onchainkit/-/onchainkit-0.14.1.tgz#8a05ec3b5f08b62b0328711ebab66e062bcbb5de"
13 | integrity sha512-yVKmhoICJaGCexVu9rFQcz2HPPh6g848kLu4imglTX4879CpEcC6LpwJ7BBdbsVcYML7F04vpvBlzBzvX62iig==
14 |
15 | "@next/env@13.5.6":
16 | version "13.5.6"
17 | resolved "https://registry.yarnpkg.com/@next/env/-/env-13.5.6.tgz#c1148e2e1aa166614f05161ee8f77ded467062bc"
18 | integrity sha512-Yac/bV5sBGkkEXmAX5FWPS9Mmo2rthrOPRQQNfycJPkjUAUclomCPH7QFVCDQ4Mp2k2K1SSM6m0zrxYrOwtFQw==
19 |
20 | "@next/swc-darwin-arm64@13.5.6":
21 | version "13.5.6"
22 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.5.6.tgz#b15d139d8971360fca29be3bdd703c108c9a45fb"
23 | integrity sha512-5nvXMzKtZfvcu4BhtV0KH1oGv4XEW+B+jOfmBdpFI3C7FrB/MfujRpWYSBBO64+qbW8pkZiSyQv9eiwnn5VIQA==
24 |
25 | "@next/swc-darwin-x64@13.5.6":
26 | version "13.5.6"
27 | resolved "https://registry.yarnpkg.com/@next/swc-darwin-x64/-/swc-darwin-x64-13.5.6.tgz#9c72ee31cc356cb65ce6860b658d807ff39f1578"
28 | integrity sha512-6cgBfxg98oOCSr4BckWjLLgiVwlL3vlLj8hXg2b+nDgm4bC/qVXXLfpLB9FHdoDu4057hzywbxKvmYGmi7yUzA==
29 |
30 | "@next/swc-linux-arm64-gnu@13.5.6":
31 | version "13.5.6"
32 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.5.6.tgz#59f5f66155e85380ffa26ee3d95b687a770cfeab"
33 | integrity sha512-txagBbj1e1w47YQjcKgSU4rRVQ7uF29YpnlHV5xuVUsgCUf2FmyfJ3CPjZUvpIeXCJAoMCFAoGnbtX86BK7+sg==
34 |
35 | "@next/swc-linux-arm64-musl@13.5.6":
36 | version "13.5.6"
37 | resolved "https://registry.yarnpkg.com/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.5.6.tgz#f012518228017052736a87d69bae73e587c76ce2"
38 | integrity sha512-cGd+H8amifT86ZldVJtAKDxUqeFyLWW+v2NlBULnLAdWsiuuN8TuhVBt8ZNpCqcAuoruoSWynvMWixTFcroq+Q==
39 |
40 | "@next/swc-linux-x64-gnu@13.5.6":
41 | version "13.5.6"
42 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.5.6.tgz#339b867a7e9e7ee727a700b496b269033d820df4"
43 | integrity sha512-Mc2b4xiIWKXIhBy2NBTwOxGD3nHLmq4keFk+d4/WL5fMsB8XdJRdtUlL87SqVCTSaf1BRuQQf1HvXZcy+rq3Nw==
44 |
45 | "@next/swc-linux-x64-musl@13.5.6":
46 | version "13.5.6"
47 | resolved "https://registry.yarnpkg.com/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.5.6.tgz#ae0ae84d058df758675830bcf70ca1846f1028f2"
48 | integrity sha512-CFHvP9Qz98NruJiUnCe61O6GveKKHpJLloXbDSWRhqhkJdZD2zU5hG+gtVJR//tyW897izuHpM6Gtf6+sNgJPQ==
49 |
50 | "@next/swc-win32-arm64-msvc@13.5.6":
51 | version "13.5.6"
52 | resolved "https://registry.yarnpkg.com/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.5.6.tgz#a5cc0c16920485a929a17495064671374fdbc661"
53 | integrity sha512-aFv1ejfkbS7PUa1qVPwzDHjQWQtknzAZWGTKYIAaS4NMtBlk3VyA6AYn593pqNanlicewqyl2jUhQAaFV/qXsg==
54 |
55 | "@next/swc-win32-ia32-msvc@13.5.6":
56 | version "13.5.6"
57 | resolved "https://registry.yarnpkg.com/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.5.6.tgz#6a2409b84a2cbf34bf92fe714896455efb4191e4"
58 | integrity sha512-XqqpHgEIlBHvzwG8sp/JXMFkLAfGLqkbVsyN+/Ih1mR8INb6YCc2x/Mbwi6hsAgUnqQztz8cvEbHJUbSl7RHDg==
59 |
60 | "@next/swc-win32-x64-msvc@13.5.6":
61 | version "13.5.6"
62 | resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.5.6.tgz#4a3e2a206251abc729339ba85f60bc0433c2865d"
63 | integrity sha512-Cqfe1YmOS7k+5mGu92nl5ULkzpKuxJrP3+4AEuPmrpFZ3BHxTY3TnHmU1On3bFmFFs6FbTcdF58CCUProGpIGQ==
64 |
65 | "@noble/curves@1.2.0", "@noble/curves@~1.2.0":
66 | version "1.2.0"
67 | resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35"
68 | integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==
69 | dependencies:
70 | "@noble/hashes" "1.3.2"
71 |
72 | "@noble/hashes@1.3.2":
73 | version "1.3.2"
74 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39"
75 | integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==
76 |
77 | "@noble/hashes@~1.3.0", "@noble/hashes@~1.3.2":
78 | version "1.3.3"
79 | resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699"
80 | integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==
81 |
82 | "@scure/base@~1.1.0", "@scure/base@~1.1.2":
83 | version "1.1.5"
84 | resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.5.tgz#1d85d17269fe97694b9c592552dd9e5e33552157"
85 | integrity sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==
86 |
87 | "@scure/bip32@1.3.2":
88 | version "1.3.2"
89 | resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.2.tgz#90e78c027d5e30f0b22c1f8d50ff12f3fb7559f8"
90 | integrity sha512-N1ZhksgwD3OBlwTv3R6KFEcPojl/W4ElJOeCZdi+vuI5QmTFwLq3OFf2zd2ROpKvxFdgZ6hUpb0dx9bVNEwYCA==
91 | dependencies:
92 | "@noble/curves" "~1.2.0"
93 | "@noble/hashes" "~1.3.2"
94 | "@scure/base" "~1.1.2"
95 |
96 | "@scure/bip39@1.2.1":
97 | version "1.2.1"
98 | resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.1.tgz#5cee8978656b272a917b7871c981e0541ad6ac2a"
99 | integrity sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==
100 | dependencies:
101 | "@noble/hashes" "~1.3.0"
102 | "@scure/base" "~1.1.0"
103 |
104 | "@swc/helpers@0.5.2":
105 | version "0.5.2"
106 | resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.2.tgz#85ea0c76450b61ad7d10a37050289eded783c27d"
107 | integrity sha512-E4KcWTpoLHqwPHLxidpOqQbcrZVgi0rsmmZXUle1jXmJfuIf/UWpczUJ7MZZ5tlxytgJXyp0w4PGkkeLiuIdZw==
108 | dependencies:
109 | tslib "^2.4.0"
110 |
111 | "@types/node@^20.11.8":
112 | version "20.11.10"
113 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.11.10.tgz#6c3de8974d65c362f82ee29db6b5adf4205462f9"
114 | integrity sha512-rZEfe/hJSGYmdfX9tvcPMYeYPW2sNl50nsw4jZmRcaG0HIAb0WYEpsB05GOb53vjqpyE9GUhlDQ4jLSoB5q9kg==
115 | dependencies:
116 | undici-types "~5.26.4"
117 |
118 | "@types/prop-types@*":
119 | version "15.7.11"
120 | resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.11.tgz#2596fb352ee96a1379c657734d4b913a613ad563"
121 | integrity sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==
122 |
123 | "@types/react@18.2.48":
124 | version "18.2.48"
125 | resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1"
126 | integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==
127 | dependencies:
128 | "@types/prop-types" "*"
129 | "@types/scheduler" "*"
130 | csstype "^3.0.2"
131 |
132 | "@types/scheduler@*":
133 | version "0.16.8"
134 | resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff"
135 | integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==
136 |
137 | abitype@1.0.0:
138 | version "1.0.0"
139 | resolved "https://registry.yarnpkg.com/abitype/-/abitype-1.0.0.tgz#237176dace81d90d018bebf3a45cb42f2a2d9e97"
140 | integrity sha512-NMeMah//6bJ56H5XRj8QCV4AwuW6hB6zqz2LnhhLdcWVQOsXki6/Pn3APeqxCma62nXIcmZWdu1DlHWS74umVQ==
141 |
142 | busboy@1.6.0:
143 | version "1.6.0"
144 | resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
145 | integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
146 | dependencies:
147 | streamsearch "^1.1.0"
148 |
149 | caniuse-lite@^1.0.30001406:
150 | version "1.0.30001581"
151 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001581.tgz#0dfd4db9e94edbdca67d57348ebc070dece279f4"
152 | integrity sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==
153 |
154 | client-only@0.0.1:
155 | version "0.0.1"
156 | resolved "https://registry.yarnpkg.com/client-only/-/client-only-0.0.1.tgz#38bba5d403c41ab150bff64a95c85013cf73bca1"
157 | integrity sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==
158 |
159 | csstype@^3.0.2:
160 | version "3.1.3"
161 | resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81"
162 | integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==
163 |
164 | glob-to-regexp@^0.4.1:
165 | version "0.4.1"
166 | resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e"
167 | integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==
168 |
169 | graceful-fs@^4.1.2:
170 | version "4.2.11"
171 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
172 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
173 |
174 | isows@1.0.3:
175 | version "1.0.3"
176 | resolved "https://registry.yarnpkg.com/isows/-/isows-1.0.3.tgz#93c1cf0575daf56e7120bab5c8c448b0809d0d74"
177 | integrity sha512-2cKei4vlmg2cxEjm3wVSqn8pcoRF/LX/wpifuuNquFO4SQmPwarClT+SUCA2lt+l581tTeZIPIZuIDo2jWN1fg==
178 |
179 | "js-tokens@^3.0.0 || ^4.0.0":
180 | version "4.0.0"
181 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
182 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
183 |
184 | loose-envify@^1.1.0:
185 | version "1.4.0"
186 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
187 | integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
188 | dependencies:
189 | js-tokens "^3.0.0 || ^4.0.0"
190 |
191 | nanoid@^3.3.6:
192 | version "3.3.7"
193 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
194 | integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
195 |
196 | next@13.5.6:
197 | version "13.5.6"
198 | resolved "https://registry.yarnpkg.com/next/-/next-13.5.6.tgz#e964b5853272236c37ce0dd2c68302973cf010b1"
199 | integrity sha512-Y2wTcTbO4WwEsVb4A8VSnOsG1I9ok+h74q0ZdxkwM3EODqrs4pasq7O0iUxbcS9VtWMicG7f3+HAj0r1+NtKSw==
200 | dependencies:
201 | "@next/env" "13.5.6"
202 | "@swc/helpers" "0.5.2"
203 | busboy "1.6.0"
204 | caniuse-lite "^1.0.30001406"
205 | postcss "8.4.31"
206 | styled-jsx "5.1.1"
207 | watchpack "2.4.0"
208 | optionalDependencies:
209 | "@next/swc-darwin-arm64" "13.5.6"
210 | "@next/swc-darwin-x64" "13.5.6"
211 | "@next/swc-linux-arm64-gnu" "13.5.6"
212 | "@next/swc-linux-arm64-musl" "13.5.6"
213 | "@next/swc-linux-x64-gnu" "13.5.6"
214 | "@next/swc-linux-x64-musl" "13.5.6"
215 | "@next/swc-win32-arm64-msvc" "13.5.6"
216 | "@next/swc-win32-ia32-msvc" "13.5.6"
217 | "@next/swc-win32-x64-msvc" "13.5.6"
218 |
219 | picocolors@^1.0.0:
220 | version "1.0.0"
221 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
222 | integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
223 |
224 | postcss@8.4.31:
225 | version "8.4.31"
226 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d"
227 | integrity sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==
228 | dependencies:
229 | nanoid "^3.3.6"
230 | picocolors "^1.0.0"
231 | source-map-js "^1.0.2"
232 |
233 | prettier@^3.2.4:
234 | version "3.2.4"
235 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283"
236 | integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==
237 |
238 | react-dom@^18.2.0:
239 | version "18.2.0"
240 | resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d"
241 | integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==
242 | dependencies:
243 | loose-envify "^1.1.0"
244 | scheduler "^0.23.0"
245 |
246 | react@^18.2.0:
247 | version "18.2.0"
248 | resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5"
249 | integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==
250 | dependencies:
251 | loose-envify "^1.1.0"
252 |
253 | scheduler@^0.23.0:
254 | version "0.23.0"
255 | resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe"
256 | integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==
257 | dependencies:
258 | loose-envify "^1.1.0"
259 |
260 | source-map-js@^1.0.2:
261 | version "1.0.2"
262 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
263 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
264 |
265 | streamsearch@^1.1.0:
266 | version "1.1.0"
267 | resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
268 | integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
269 |
270 | styled-jsx@5.1.1:
271 | version "5.1.1"
272 | resolved "https://registry.yarnpkg.com/styled-jsx/-/styled-jsx-5.1.1.tgz#839a1c3aaacc4e735fed0781b8619ea5d0009d1f"
273 | integrity sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==
274 | dependencies:
275 | client-only "0.0.1"
276 |
277 | tslib@^2.4.0:
278 | version "2.6.2"
279 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
280 | integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
281 |
282 | typescript@^5.3.3:
283 | version "5.3.3"
284 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37"
285 | integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==
286 |
287 | undici-types@~5.26.4:
288 | version "5.26.5"
289 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
290 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
291 |
292 | viem@^2.7.1:
293 | version "2.7.1"
294 | resolved "https://registry.yarnpkg.com/viem/-/viem-2.7.1.tgz#b46e2d012b4b543e4377da8584cd12f79c6161b1"
295 | integrity sha512-izAX2KedTFnI2l0ZshtnlK2ZuDvSlKeuaanWyNwC4ffDgrCGtwX1bvVXO3Krh53lZgqvjd8UGpjGaBl3WqJ4yQ==
296 | dependencies:
297 | "@adraffy/ens-normalize" "1.10.0"
298 | "@noble/curves" "1.2.0"
299 | "@noble/hashes" "1.3.2"
300 | "@scure/bip32" "1.3.2"
301 | "@scure/bip39" "1.2.1"
302 | abitype "1.0.0"
303 | isows "1.0.3"
304 | ws "8.13.0"
305 |
306 | watchpack@2.4.0:
307 | version "2.4.0"
308 | resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d"
309 | integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==
310 | dependencies:
311 | glob-to-regexp "^0.4.1"
312 | graceful-fs "^4.1.2"
313 |
314 | ws@8.13.0:
315 | version "8.13.0"
316 | resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0"
317 | integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==
318 |
--------------------------------------------------------------------------------