@1001-digital/layers.evm 1.0.9 → 1.0.11
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/.playground/app/pages/index.vue +5 -0
- package/.playground/app/pages/transaction-flow.vue +225 -0
- package/.playground/nuxt.config.ts +3 -1
- package/app/composables/ens.ts +5 -1
- package/app/plugins/price-feed.client.ts +8 -4
- package/app/plugins/wagmi.ts +96 -87
- package/app/utils/ens.ts +7 -1
- package/nuxt.config.ts +13 -1
- package/package.json +6 -7
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="playground">
|
|
3
|
+
<h1>EvmTransactionFlow States</h1>
|
|
4
|
+
<p><NuxtLink to="/">← Back</NuxtLink></p>
|
|
5
|
+
|
|
6
|
+
<Card>
|
|
7
|
+
<h2>Confirm</h2>
|
|
8
|
+
<p>Opens the dialog at the confirmation step.</p>
|
|
9
|
+
|
|
10
|
+
<EvmTransactionFlow
|
|
11
|
+
:request="hangingRequest"
|
|
12
|
+
:text="{
|
|
13
|
+
title: { confirm: 'Confirm Transfer' },
|
|
14
|
+
lead: {
|
|
15
|
+
confirm: 'You are about to send 1 ETH to vitalik.eth.',
|
|
16
|
+
},
|
|
17
|
+
action: { confirm: 'Send' },
|
|
18
|
+
}"
|
|
19
|
+
>
|
|
20
|
+
<template #start="{ start }">
|
|
21
|
+
<Actions>
|
|
22
|
+
<Button @click="start">Open Confirm</Button>
|
|
23
|
+
</Actions>
|
|
24
|
+
</template>
|
|
25
|
+
|
|
26
|
+
<template #confirm>
|
|
27
|
+
<div class="tx-details">
|
|
28
|
+
<p><strong>To:</strong> vitalik.eth</p>
|
|
29
|
+
<p><strong>Amount:</strong> 1 ETH</p>
|
|
30
|
+
<p><strong>Network:</strong> Sepolia</p>
|
|
31
|
+
</div>
|
|
32
|
+
</template>
|
|
33
|
+
</EvmTransactionFlow>
|
|
34
|
+
</Card>
|
|
35
|
+
|
|
36
|
+
<Card>
|
|
37
|
+
<h2>Requesting</h2>
|
|
38
|
+
<p>Skips confirmation, shows the loading spinner while awaiting wallet signature.</p>
|
|
39
|
+
|
|
40
|
+
<EvmTransactionFlow
|
|
41
|
+
skip-confirmation
|
|
42
|
+
:dismissable="false"
|
|
43
|
+
:request="hangingRequest"
|
|
44
|
+
:text="{
|
|
45
|
+
title: { requesting: 'Awaiting Signature' },
|
|
46
|
+
lead: { requesting: 'Please confirm in your wallet...' },
|
|
47
|
+
}"
|
|
48
|
+
>
|
|
49
|
+
<template #start="{ start }">
|
|
50
|
+
<Actions>
|
|
51
|
+
<Button @click="start">Open Requesting</Button>
|
|
52
|
+
</Actions>
|
|
53
|
+
</template>
|
|
54
|
+
</EvmTransactionFlow>
|
|
55
|
+
</Card>
|
|
56
|
+
|
|
57
|
+
<Card>
|
|
58
|
+
<h2>Error: User Rejected</h2>
|
|
59
|
+
<p>Simulates a user rejecting the transaction in their wallet.</p>
|
|
60
|
+
|
|
61
|
+
<EvmTransactionFlow
|
|
62
|
+
skip-confirmation
|
|
63
|
+
:request="rejectedRequest"
|
|
64
|
+
>
|
|
65
|
+
<template #start="{ start }">
|
|
66
|
+
<Actions>
|
|
67
|
+
<Button @click="start">Open Rejected</Button>
|
|
68
|
+
</Actions>
|
|
69
|
+
</template>
|
|
70
|
+
</EvmTransactionFlow>
|
|
71
|
+
</Card>
|
|
72
|
+
|
|
73
|
+
<Card>
|
|
74
|
+
<h2>Error: Transaction Failed</h2>
|
|
75
|
+
<p>Simulates a generic transaction error.</p>
|
|
76
|
+
|
|
77
|
+
<EvmTransactionFlow
|
|
78
|
+
skip-confirmation
|
|
79
|
+
:request="failedRequest"
|
|
80
|
+
:text="{
|
|
81
|
+
title: { error: 'Transfer Failed' },
|
|
82
|
+
action: { error: 'Retry' },
|
|
83
|
+
}"
|
|
84
|
+
>
|
|
85
|
+
<template #start="{ start }">
|
|
86
|
+
<Actions>
|
|
87
|
+
<Button @click="start">Open Failed</Button>
|
|
88
|
+
</Actions>
|
|
89
|
+
</template>
|
|
90
|
+
</EvmTransactionFlow>
|
|
91
|
+
</Card>
|
|
92
|
+
|
|
93
|
+
<Card>
|
|
94
|
+
<h2>Waiting & Complete (Toast)</h2>
|
|
95
|
+
<p>
|
|
96
|
+
After signing, the dialog closes and a toast tracks the receipt.
|
|
97
|
+
This mock resolves instantly and shows the success toast.
|
|
98
|
+
</p>
|
|
99
|
+
|
|
100
|
+
<EvmTransactionFlow
|
|
101
|
+
skip-confirmation
|
|
102
|
+
:request="successRequest"
|
|
103
|
+
:delay-after="0"
|
|
104
|
+
:delay-autoclose="5000"
|
|
105
|
+
:text="{
|
|
106
|
+
title: {
|
|
107
|
+
waiting: 'Transfer Pending',
|
|
108
|
+
complete: 'Transfer Complete',
|
|
109
|
+
},
|
|
110
|
+
lead: {
|
|
111
|
+
waiting: 'Waiting for on-chain confirmation...',
|
|
112
|
+
complete: 'Your transfer has been confirmed.',
|
|
113
|
+
},
|
|
114
|
+
}"
|
|
115
|
+
>
|
|
116
|
+
<template #start="{ start }">
|
|
117
|
+
<Actions>
|
|
118
|
+
<Button @click="start">Open Waiting/Complete</Button>
|
|
119
|
+
</Actions>
|
|
120
|
+
</template>
|
|
121
|
+
</EvmTransactionFlow>
|
|
122
|
+
</Card>
|
|
123
|
+
|
|
124
|
+
<Card>
|
|
125
|
+
<h2>Chain Switch</h2>
|
|
126
|
+
<p>
|
|
127
|
+
Shown when the connected wallet is on a different chain.
|
|
128
|
+
Connect to a non-Sepolia network to see this state.
|
|
129
|
+
</p>
|
|
130
|
+
|
|
131
|
+
<EvmTransactionFlow
|
|
132
|
+
:request="hangingRequest"
|
|
133
|
+
:text="{
|
|
134
|
+
title: { chain: 'Wrong Network' },
|
|
135
|
+
lead: { chain: 'Please switch to Sepolia to continue.' },
|
|
136
|
+
}"
|
|
137
|
+
>
|
|
138
|
+
<template #start="{ start }">
|
|
139
|
+
<Actions>
|
|
140
|
+
<Button @click="start">Open Chain Switch</Button>
|
|
141
|
+
</Actions>
|
|
142
|
+
</template>
|
|
143
|
+
</EvmTransactionFlow>
|
|
144
|
+
</Card>
|
|
145
|
+
|
|
146
|
+
<Card>
|
|
147
|
+
<h2>Custom Actions Slot</h2>
|
|
148
|
+
<p>Uses the <code>actions</code> slot to add custom footer buttons.</p>
|
|
149
|
+
|
|
150
|
+
<EvmTransactionFlow
|
|
151
|
+
:request="hangingRequest"
|
|
152
|
+
:text="{
|
|
153
|
+
title: { confirm: 'Custom Actions' },
|
|
154
|
+
lead: { confirm: 'This dialog has custom footer actions.' },
|
|
155
|
+
}"
|
|
156
|
+
>
|
|
157
|
+
<template #start="{ start }">
|
|
158
|
+
<Actions>
|
|
159
|
+
<Button @click="start">Open Custom Actions</Button>
|
|
160
|
+
</Actions>
|
|
161
|
+
</template>
|
|
162
|
+
|
|
163
|
+
<template #actions="{ cancel, step }">
|
|
164
|
+
<template v-if="step === 'confirm'">
|
|
165
|
+
<Button class="secondary" @click="cancel">Nevermind</Button>
|
|
166
|
+
<Button class="secondary">Save Draft</Button>
|
|
167
|
+
<Button>Approve & Send</Button>
|
|
168
|
+
</template>
|
|
169
|
+
</template>
|
|
170
|
+
</EvmTransactionFlow>
|
|
171
|
+
</Card>
|
|
172
|
+
</div>
|
|
173
|
+
</template>
|
|
174
|
+
|
|
175
|
+
<script setup lang="ts">
|
|
176
|
+
import type { Hash } from 'viem'
|
|
177
|
+
|
|
178
|
+
const delay = (ms: number) => new Promise((r) => setTimeout(r, ms))
|
|
179
|
+
|
|
180
|
+
const hangingRequest = () => new Promise<Hash>(() => {})
|
|
181
|
+
|
|
182
|
+
const rejectedRequest = async (): Promise<Hash> => {
|
|
183
|
+
await delay(500)
|
|
184
|
+
const err = new Error('User rejected the request.')
|
|
185
|
+
;(err as any).cause = { code: 4001 }
|
|
186
|
+
;(err as any).shortMessage = 'User rejected the request.'
|
|
187
|
+
throw err
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
const failedRequest = async (): Promise<Hash> => {
|
|
191
|
+
await delay(500)
|
|
192
|
+
const err = new Error('Insufficient funds for gas.')
|
|
193
|
+
;(err as any).shortMessage = 'Insufficient funds for gas.'
|
|
194
|
+
throw err
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
const successRequest = async (): Promise<Hash> => {
|
|
198
|
+
await delay(500)
|
|
199
|
+
return '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' as Hash
|
|
200
|
+
}
|
|
201
|
+
</script>
|
|
202
|
+
|
|
203
|
+
<style scoped>
|
|
204
|
+
.playground {
|
|
205
|
+
max-width: 50rem;
|
|
206
|
+
margin: 0 auto;
|
|
207
|
+
padding: var(--spacer);
|
|
208
|
+
display: grid;
|
|
209
|
+
gap: var(--spacer);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.tx-details {
|
|
213
|
+
padding: var(--size-4);
|
|
214
|
+
background: var(--gray-z-1);
|
|
215
|
+
border-radius: var(--radius);
|
|
216
|
+
display: grid;
|
|
217
|
+
gap: var(--size-3);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.tx-details p {
|
|
221
|
+
margin: 0;
|
|
222
|
+
font-family: var(--font-mono);
|
|
223
|
+
font-size: var(--font-sm);
|
|
224
|
+
}
|
|
225
|
+
</style>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url'
|
|
2
2
|
|
|
3
3
|
const layerDir = fileURLToPath(new URL('..', import.meta.url))
|
|
4
|
-
const componentsDir = fileURLToPath(
|
|
4
|
+
const componentsDir = fileURLToPath(
|
|
5
|
+
new URL('../../components/src', import.meta.url),
|
|
6
|
+
)
|
|
5
7
|
|
|
6
8
|
export default defineNuxtConfig({
|
|
7
9
|
extends: ['@1001-digital/layers.base', '..'],
|
package/app/composables/ens.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
export default defineNuxtPlugin(
|
|
2
|
-
|
|
1
|
+
export default defineNuxtPlugin({
|
|
2
|
+
name: 'price-feed',
|
|
3
|
+
dependsOn: ['wagmi'],
|
|
4
|
+
setup() {
|
|
5
|
+
const priceFeed = usePriceFeed()
|
|
3
6
|
|
|
4
|
-
|
|
7
|
+
priceFeed.fetchPrice()
|
|
5
8
|
|
|
6
|
-
|
|
9
|
+
setInterval(() => priceFeed.fetchPrice(), 60 * 60 * 1000)
|
|
10
|
+
},
|
|
7
11
|
})
|
package/app/plugins/wagmi.ts
CHANGED
|
@@ -22,104 +22,113 @@ import {
|
|
|
22
22
|
type EvmConfig,
|
|
23
23
|
} from '@1001-digital/components'
|
|
24
24
|
|
|
25
|
-
export default defineNuxtPlugin(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
export default defineNuxtPlugin({
|
|
26
|
+
name: 'wagmi',
|
|
27
|
+
setup(nuxtApp) {
|
|
28
|
+
const appConfig = useAppConfig()
|
|
29
|
+
const runtimeConfig = nuxtApp.$config.public.evm as {
|
|
30
|
+
walletConnectProjectId: string
|
|
31
|
+
chains: Record<string, { rpc1?: string; rpc2?: string; rpc3?: string }>
|
|
32
|
+
ens: { indexer1?: string; indexer2?: string; indexer3?: string }
|
|
33
|
+
}
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
const title = appConfig.evm?.title || 'EVM Layer'
|
|
36
|
+
const chainEntries = appConfig.evm?.chains || {}
|
|
35
37
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
// Build chains and transports from config
|
|
39
|
+
// Ensure defaultChain is first — wagmi uses chains[0] as its default
|
|
40
|
+
const defaultChain = appConfig.evm?.defaultChain || 'mainnet'
|
|
41
|
+
const sortedEntries = Object.entries(chainEntries).sort(([a], [b]) =>
|
|
42
|
+
a === defaultChain ? -1 : b === defaultChain ? 1 : 0,
|
|
43
|
+
)
|
|
39
44
|
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
chains.push(chain)
|
|
45
|
+
const chains: [Chain, ...Chain[]] = [] as unknown as [Chain, ...Chain[]]
|
|
46
|
+
const transports: Record<number, Transport> = {}
|
|
43
47
|
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (rpcs?.rpc2) transportList.push(http(rpcs.rpc2))
|
|
48
|
-
if (rpcs?.rpc3) transportList.push(http(rpcs.rpc3))
|
|
49
|
-
transportList.push(http())
|
|
48
|
+
for (const [key, entry] of sortedEntries) {
|
|
49
|
+
const chain = resolveChain(entry.id!)
|
|
50
|
+
chains.push(chain)
|
|
50
51
|
|
|
51
|
-
|
|
52
|
-
|
|
52
|
+
const rpcs = runtimeConfig.chains?.[key]
|
|
53
|
+
const transportList = []
|
|
54
|
+
if (rpcs?.rpc1) transportList.push(http(rpcs.rpc1))
|
|
55
|
+
if (rpcs?.rpc2) transportList.push(http(rpcs.rpc2))
|
|
56
|
+
if (rpcs?.rpc3) transportList.push(http(rpcs.rpc3))
|
|
57
|
+
transportList.push(http())
|
|
53
58
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
injected(),
|
|
57
|
-
coinbaseWallet({
|
|
58
|
-
appName: title,
|
|
59
|
-
appLogoUrl: '',
|
|
60
|
-
}),
|
|
61
|
-
metaMask({
|
|
62
|
-
headless: true,
|
|
63
|
-
dappMetadata: {
|
|
64
|
-
name: title,
|
|
65
|
-
iconUrl: '',
|
|
66
|
-
url: '',
|
|
67
|
-
},
|
|
68
|
-
}),
|
|
69
|
-
]
|
|
59
|
+
transports[chain.id] = fallback(transportList)
|
|
60
|
+
}
|
|
70
61
|
|
|
71
|
-
|
|
72
|
-
connectors
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
62
|
+
// Connectors
|
|
63
|
+
const connectors: CreateConnectorFn[] = [
|
|
64
|
+
injected(),
|
|
65
|
+
coinbaseWallet({
|
|
66
|
+
appName: title,
|
|
67
|
+
appLogoUrl: '',
|
|
76
68
|
}),
|
|
77
|
-
|
|
69
|
+
metaMask({
|
|
70
|
+
headless: true,
|
|
71
|
+
dappMetadata: {
|
|
72
|
+
name: title,
|
|
73
|
+
iconUrl: '',
|
|
74
|
+
url: '',
|
|
75
|
+
},
|
|
76
|
+
}),
|
|
77
|
+
]
|
|
78
78
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
storage: cookieStorage,
|
|
87
|
-
}),
|
|
88
|
-
ssr: true,
|
|
89
|
-
transports,
|
|
90
|
-
})
|
|
79
|
+
if (import.meta.client && runtimeConfig.walletConnectProjectId)
|
|
80
|
+
connectors.push(
|
|
81
|
+
walletConnect({
|
|
82
|
+
projectId: runtimeConfig.walletConnectProjectId,
|
|
83
|
+
showQrModal: false,
|
|
84
|
+
}),
|
|
85
|
+
)
|
|
91
86
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
87
|
+
const wagmiConfig: Config = createConfig({
|
|
88
|
+
chains,
|
|
89
|
+
batch: {
|
|
90
|
+
multicall: true,
|
|
91
|
+
},
|
|
92
|
+
connectors,
|
|
93
|
+
storage: createStorage({
|
|
94
|
+
storage: cookieStorage,
|
|
95
|
+
}),
|
|
96
|
+
ssr: true,
|
|
97
|
+
transports,
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
// Build EvmConfig from Nuxt app/runtime config
|
|
101
|
+
const indexerUrls = [
|
|
102
|
+
runtimeConfig.ens?.indexer1,
|
|
103
|
+
runtimeConfig.ens?.indexer2,
|
|
104
|
+
runtimeConfig.ens?.indexer3,
|
|
105
|
+
].filter(Boolean) as string[]
|
|
98
106
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
107
|
+
const evmConfig: EvmConfig = {
|
|
108
|
+
title,
|
|
109
|
+
defaultChain: appConfig.evm?.defaultChain || 'mainnet',
|
|
110
|
+
chains: Object.fromEntries(
|
|
111
|
+
Object.entries(chainEntries).map(([key, entry]) => [
|
|
112
|
+
key,
|
|
113
|
+
{ id: entry.id!, blockExplorer: entry.blockExplorer },
|
|
114
|
+
]),
|
|
115
|
+
),
|
|
116
|
+
ens: {
|
|
117
|
+
mode: appConfig.evm?.ens?.mode || 'indexer',
|
|
118
|
+
indexerUrls,
|
|
119
|
+
},
|
|
120
|
+
baseURL: nuxtApp.$config.app.baseURL,
|
|
121
|
+
}
|
|
114
122
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
123
|
+
nuxtApp.vueApp
|
|
124
|
+
.use(WagmiPlugin, { config: wagmiConfig })
|
|
125
|
+
.use(VueQueryPlugin, {})
|
|
126
|
+
.provide(EvmConfigKey, evmConfig)
|
|
119
127
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
128
|
+
return {
|
|
129
|
+
provide: {
|
|
130
|
+
wagmi: wagmiConfig,
|
|
131
|
+
},
|
|
132
|
+
}
|
|
133
|
+
},
|
|
125
134
|
})
|
package/app/utils/ens.ts
CHANGED
|
@@ -1,2 +1,8 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export {
|
|
2
|
+
ensCache,
|
|
3
|
+
fetchEnsFromIndexer,
|
|
4
|
+
fetchEnsFromChain,
|
|
5
|
+
ENS_KEYS_AVATAR,
|
|
6
|
+
ENS_KEYS_PROFILE,
|
|
7
|
+
} from '@1001-digital/components'
|
|
2
8
|
export type { EnsProfile } from '@1001-digital/components'
|
package/nuxt.config.ts
CHANGED
|
@@ -1,14 +1,24 @@
|
|
|
1
1
|
import { fileURLToPath } from 'node:url'
|
|
2
|
+
import { createRequire } from 'node:module'
|
|
3
|
+
import { dirname } from 'node:path'
|
|
4
|
+
|
|
5
|
+
const require = createRequire(import.meta.url)
|
|
2
6
|
|
|
3
7
|
const componentsDir = fileURLToPath(
|
|
4
8
|
new URL('../components/src/evm/components', import.meta.url),
|
|
5
9
|
)
|
|
6
10
|
|
|
11
|
+
// Force all @wagmi/vue imports to resolve to a single copy.
|
|
12
|
+
// pnpm creates separate instances per dependency set, each with its own
|
|
13
|
+
// Symbol-based configKey — breaking Vue's provide/inject across packages.
|
|
14
|
+
const wagmiVue = dirname(require.resolve('@wagmi/vue/package.json'))
|
|
15
|
+
|
|
7
16
|
const clientOnlyComponents = [
|
|
8
17
|
'EvmAccount',
|
|
9
18
|
'EvmConnect',
|
|
10
19
|
'EvmConnectorQR',
|
|
11
20
|
'EvmMetaMaskQR',
|
|
21
|
+
'EvmTransactionFlow',
|
|
12
22
|
'EvmWalletConnectQR',
|
|
13
23
|
]
|
|
14
24
|
|
|
@@ -54,7 +64,9 @@ export default defineNuxtConfig({
|
|
|
54
64
|
|
|
55
65
|
vite: {
|
|
56
66
|
resolve: {
|
|
57
|
-
|
|
67
|
+
alias: {
|
|
68
|
+
'@wagmi/vue': wagmiVue,
|
|
69
|
+
},
|
|
58
70
|
},
|
|
59
71
|
optimizeDeps: {
|
|
60
72
|
include: [
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1001-digital/layers.evm",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.11",
|
|
5
5
|
"main": "./nuxt.config.ts",
|
|
6
6
|
"devDependencies": {
|
|
7
7
|
"@nuxt/eslint": "latest",
|
|
@@ -10,19 +10,18 @@
|
|
|
10
10
|
"nuxt": "^4.3.0",
|
|
11
11
|
"typescript": "^5.9.3",
|
|
12
12
|
"vue": "latest",
|
|
13
|
-
"@1001-digital/layers.base": "^0.0.
|
|
13
|
+
"@1001-digital/layers.base": "^0.0.33"
|
|
14
14
|
},
|
|
15
15
|
"peerDependencies": {
|
|
16
|
-
"@1001-digital/layers.base": "^0.0.
|
|
16
|
+
"@1001-digital/layers.base": "^0.0.33"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@metamask/sdk": "~0.
|
|
19
|
+
"@metamask/sdk": "~0.33.1",
|
|
20
20
|
"@tanstack/vue-query": "^5.92.9",
|
|
21
|
-
"@wagmi/
|
|
22
|
-
"@wagmi/vue": "^0.4.15",
|
|
21
|
+
"@wagmi/vue": "^0.5.0",
|
|
23
22
|
"@walletconnect/ethereum-provider": "~2.23.4",
|
|
24
23
|
"viem": "~2.45.1",
|
|
25
|
-
"@1001-digital/components": "^0.0.
|
|
24
|
+
"@1001-digital/components": "^0.0.3"
|
|
26
25
|
},
|
|
27
26
|
"scripts": {
|
|
28
27
|
"dev": "nuxi dev .playground",
|