viem 0.0.0 → 0.0.1-alpha.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.
@@ -0,0 +1,277 @@
1
+ import {
2
+ BaseError,
3
+ buildRequest,
4
+ getSocket,
5
+ rpc
6
+ } from "./chunk-Z6LRV6XI.js";
7
+
8
+ // src/clients/transports/createTransport.ts
9
+ function createTransport(config, value) {
10
+ return {
11
+ config,
12
+ value
13
+ };
14
+ }
15
+
16
+ // src/clients/transports/errors.ts
17
+ var UrlRequiredError = class extends BaseError {
18
+ constructor() {
19
+ super(
20
+ "No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.",
21
+ {
22
+ docsPath: "/TODO"
23
+ }
24
+ );
25
+ }
26
+ };
27
+
28
+ // src/clients/transports/custom.ts
29
+ function custom(provider, { key = "custom", name = "Custom Provider" } = {}) {
30
+ return () => createTransport({
31
+ key,
32
+ name,
33
+ request: provider.request.bind(provider),
34
+ type: "custom"
35
+ });
36
+ }
37
+
38
+ // src/clients/transports/fallback.ts
39
+ function fallback(transports, { key = "fallback", name = "Fallback" } = {}) {
40
+ return ({ chain }) => {
41
+ return createTransport(
42
+ {
43
+ key,
44
+ name,
45
+ async request({ method, params }) {
46
+ const fetch = async (i = 0) => {
47
+ const transport = transports[i]({ chain });
48
+ try {
49
+ return await transport.config.request({
50
+ method,
51
+ params
52
+ });
53
+ } catch (err) {
54
+ if (i < transports.length - 1)
55
+ return fetch(i + 1);
56
+ throw err;
57
+ }
58
+ };
59
+ return fetch();
60
+ },
61
+ type: "fallback"
62
+ },
63
+ {
64
+ transports: transports.map(
65
+ (fn) => fn({ chain })
66
+ )
67
+ }
68
+ );
69
+ };
70
+ }
71
+
72
+ // src/clients/transports/http.ts
73
+ function http(url, { key = "http", name = "HTTP JSON-RPC" } = {}) {
74
+ return ({ chain }) => {
75
+ const url_ = url || chain?.rpcUrls.default.http[0];
76
+ if (!url_)
77
+ throw new UrlRequiredError();
78
+ return createTransport(
79
+ {
80
+ key,
81
+ name,
82
+ async request({ method, params }) {
83
+ const { result } = await rpc.http(url_, {
84
+ body: {
85
+ method,
86
+ params
87
+ }
88
+ });
89
+ return result;
90
+ },
91
+ type: "http"
92
+ },
93
+ {
94
+ url
95
+ }
96
+ );
97
+ };
98
+ }
99
+
100
+ // src/clients/transports/webSocket.ts
101
+ function webSocket(url, {
102
+ key = "webSocket",
103
+ name = "WebSocket JSON-RPC"
104
+ } = {}) {
105
+ return ({ chain }) => {
106
+ const url_ = url || chain?.rpcUrls.default.webSocket?.[0];
107
+ if (!url_)
108
+ throw new UrlRequiredError();
109
+ return createTransport(
110
+ {
111
+ key,
112
+ name,
113
+ async request({ method, params }) {
114
+ const socket = await getSocket(url_);
115
+ const { result } = await rpc.webSocketAsync(socket, {
116
+ body: { method, params }
117
+ });
118
+ return result;
119
+ },
120
+ type: "webSocket"
121
+ },
122
+ {
123
+ getSocket() {
124
+ return getSocket(url_);
125
+ },
126
+ async subscribe({ params, onData, onError }) {
127
+ const socket = await getSocket(url_);
128
+ const { result: subscriptionId } = await new Promise(
129
+ (resolve, reject) => rpc.webSocket(socket, {
130
+ body: {
131
+ method: "eth_subscribe",
132
+ params
133
+ },
134
+ onData: (data) => {
135
+ if (typeof data.id === "number") {
136
+ resolve(data);
137
+ return;
138
+ }
139
+ onData(data);
140
+ },
141
+ onError: (error) => {
142
+ reject(error);
143
+ onError?.(error);
144
+ }
145
+ })
146
+ );
147
+ return {
148
+ subscriptionId,
149
+ async unsubscribe() {
150
+ return new Promise(
151
+ (resolve, reject) => rpc.webSocket(socket, {
152
+ body: {
153
+ method: "eth_unsubscribe",
154
+ params: [subscriptionId]
155
+ },
156
+ onData: resolve,
157
+ onError: reject
158
+ })
159
+ );
160
+ }
161
+ };
162
+ }
163
+ }
164
+ );
165
+ };
166
+ }
167
+
168
+ // src/utils/uid.ts
169
+ var size = 256;
170
+ var index = size;
171
+ var buffer;
172
+ function uid(length = 11) {
173
+ if (!buffer || index + length > size * 2) {
174
+ buffer = "";
175
+ index = 0;
176
+ for (let i = 0; i < size; i++) {
177
+ buffer += (256 + Math.random() * 256 | 0).toString(16).substring(1);
178
+ }
179
+ }
180
+ return buffer.substring(index, index++ + length);
181
+ }
182
+
183
+ // src/clients/createClient.ts
184
+ function createClient({
185
+ chain,
186
+ key = "base",
187
+ name = "Base Client",
188
+ pollingInterval = 4e3,
189
+ transport,
190
+ type = "base"
191
+ }) {
192
+ const { config, value } = transport({ chain });
193
+ return {
194
+ chain,
195
+ key,
196
+ name,
197
+ pollingInterval,
198
+ request: buildRequest(config.request),
199
+ transport: { ...config, ...value },
200
+ type,
201
+ uid: uid()
202
+ };
203
+ }
204
+
205
+ // src/clients/createPublicClient.ts
206
+ function createPublicClient({
207
+ chain,
208
+ key = "public",
209
+ name = "Public Client",
210
+ transport,
211
+ pollingInterval
212
+ }) {
213
+ chain;
214
+ return {
215
+ ...createClient({
216
+ chain,
217
+ key,
218
+ name,
219
+ pollingInterval,
220
+ transport,
221
+ type: "publicClient"
222
+ })
223
+ };
224
+ }
225
+
226
+ // src/clients/createTestClient.ts
227
+ function createTestClient({
228
+ chain,
229
+ key = "test",
230
+ name = "Test Client",
231
+ mode,
232
+ pollingInterval,
233
+ transport
234
+ }) {
235
+ return {
236
+ ...createClient({
237
+ chain,
238
+ key,
239
+ name,
240
+ pollingInterval,
241
+ transport,
242
+ type: "testClient"
243
+ }),
244
+ mode
245
+ };
246
+ }
247
+
248
+ // src/clients/createWalletClient.ts
249
+ function createWalletClient({
250
+ transport,
251
+ key = "wallet",
252
+ name = "Wallet Client",
253
+ pollingInterval
254
+ }) {
255
+ return {
256
+ ...createClient({
257
+ key,
258
+ name,
259
+ pollingInterval,
260
+ transport,
261
+ type: "walletClient"
262
+ })
263
+ };
264
+ }
265
+
266
+ export {
267
+ createTransport,
268
+ UrlRequiredError,
269
+ custom,
270
+ fallback,
271
+ http,
272
+ webSocket,
273
+ createClient,
274
+ createPublicClient,
275
+ createTestClient,
276
+ createWalletClient
277
+ };