viem 0.0.1-alpha.24 → 0.0.1-alpha.25

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.
Files changed (154) hide show
  1. package/contract/package.json +4 -0
  2. package/dist/call-ac509982.d.ts +23 -0
  3. package/dist/{chain-e33d019b.d.ts → chain-c4ccb458.d.ts} +1 -1
  4. package/dist/{chain-afa13f5a.d.ts → chain-f16512e8.d.ts} +20 -1
  5. package/dist/chains.d.ts +20 -8
  6. package/dist/chains.js +46 -46
  7. package/dist/chains.mjs +1 -1
  8. package/dist/{chunk-YQUC52RL.mjs → chunk-2Y3UZMSP.mjs} +77 -84
  9. package/dist/chunk-2Y3UZMSP.mjs.map +1 -0
  10. package/dist/{chunk-A2HXAZXC.js → chunk-CD2XJOBJ.js} +135 -142
  11. package/dist/chunk-CD2XJOBJ.js.map +1 -0
  12. package/dist/{chunk-LQVMDX5I.mjs → chunk-KSAO4Y4Q.mjs} +133 -54
  13. package/dist/chunk-KSAO4Y4Q.mjs.map +1 -0
  14. package/dist/{chunk-3ARWEJ3G.mjs → chunk-LEPQJNVO.mjs} +18 -2
  15. package/dist/chunk-LEPQJNVO.mjs.map +1 -0
  16. package/dist/{chunk-ZYSXBTBB.js → chunk-NUXMGPMK.js} +30 -14
  17. package/dist/chunk-NUXMGPMK.js.map +1 -0
  18. package/dist/{chunk-4D5XG6XB.js → chunk-THMRUG4D.js} +148 -69
  19. package/dist/chunk-THMRUG4D.js.map +1 -0
  20. package/dist/{contract-70f4ddbe.d.ts → contract-9e76e561.d.ts} +44 -31
  21. package/dist/contract.d.ts +123 -0
  22. package/dist/contract.js +53 -0
  23. package/dist/{clients/index.js.map → contract.js.map} +0 -0
  24. package/dist/contract.mjs +53 -0
  25. package/dist/{clients/index.mjs.map → contract.mjs.map} +0 -0
  26. package/dist/{createClient-60e3ab98.d.ts → createClient-68ee4bb4.d.ts} +3 -3
  27. package/dist/{createPublicClient-d3d12dc3.d.ts → createPublicClient-b732194e.d.ts} +3 -3
  28. package/dist/{createTestClient-5f4532c4.d.ts → createTestClient-dedf321e.d.ts} +3 -3
  29. package/dist/{createWalletClient-9ec3df4f.d.ts → createWalletClient-75813d83.d.ts} +3 -3
  30. package/dist/decodeErrorResult-0b934d23.d.ts +16 -0
  31. package/dist/{eip1193-9317a312.d.ts → eip1193-6f9ba163.d.ts} +1 -1
  32. package/dist/ens.d.ts +82 -1
  33. package/dist/ens.js +208 -3
  34. package/dist/ens.js.map +1 -1
  35. package/dist/ens.mjs +209 -4
  36. package/dist/ens.mjs.map +1 -1
  37. package/dist/getAbiItem-c8e6e7d4.d.ts +97 -0
  38. package/dist/index.d.ts +85 -175
  39. package/dist/index.js +237 -279
  40. package/dist/index.js.map +1 -1
  41. package/dist/index.mjs +245 -287
  42. package/dist/index.mjs.map +1 -1
  43. package/dist/public.d.ts +352 -10
  44. package/dist/public.js +3 -4
  45. package/dist/public.mjs +6 -7
  46. package/dist/readContract-4f6e2692.d.ts +10 -0
  47. package/dist/rpc-a5a7f376.d.ts +121 -0
  48. package/dist/{sendTransaction-54a0d509.d.ts → sendTransaction-e713f90c.d.ts} +3 -3
  49. package/dist/test.d.ts +160 -5
  50. package/dist/test.js +222 -18
  51. package/dist/test.js.map +1 -1
  52. package/dist/test.mjs +233 -29
  53. package/dist/test.mjs.map +1 -1
  54. package/dist/transactionReceipt-2a86c7c7.d.ts +26 -0
  55. package/dist/{transactionRequest-bdf57f7d.d.ts → transactionRequest-c7794f5e.d.ts} +1 -1
  56. package/dist/utils/index.d.ts +224 -20
  57. package/dist/utils/index.js +2 -6
  58. package/dist/utils/index.mjs +3 -7
  59. package/dist/wallet.d.ts +41 -7
  60. package/dist/wallet.js +3 -3
  61. package/dist/wallet.mjs +2 -2
  62. package/dist/watchEvent-c346c12d.d.ts +41 -0
  63. package/dist/window.d.ts +2 -2
  64. package/ens/package.json +4 -0
  65. package/package.json +13 -9
  66. package/src/_test/constants.ts +2 -0
  67. package/src/_test/utils.ts +10 -5
  68. package/src/actions/ens/getEnsAddress.bench.ts +26 -0
  69. package/src/actions/ens/getEnsAddress.test.ts +97 -0
  70. package/src/actions/ens/getEnsAddress.ts +122 -0
  71. package/src/actions/ens/getEnsName.bench.ts +30 -0
  72. package/src/actions/ens/getEnsName.test.ts +101 -0
  73. package/src/actions/ens/getEnsName.ts +106 -0
  74. package/src/actions/ens/index.test.ts +12 -0
  75. package/src/actions/ens/index.ts +3 -0
  76. package/src/actions/index.ts +3 -3
  77. package/src/actions/public/createEventFilter.test.ts +36 -4
  78. package/src/actions/public/createEventFilter.ts +27 -10
  79. package/src/actions/public/getFilterChanges.test.ts +198 -4
  80. package/src/actions/public/getFilterLogs.test.ts +195 -2
  81. package/src/actions/public/getLogs.test.ts +201 -2
  82. package/src/actions/public/index.test.ts +0 -1
  83. package/src/actions/public/index.ts +1 -7
  84. package/src/actions/public/multicall.ts +8 -3
  85. package/src/actions/public/simulateContract.ts +1 -4
  86. package/src/actions/public/watchContractEvent.test.ts +4 -4
  87. package/src/actions/{public → wallet}/deployContract.test.ts +1 -2
  88. package/src/actions/{public → wallet}/deployContract.ts +0 -0
  89. package/src/actions/wallet/index.test.ts +1 -0
  90. package/src/actions/wallet/index.ts +6 -0
  91. package/src/chains.test.ts +44 -1517
  92. package/src/clients/transports/webSocket.test.ts +1 -0
  93. package/src/clients/transports/webSocket.ts +1 -0
  94. package/src/contract.test.ts +31 -0
  95. package/src/contract.ts +68 -0
  96. package/src/ens.test.ts +15 -0
  97. package/src/ens.ts +4 -1
  98. package/src/errors/abi.ts +18 -2
  99. package/src/errors/chain.test.ts +46 -0
  100. package/src/errors/chain.ts +33 -0
  101. package/src/errors/contract.ts +2 -2
  102. package/src/errors/index.ts +3 -0
  103. package/src/index.test.ts +0 -147
  104. package/src/index.ts +0 -257
  105. package/src/public.test.ts +36 -0
  106. package/src/public.ts +2 -6
  107. package/src/test.test.ts +38 -0
  108. package/src/test.ts +1 -0
  109. package/src/types/contract.ts +144 -40
  110. package/src/types/index.ts +2 -1
  111. package/src/types/utils.ts +21 -0
  112. package/src/utils/abi/decodeErrorResult.test.ts +1 -1
  113. package/src/utils/abi/decodeEventLog.test.ts +542 -0
  114. package/src/utils/abi/decodeEventLog.ts +107 -0
  115. package/src/utils/abi/decodeFunctionData.test.ts +1 -2
  116. package/src/utils/abi/decodeFunctionData.ts +5 -2
  117. package/src/utils/abi/encodeFunctionData.ts +1 -4
  118. package/src/utils/abi/index.test.ts +1 -0
  119. package/src/utils/abi/index.ts +6 -0
  120. package/src/utils/ens/index.test.ts +1 -0
  121. package/src/utils/ens/index.ts +2 -0
  122. package/src/utils/ens/packetToBytes.test.ts +11 -0
  123. package/src/utils/ens/packetToBytes.ts +29 -0
  124. package/src/utils/index.test.ts +1 -3
  125. package/src/utils/index.ts +3 -2
  126. package/src/utils/rpc.test.ts +1 -0
  127. package/src/utils/rpc.ts +4 -2
  128. package/src/wallet.test.ts +19 -0
  129. package/wallet/package.json +4 -0
  130. package/clients/package.json +0 -4
  131. package/dist/chunk-3ARWEJ3G.mjs.map +0 -1
  132. package/dist/chunk-4D5XG6XB.js.map +0 -1
  133. package/dist/chunk-6QTEW2BE.mjs +0 -260
  134. package/dist/chunk-6QTEW2BE.mjs.map +0 -1
  135. package/dist/chunk-A2HXAZXC.js.map +0 -1
  136. package/dist/chunk-KRPS5CIB.mjs +0 -256
  137. package/dist/chunk-KRPS5CIB.mjs.map +0 -1
  138. package/dist/chunk-LQVMDX5I.mjs.map +0 -1
  139. package/dist/chunk-N3IOPT3R.js +0 -256
  140. package/dist/chunk-N3IOPT3R.js.map +0 -1
  141. package/dist/chunk-YQUC52RL.mjs.map +0 -1
  142. package/dist/chunk-ZSTVHQ6J.js +0 -260
  143. package/dist/chunk-ZSTVHQ6J.js.map +0 -1
  144. package/dist/chunk-ZYSXBTBB.js.map +0 -1
  145. package/dist/clients/index.d.ts +0 -9
  146. package/dist/clients/index.js +0 -24
  147. package/dist/clients/index.mjs +0 -24
  148. package/dist/normalize-ef9240c0.d.ts +0 -33
  149. package/dist/parseGwei-492ab7dd.d.ts +0 -355
  150. package/dist/rpc-26932bae.d.ts +0 -61
  151. package/dist/stopImpersonatingAccount-c1a4b7e5.d.ts +0 -156
  152. package/dist/watchAsset-d59d6e35.d.ts +0 -38
  153. package/dist/watchPendingTransactions-ea21b31d.d.ts +0 -373
  154. package/dist/webSocket-775b4037.d.ts +0 -83
@@ -8,6 +8,7 @@ test('exports utils', () => {
8
8
  "labelhash": [Function],
9
9
  "namehash": [Function],
10
10
  "normalize": [Function],
11
+ "packetToBytes": [Function],
11
12
  }
12
13
  `)
13
14
  })
@@ -3,3 +3,5 @@ export { labelhash } from './labelhash'
3
3
  export { namehash } from './namehash'
4
4
 
5
5
  export { normalize } from './normalize'
6
+
7
+ export { packetToBytes } from './packetToBytes'
@@ -0,0 +1,11 @@
1
+ import { test, expect } from 'vitest'
2
+ import { encodeHex } from '../encoding'
3
+ import { packetToBytes } from './packetToBytes'
4
+
5
+ test.each([
6
+ { packet: 'awkweb.eth', expected: '0x0661776b7765620365746800' },
7
+ { packet: 'foo.awkweb.eth', expected: '0x03666f6f0661776b7765620365746800' },
8
+ { packet: '.', expected: '0x00' },
9
+ ])("packetToBytes('$packet') -> '$expected'", ({ packet, expected }) => {
10
+ expect(encodeHex(packetToBytes(packet))).toBe(expected)
11
+ })
@@ -0,0 +1,29 @@
1
+ // Adapted from https://github.com/mafintosh/dns-packet
2
+ import { ByteArray } from '../../types'
3
+ import { encodeBytes } from '../encoding'
4
+
5
+ /*
6
+ * @description Encodes a DNS packet into a ByteArray containing a UDP payload.
7
+ */
8
+ export function packetToBytes(packet: string): ByteArray {
9
+ function length(value: string) {
10
+ if (value === '.' || value === '..') return 1
11
+ return encodeBytes(value.replace(/^\.|\.$/gm, '')).length + 2
12
+ }
13
+
14
+ const bytes = new Uint8Array(length(packet))
15
+ // strip leading and trailing `.`
16
+ const value = packet.replace(/^\.|\.$/gm, '')
17
+ if (!value.length) return bytes
18
+
19
+ let offset = 0
20
+ const list = value.split('.')
21
+ for (let i = 0; i < list.length; i++) {
22
+ const encoded = encodeBytes(list[i])
23
+ bytes[offset] = encoded.length
24
+ bytes.set(encoded, offset + 1)
25
+ offset += encoded.length + 1
26
+ }
27
+
28
+ return bytes
29
+ }
@@ -16,6 +16,7 @@ test('exports utils', () => {
16
16
  "decodeAbi": [Function],
17
17
  "decodeBytes": [Function],
18
18
  "decodeErrorResult": [Function],
19
+ "decodeEventLog": [Function],
19
20
  "decodeFunctionData": [Function],
20
21
  "decodeFunctionResult": [Function],
21
22
  "decodeHex": [Function],
@@ -75,9 +76,6 @@ test('exports utils', () => {
75
76
  "isBytes": [Function],
76
77
  "isHex": [Function],
77
78
  "keccak256": [Function],
78
- "labelhash": [Function],
79
- "namehash": [Function],
80
- "normalize": [Function],
81
79
  "numberToBytes": [Function],
82
80
  "numberToHex": [Function],
83
81
  "pad": [Function],
@@ -2,6 +2,8 @@ export type {
2
2
  DecodeAbiArgs,
3
3
  DecodeErrorResultArgs,
4
4
  DecodeErrorResultResponse,
5
+ DecodeEventLogArgs,
6
+ DecodeEventLogResponse,
5
7
  DecodeFunctionDataArgs,
6
8
  DecodeFunctionResultArgs,
7
9
  DecodeFunctionResultResponse,
@@ -16,6 +18,7 @@ export type {
16
18
  export {
17
19
  decodeAbi,
18
20
  decodeErrorResult,
21
+ decodeEventLog,
19
22
  decodeFunctionData,
20
23
  decodeFunctionResult,
21
24
  encodeAbi,
@@ -68,8 +71,6 @@ export {
68
71
  trim,
69
72
  } from './data'
70
73
 
71
- export { labelhash, namehash, normalize } from './ens'
72
-
73
74
  export type {
74
75
  BlockFormatter,
75
76
  ExtractFormatter,
@@ -1,4 +1,5 @@
1
1
  import { describe, expect, test } from 'vitest'
2
+ import WebSocket from 'isomorphic-ws'
2
3
 
3
4
  import { createHttpServer, initialBlockNumber, localWsUrl } from '../_test'
4
5
 
package/src/utils/rpc.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import fetch from 'isomorphic-unfetch'
2
+ import WebSocket from 'isomorphic-ws'
1
3
  import {
2
4
  HttpRequestError,
3
5
  RpcError,
@@ -161,8 +163,8 @@ export async function getSocket(url_: string) {
161
163
  // Set up a cache for subscriptions (eth_subscribe).
162
164
  const subscriptions = new Map<Id, CallbackFn>()
163
165
 
164
- const onMessage = ({ data }: { data: string }) => {
165
- const message: RpcResponse = JSON.parse(data)
166
+ const onMessage: (event: WebSocket.MessageEvent) => void = ({ data }) => {
167
+ const message: RpcResponse = JSON.parse(data as string)
166
168
  const isSubscription = message.method === 'eth_subscription'
167
169
  const id = isSubscription ? message.params.subscription : message.id
168
170
  const cache = isSubscription ? subscriptions : requests
@@ -0,0 +1,19 @@
1
+ import { expect, test } from 'vitest'
2
+
3
+ import * as wallet from './wallet'
4
+
5
+ test('exports wallet actions', () => {
6
+ expect(Object.keys(wallet)).toMatchInlineSnapshot(`
7
+ [
8
+ "addChain",
9
+ "getAccounts",
10
+ "getPermissions",
11
+ "requestAccounts",
12
+ "requestPermissions",
13
+ "sendTransaction",
14
+ "signMessage",
15
+ "switchChain",
16
+ "watchAsset",
17
+ ]
18
+ `)
19
+ })
@@ -0,0 +1,4 @@
1
+ {
2
+ "module": "../dist/wallet.mjs",
3
+ "main": "../dist/wallet.js"
4
+ }
@@ -1,4 +0,0 @@
1
- {
2
- "module": "../dist/clients/index.mjs",
3
- "main": "../dist/clients/index.js"
4
- }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/actions/wallet/addChain.ts","../src/actions/wallet/getAccounts.ts","../src/actions/wallet/getPermissions.ts","../src/actions/wallet/requestAccounts.ts","../src/actions/wallet/requestPermissions.ts","../src/actions/wallet/sendTransaction.ts","../src/actions/wallet/signMessage.ts","../src/actions/wallet/switchChain.ts","../src/actions/wallet/watchAsset.ts","../src/actions/wallet/writeContract.ts"],"sourcesContent":["import type { WalletClient } from '../../clients'\nimport type { Chain } from '../../types'\nimport { numberToHex } from '../../utils'\n\nexport async function addChain(client: WalletClient, chain: Chain) {\n const { id, name, nativeCurrency, rpcUrls, blockExplorers } = chain\n await client.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n chainId: numberToHex(id),\n chainName: name,\n nativeCurrency,\n rpcUrls: rpcUrls.default.http,\n blockExplorerUrls: blockExplorers\n ? Object.values(blockExplorers).map(({ url }) => url)\n : undefined,\n },\n ],\n })\n}\n","import type { WalletClient } from '../../clients'\nimport { checksumAddress } from '../../utils/address'\n\nexport async function getAccounts(client: WalletClient) {\n const addresses = await client.request({ method: 'eth_accounts' })\n return addresses.map((address) => checksumAddress(address))\n}\n","import type { WalletClient } from '../../clients'\nimport type { WalletPermission } from '../../types/eip1193'\n\nexport type GetPermissionsResponse = WalletPermission[]\n\nexport async function getPermissions(client: WalletClient) {\n const permissions = await client.request({ method: 'wallet_getPermissions' })\n return permissions\n}\n","import type { WalletClient } from '../../clients'\nimport { getAddress } from '../../utils'\n\nexport async function requestAccounts(client: WalletClient) {\n const addresses = await client.request({ method: 'eth_requestAccounts' })\n return addresses.map((address) => getAddress(address))\n}\n","import type { WalletClient } from '../../clients'\nimport type { WalletPermission } from '../../types/eip1193'\n\nexport type RequestPermissionsArgs = {\n eth_accounts: Record<string, any>\n} & {\n [key: string]: Record<string, any>\n}\nexport type RequestPermissionsResponse = WalletPermission[]\n\nexport async function requestPermissions(\n client: WalletClient,\n permissions: RequestPermissionsArgs,\n) {\n return client.request({\n method: 'wallet_requestPermissions',\n params: [permissions],\n })\n}\n","import type { WalletClient } from '../../clients'\nimport { InvalidGasArgumentsError } from '../../errors'\nimport type {\n Chain,\n Formatter,\n Hash,\n MergeIntersectionProperties,\n TransactionRequest,\n} from '../../types'\nimport type { Formatted, TransactionRequestFormatter } from '../../utils'\nimport { extract, format, formatTransactionRequest } from '../../utils'\n\nexport type FormattedTransactionRequest<\n TFormatter extends Formatter | undefined = Formatter,\n> = MergeIntersectionProperties<\n Formatted<TFormatter, TransactionRequest, true>,\n TransactionRequest\n>\n\nexport type SendTransactionArgs<TChain extends Chain = Chain> =\n FormattedTransactionRequest<TransactionRequestFormatter<TChain>> & {\n chain?: TChain\n }\n\nexport type SendTransactionResponse = Hash\n\nexport async function sendTransaction<TChain extends Chain>(\n client: WalletClient,\n {\n chain,\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n ...rest\n }: SendTransactionArgs<TChain>,\n): Promise<SendTransactionResponse> {\n if (\n maxFeePerGas !== undefined &&\n maxPriorityFeePerGas !== undefined &&\n maxFeePerGas < maxPriorityFeePerGas\n )\n throw new InvalidGasArgumentsError()\n\n const formatter = chain?.formatters?.transactionRequest\n const request_ = format(\n {\n from,\n accessList,\n data,\n gas,\n gasPrice,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { formatter }),\n } as TransactionRequest,\n {\n formatter: formatter || formatTransactionRequest,\n },\n )\n\n const hash = await client.request({\n method: 'eth_sendTransaction',\n params: [request_],\n })\n return hash\n}\n","import type { WalletClient } from '../../clients'\nimport { BaseError } from '../../errors'\nimport type { Address, ByteArray, Hex } from '../../types'\nimport { encodeHex } from '../../utils'\n\nexport type SignMessageArgs = {\n from: Address\n data: Hex | ByteArray\n}\n\nexport type SignMessageResponse = Hex\n\nexport async function signMessage(\n client: WalletClient,\n { from, data: data_ }: SignMessageArgs,\n): Promise<SignMessageResponse> {\n let data\n if (typeof data_ === 'string') {\n if (!data_.startsWith('0x'))\n throw new BaseError(\n `data (\"${data_}\") must be a hex value. Encode it first to a hex with the \\`encodeHex\\` util.`,\n {\n docsPath: '/TODO',\n },\n )\n data = data_\n } else {\n data = encodeHex(data_)\n }\n const signed = await client.request({\n method: 'personal_sign',\n params: [data, from],\n })\n return signed\n}\n","import type { WalletClient } from '../../clients'\nimport { Chain } from '../../types'\nimport { numberToHex } from '../../utils'\n\nexport type SwitchChainArgs = { id: Chain['id'] }\n\nexport async function switchChain(\n client: WalletClient,\n { id }: SwitchChainArgs,\n) {\n await client.request({\n method: 'wallet_switchEthereumChain',\n params: [\n {\n chainId: numberToHex(id),\n },\n ],\n })\n}\n","import type { WalletClient } from '../../clients'\nimport type { WatchAssetParams } from '../../types/eip1193'\n\nexport type WatchAssetArgs = WatchAssetParams\nexport type WatchAssetResponse = boolean\n\nexport async function watchAsset(\n client: WalletClient,\n params: WatchAssetParams,\n): Promise<WatchAssetResponse> {\n const added = await client.request({\n method: 'wallet_watchAsset',\n params: [params],\n })\n return added\n}\n","import { Abi } from 'abitype'\n\nimport type { WalletClient } from '../../clients'\nimport type { Chain, ContractConfig, GetValue } from '../../types'\nimport { EncodeFunctionDataArgs, encodeFunctionData } from '../../utils'\nimport {\n sendTransaction,\n SendTransactionArgs,\n SendTransactionResponse,\n} from './sendTransaction'\n\nexport type WriteContractArgs<\n TChain extends Chain = Chain,\n TAbi extends Abi | readonly unknown[] = Abi,\n TFunctionName extends string = string,\n> = Omit<SendTransactionArgs<TChain>, 'to' | 'data' | 'value'> & {\n value?: GetValue<TAbi, TFunctionName, SendTransactionArgs<TChain>['value']>\n} & ContractConfig<TAbi, TFunctionName, 'payable' | 'nonpayable'>\n\nexport type WriteContractResponse = SendTransactionResponse\n\nexport async function writeContract<\n TChain extends Chain,\n TAbi extends Abi | readonly unknown[],\n TFunctionName extends string,\n>(\n client: WalletClient,\n {\n abi,\n address,\n args,\n functionName,\n ...request\n }: WriteContractArgs<TChain, TAbi, TFunctionName>,\n): Promise<WriteContractResponse> {\n const data = encodeFunctionData({\n abi,\n args,\n functionName,\n } as unknown as EncodeFunctionDataArgs<TAbi, TFunctionName>)\n const hash = await sendTransaction(client, {\n data,\n to: address,\n ...request,\n } as unknown as SendTransactionArgs<TChain>)\n return hash\n}\n"],"mappings":"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","names":[]}