tempo.ts 0.11.1 → 0.12.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.
Files changed (228) hide show
  1. package/CHANGELOG.md +67 -4
  2. package/README.md +3 -34
  3. package/dist/server/Handler.d.ts +14 -14
  4. package/dist/server/Handler.d.ts.map +1 -1
  5. package/dist/server/Handler.js +16 -17
  6. package/dist/server/Handler.js.map +1 -1
  7. package/dist/wagmi/Actions/amm.d.ts +51 -51
  8. package/dist/wagmi/Actions/amm.d.ts.map +1 -1
  9. package/dist/wagmi/Actions/amm.js +37 -37
  10. package/dist/wagmi/Actions/amm.js.map +1 -1
  11. package/dist/wagmi/Actions/dex.d.ts +129 -129
  12. package/dist/wagmi/Actions/dex.d.ts.map +1 -1
  13. package/dist/wagmi/Actions/dex.js +73 -73
  14. package/dist/wagmi/Actions/dex.js.map +1 -1
  15. package/dist/wagmi/Actions/faucet.d.ts +9 -9
  16. package/dist/wagmi/Actions/faucet.d.ts.map +1 -1
  17. package/dist/wagmi/Actions/faucet.js +7 -7
  18. package/dist/wagmi/Actions/faucet.js.map +1 -1
  19. package/dist/wagmi/Actions/fee.d.ts +17 -17
  20. package/dist/wagmi/Actions/fee.d.ts.map +1 -1
  21. package/dist/wagmi/Actions/fee.js +10 -10
  22. package/dist/wagmi/Actions/fee.js.map +1 -1
  23. package/dist/wagmi/Actions/nonce.d.ts +9 -79
  24. package/dist/wagmi/Actions/nonce.d.ts.map +1 -1
  25. package/dist/wagmi/Actions/nonce.js +7 -89
  26. package/dist/wagmi/Actions/nonce.js.map +1 -1
  27. package/dist/wagmi/Actions/policy.d.ts +69 -70
  28. package/dist/wagmi/Actions/policy.d.ts.map +1 -1
  29. package/dist/wagmi/Actions/policy.js +43 -43
  30. package/dist/wagmi/Actions/policy.js.map +1 -1
  31. package/dist/wagmi/Actions/reward.d.ts +51 -51
  32. package/dist/wagmi/Actions/reward.d.ts.map +1 -1
  33. package/dist/wagmi/Actions/reward.js +31 -31
  34. package/dist/wagmi/Actions/reward.js.map +1 -1
  35. package/dist/wagmi/Actions/token.d.ts +238 -238
  36. package/dist/wagmi/Actions/token.d.ts.map +1 -1
  37. package/dist/wagmi/Actions/token.js +136 -136
  38. package/dist/wagmi/Actions/token.js.map +1 -1
  39. package/dist/wagmi/Connector.d.ts +2 -1
  40. package/dist/wagmi/Connector.d.ts.map +1 -1
  41. package/dist/wagmi/Connector.js +83 -22
  42. package/dist/wagmi/Connector.js.map +1 -1
  43. package/dist/wagmi/Hooks/nonce.d.ts +1 -52
  44. package/dist/wagmi/Hooks/nonce.d.ts.map +1 -1
  45. package/dist/wagmi/Hooks/nonce.js +1 -70
  46. package/dist/wagmi/Hooks/nonce.js.map +1 -1
  47. package/dist/wagmi/Hooks/policy.d.ts +0 -1
  48. package/dist/wagmi/Hooks/policy.d.ts.map +1 -1
  49. package/dist/wagmi/Hooks/policy.js.map +1 -1
  50. package/dist/wagmi/KeyManager.d.ts +6 -3
  51. package/dist/wagmi/KeyManager.d.ts.map +1 -1
  52. package/dist/wagmi/KeyManager.js +9 -4
  53. package/dist/wagmi/KeyManager.js.map +1 -1
  54. package/package.json +3 -13
  55. package/src/server/Handler.test.ts +2 -2
  56. package/src/server/Handler.ts +16 -17
  57. package/src/wagmi/Actions/amm.ts +63 -63
  58. package/src/wagmi/Actions/dex.test.ts +1 -1
  59. package/src/wagmi/Actions/dex.ts +153 -153
  60. package/src/wagmi/Actions/faucet.ts +11 -11
  61. package/src/wagmi/Actions/fee.ts +20 -20
  62. package/src/wagmi/Actions/nonce.test.ts +1 -64
  63. package/src/wagmi/Actions/nonce.ts +10 -142
  64. package/src/wagmi/Actions/policy.ts +83 -85
  65. package/src/wagmi/Actions/reward.ts +64 -61
  66. package/src/wagmi/Actions/token.ts +287 -283
  67. package/src/wagmi/Connector.ts +105 -31
  68. package/src/wagmi/Hooks/dex.test.ts +1 -1
  69. package/src/wagmi/Hooks/fee.test.ts +0 -6
  70. package/src/wagmi/Hooks/nonce.test.ts +1 -66
  71. package/src/wagmi/Hooks/nonce.ts +1 -114
  72. package/src/wagmi/Hooks/policy.ts +0 -2
  73. package/src/wagmi/KeyManager.ts +18 -5
  74. package/dist/chains.d.ts +0 -73
  75. package/dist/chains.d.ts.map +0 -1
  76. package/dist/chains.js +0 -51
  77. package/dist/chains.js.map +0 -1
  78. package/dist/viem/Abis.d.ts +0 -2649
  79. package/dist/viem/Abis.d.ts.map +0 -1
  80. package/dist/viem/Abis.js +0 -1677
  81. package/dist/viem/Abis.js.map +0 -1
  82. package/dist/viem/Account.d.ts +0 -244
  83. package/dist/viem/Account.d.ts.map +0 -1
  84. package/dist/viem/Account.js +0 -382
  85. package/dist/viem/Account.js.map +0 -1
  86. package/dist/viem/Actions/account.d.ts +0 -40
  87. package/dist/viem/Actions/account.d.ts.map +0 -1
  88. package/dist/viem/Actions/account.js +0 -86
  89. package/dist/viem/Actions/account.js.map +0 -1
  90. package/dist/viem/Actions/amm.d.ts +0 -1991
  91. package/dist/viem/Actions/amm.d.ts.map +0 -1
  92. package/dist/viem/Actions/amm.js +0 -814
  93. package/dist/viem/Actions/amm.js.map +0 -1
  94. package/dist/viem/Actions/dex.d.ts +0 -3900
  95. package/dist/viem/Actions/dex.d.ts.map +0 -1
  96. package/dist/viem/Actions/dex.js +0 -1414
  97. package/dist/viem/Actions/dex.js.map +0 -1
  98. package/dist/viem/Actions/faucet.d.ts +0 -69
  99. package/dist/viem/Actions/faucet.d.ts.map +0 -1
  100. package/dist/viem/Actions/faucet.js +0 -73
  101. package/dist/viem/Actions/faucet.js.map +0 -1
  102. package/dist/viem/Actions/fee.d.ts +0 -360
  103. package/dist/viem/Actions/fee.d.ts.map +0 -1
  104. package/dist/viem/Actions/fee.js +0 -237
  105. package/dist/viem/Actions/fee.js.map +0 -1
  106. package/dist/viem/Actions/index.d.ts +0 -10
  107. package/dist/viem/Actions/index.d.ts.map +0 -1
  108. package/dist/viem/Actions/index.js +0 -10
  109. package/dist/viem/Actions/index.js.map +0 -1
  110. package/dist/viem/Actions/nonce.d.ts +0 -257
  111. package/dist/viem/Actions/nonce.d.ts.map +0 -1
  112. package/dist/viem/Actions/nonce.js +0 -228
  113. package/dist/viem/Actions/nonce.js.map +0 -1
  114. package/dist/viem/Actions/policy.d.ts +0 -1680
  115. package/dist/viem/Actions/policy.d.ts.map +0 -1
  116. package/dist/viem/Actions/policy.js +0 -875
  117. package/dist/viem/Actions/policy.js.map +0 -1
  118. package/dist/viem/Actions/reward.d.ts +0 -2422
  119. package/dist/viem/Actions/reward.d.ts.map +0 -1
  120. package/dist/viem/Actions/reward.js +0 -651
  121. package/dist/viem/Actions/reward.js.map +0 -1
  122. package/dist/viem/Actions/token.d.ts +0 -16007
  123. package/dist/viem/Actions/token.d.ts.map +0 -1
  124. package/dist/viem/Actions/token.js +0 -2936
  125. package/dist/viem/Actions/token.js.map +0 -1
  126. package/dist/viem/Addresses.d.ts +0 -9
  127. package/dist/viem/Addresses.d.ts.map +0 -1
  128. package/dist/viem/Addresses.js +0 -9
  129. package/dist/viem/Addresses.js.map +0 -1
  130. package/dist/viem/Chain.d.ts +0 -451
  131. package/dist/viem/Chain.d.ts.map +0 -1
  132. package/dist/viem/Chain.js +0 -96
  133. package/dist/viem/Chain.js.map +0 -1
  134. package/dist/viem/Decorator.d.ts +0 -2783
  135. package/dist/viem/Decorator.d.ts.map +0 -1
  136. package/dist/viem/Decorator.js +0 -137
  137. package/dist/viem/Decorator.js.map +0 -1
  138. package/dist/viem/Formatters.d.ts +0 -10
  139. package/dist/viem/Formatters.d.ts.map +0 -1
  140. package/dist/viem/Formatters.js +0 -104
  141. package/dist/viem/Formatters.js.map +0 -1
  142. package/dist/viem/P256.d.ts +0 -2
  143. package/dist/viem/P256.d.ts.map +0 -1
  144. package/dist/viem/P256.js +0 -2
  145. package/dist/viem/P256.js.map +0 -1
  146. package/dist/viem/Secp256k1.d.ts +0 -2
  147. package/dist/viem/Secp256k1.d.ts.map +0 -1
  148. package/dist/viem/Secp256k1.js +0 -2
  149. package/dist/viem/Secp256k1.js.map +0 -1
  150. package/dist/viem/Storage.d.ts +0 -24
  151. package/dist/viem/Storage.d.ts.map +0 -1
  152. package/dist/viem/Storage.js +0 -68
  153. package/dist/viem/Storage.js.map +0 -1
  154. package/dist/viem/TokenIds.d.ts +0 -2
  155. package/dist/viem/TokenIds.d.ts.map +0 -1
  156. package/dist/viem/TokenIds.js +0 -2
  157. package/dist/viem/TokenIds.js.map +0 -1
  158. package/dist/viem/Transaction.d.ts +0 -76
  159. package/dist/viem/Transaction.d.ts.map +0 -1
  160. package/dist/viem/Transaction.js +0 -176
  161. package/dist/viem/Transaction.js.map +0 -1
  162. package/dist/viem/Transport.d.ts +0 -33
  163. package/dist/viem/Transport.d.ts.map +0 -1
  164. package/dist/viem/Transport.js +0 -138
  165. package/dist/viem/Transport.js.map +0 -1
  166. package/dist/viem/WebAuthnP256.d.ts +0 -82
  167. package/dist/viem/WebAuthnP256.d.ts.map +0 -1
  168. package/dist/viem/WebAuthnP256.js +0 -97
  169. package/dist/viem/WebAuthnP256.js.map +0 -1
  170. package/dist/viem/WebCryptoP256.d.ts +0 -2
  171. package/dist/viem/WebCryptoP256.d.ts.map +0 -1
  172. package/dist/viem/WebCryptoP256.js +0 -2
  173. package/dist/viem/WebCryptoP256.js.map +0 -1
  174. package/dist/viem/index.d.ts +0 -26
  175. package/dist/viem/index.d.ts.map +0 -1
  176. package/dist/viem/index.js +0 -17
  177. package/dist/viem/index.js.map +0 -1
  178. package/dist/viem/internal/types.d.ts +0 -20
  179. package/dist/viem/internal/types.d.ts.map +0 -1
  180. package/dist/viem/internal/types.js +0 -2
  181. package/dist/viem/internal/types.js.map +0 -1
  182. package/dist/viem/internal/utils.d.ts +0 -14
  183. package/dist/viem/internal/utils.d.ts.map +0 -1
  184. package/dist/viem/internal/utils.js +0 -33
  185. package/dist/viem/internal/utils.js.map +0 -1
  186. package/src/chains.ts +0 -54
  187. package/src/viem/Abis.ts +0 -1688
  188. package/src/viem/Account.test.ts +0 -444
  189. package/src/viem/Account.ts +0 -601
  190. package/src/viem/Actions/account.test.ts +0 -414
  191. package/src/viem/Actions/account.ts +0 -106
  192. package/src/viem/Actions/amm.test.ts +0 -381
  193. package/src/viem/Actions/amm.ts +0 -1227
  194. package/src/viem/Actions/dex.test.ts +0 -1549
  195. package/src/viem/Actions/dex.ts +0 -2150
  196. package/src/viem/Actions/faucet.ts +0 -121
  197. package/src/viem/Actions/fee.test.ts +0 -259
  198. package/src/viem/Actions/fee.ts +0 -372
  199. package/src/viem/Actions/index.ts +0 -9
  200. package/src/viem/Actions/nonce.test.ts +0 -206
  201. package/src/viem/Actions/nonce.ts +0 -347
  202. package/src/viem/Actions/policy.test.ts +0 -534
  203. package/src/viem/Actions/policy.ts +0 -1335
  204. package/src/viem/Actions/reward.test.ts +0 -434
  205. package/src/viem/Actions/reward.ts +0 -944
  206. package/src/viem/Actions/token.test.ts +0 -3029
  207. package/src/viem/Actions/token.ts +0 -4458
  208. package/src/viem/Addresses.ts +0 -9
  209. package/src/viem/Chain.bench-d.ts +0 -12
  210. package/src/viem/Chain.test.ts +0 -168
  211. package/src/viem/Chain.ts +0 -157
  212. package/src/viem/Decorator.bench-d.ts +0 -11
  213. package/src/viem/Decorator.test.ts +0 -39
  214. package/src/viem/Decorator.ts +0 -3179
  215. package/src/viem/Formatters.ts +0 -164
  216. package/src/viem/P256.ts +0 -1
  217. package/src/viem/Secp256k1.ts +0 -1
  218. package/src/viem/Storage.ts +0 -110
  219. package/src/viem/TokenIds.ts +0 -1
  220. package/src/viem/Transaction.ts +0 -382
  221. package/src/viem/Transport.ts +0 -191
  222. package/src/viem/WebAuthnP256.ts +0 -146
  223. package/src/viem/WebCryptoP256.ts +0 -1
  224. package/src/viem/e2e.test.ts +0 -1602
  225. package/src/viem/index.ts +0 -30
  226. package/src/viem/internal/types.ts +0 -69
  227. package/src/viem/internal/utils.ts +0 -58
  228. package/src/wagmi/internal/types.ts +0 -16
@@ -1,28 +1,27 @@
1
+ import * as idb from 'idb-keyval'
1
2
  import * as Address from 'ox/Address'
2
3
  import type * as Hex from 'ox/Hex'
3
4
  import * as PublicKey from 'ox/PublicKey'
4
5
  import { KeyAuthorization, SignatureEnvelope } from 'ox/tempo'
5
6
  import {
6
7
  createClient,
8
+ defineChain,
7
9
  type EIP1193Provider,
8
10
  getAddress,
9
11
  type LocalAccount,
10
12
  SwitchChainError,
11
13
  } from 'viem'
12
14
  import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
15
+ import {
16
+ Account,
17
+ WebAuthnP256,
18
+ WebCryptoP256,
19
+ walletNamespaceCompat,
20
+ } from 'viem/tempo'
13
21
  import { ChainNotConfiguredError, createConnector } from 'wagmi'
14
22
  import type { OneOf } from '../internal/types.js'
15
- import * as Account from '../viem/Account.js'
16
- import type * as tempo_Chain from '../viem/Chain.js'
17
- import { normalizeValue } from '../viem/internal/utils.js'
18
- import * as Storage from '../viem/Storage.js'
19
- import { walletNamespaceCompat } from '../viem/Transport.js'
20
- import * as WebAuthnP256 from '../viem/WebAuthnP256.js'
21
- import * as WebCryptoP256 from '../viem/WebCryptoP256.js'
22
23
  import type * as KeyManager from './KeyManager.js'
23
24
 
24
- type Chain = ReturnType<ReturnType<typeof tempo_Chain.define>>
25
-
26
25
  /**
27
26
  * Connector for a Secp256k1 EOA.
28
27
  *
@@ -180,10 +179,14 @@ export function dangerous_secp256k1(
180
179
  const transport = transports[chain.id]
181
180
  if (!transport) throw new ChainNotConfiguredError()
182
181
 
182
+ if (!account) throw new Error('account not found.')
183
+
183
184
  return createClient({
184
185
  account,
185
- chain: chain as Chain,
186
- transport: walletNamespaceCompat(transport),
186
+ chain,
187
+ transport: walletNamespaceCompat(transport, {
188
+ account,
189
+ }),
187
190
  })
188
191
  },
189
192
  async getProvider({ chainId } = {}) {
@@ -221,12 +224,6 @@ export function webAuthn(options: webAuthn.Parameters) {
221
224
  return undefined
222
225
  })()
223
226
 
224
- const idbStorage = Storage.idb<{
225
- [key: `accessKey:${string}`]: WebCryptoP256.createKeyPair.ReturnType & {
226
- keyAuthorization: KeyAuthorization.KeyAuthorization
227
- }
228
- }>()
229
-
230
227
  type Properties = {
231
228
  connect<withCapabilities extends boolean = false>(parameters: {
232
229
  chainId?: number | undefined
@@ -249,6 +246,9 @@ export function webAuthn(options: webAuthn.Parameters) {
249
246
  }
250
247
  type Provider = Pick<EIP1193Provider, 'request'>
251
248
  type StorageItem = {
249
+ [
250
+ key: `pendingKeyAuthorization:${string}`
251
+ ]: KeyAuthorization.KeyAuthorization
252
252
  'webAuthn.activeCredential': WebAuthnP256.P256Credential
253
253
  'webAuthn.lastActiveCredential': WebAuthnP256.P256Credential
254
254
  }
@@ -329,7 +329,7 @@ export function webAuthn(options: webAuthn.Parameters) {
329
329
  const address = Address.fromPublicKey(
330
330
  PublicKey.fromHex(credential.publicKey),
331
331
  )
332
- return await idbStorage.getItem(`accessKey:${address}`)
332
+ return await idb.get(`accessKey:${address}`)
333
333
  })()
334
334
 
335
335
  // If the access key provisioning is not in strict mode, return the credential and key pair (if exists).
@@ -414,14 +414,11 @@ export function webAuthn(options: webAuthn.Parameters) {
414
414
  normalizeValue(credential),
415
415
  )
416
416
 
417
- account = Account.fromWebAuthnP256(credential, {
418
- storage: Storage.from(config.storage as never),
419
- })
417
+ account = Account.fromWebAuthnP256(credential)
420
418
 
421
419
  if (keyPair) {
422
420
  accessKey = Account.fromWebCryptoP256(keyPair, {
423
421
  access: account,
424
- storage: Storage.from(config.storage as never),
425
422
  })
426
423
 
427
424
  // If we are reconnecting, check if the access key is expired.
@@ -432,7 +429,9 @@ export function webAuthn(options: webAuthn.Parameters) {
432
429
  keyPair.keyAuthorization.expiry < Date.now() / 1000
433
430
  ) {
434
431
  // remove any pending key authorizations from storage.
435
- await account?.storage.removeItem('pendingKeyAuthorization')
432
+ await config?.storage?.removeItem(
433
+ `pendingKeyAuthorization:${account.address.toLowerCase()}`,
434
+ )
436
435
 
437
436
  const message = `Access key expired (on ${new Date(keyPair.keyAuthorization.expiry * 1000).toLocaleString()}).`
438
437
  accessKey = undefined
@@ -452,11 +451,14 @@ export function webAuthn(options: webAuthn.Parameters) {
452
451
  keyAuthorization ??
453
452
  (await account.signKeyAuthorization(accessKey, accessKeyOptions))
454
453
 
455
- await account.storage.setItem('pendingKeyAuthorization', keyAuth)
456
- await idbStorage.setItem(
457
- `accessKey:${account.address.toLowerCase()}`,
458
- { ...keyPair, keyAuthorization: keyAuth },
454
+ await config?.storage?.setItem(
455
+ `pendingKeyAuthorization:${account.address.toLowerCase()}`,
456
+ keyAuth,
459
457
  )
458
+ await idb.set(`accessKey:${account.address.toLowerCase()}`, {
459
+ ...keyPair,
460
+ keyAuthorization: keyAuth,
461
+ })
460
462
  }
461
463
  // If we are granting an access key and it is in strict mode, throw an error if the access key is not provisioned.
462
464
  } else if (accessKeyOptions?.strict) {
@@ -528,7 +530,7 @@ export function webAuthn(options: webAuthn.Parameters) {
528
530
  const targetAccount = await (async () => {
529
531
  if (!accessKey) return account
530
532
 
531
- const item = await idbStorage.getItem(
533
+ const item = await idb.get(
532
534
  `accessKey:${accessKey.address.toLowerCase()}`,
533
535
  )
534
536
  if (
@@ -536,7 +538,9 @@ export function webAuthn(options: webAuthn.Parameters) {
536
538
  item.keyAuthorization.expiry < Date.now() / 1000
537
539
  ) {
538
540
  // remove any pending key authorizations from storage.
539
- await account?.storage.removeItem('pendingKeyAuthorization')
541
+ await config?.storage?.removeItem(
542
+ `pendingKeyAuthorization:${accessKey.address.toLowerCase()}`,
543
+ )
540
544
 
541
545
  const message = `Access key expired (on ${new Date(item.keyAuthorization.expiry * 1000).toLocaleString()}).`
542
546
 
@@ -552,11 +556,60 @@ export function webAuthn(options: webAuthn.Parameters) {
552
556
  }
553
557
  return accessKey
554
558
  })()
559
+ if (!targetAccount) throw new Error('account not found.')
560
+
561
+ const targetChain = defineChain({
562
+ ...chain,
563
+ async prepareTransactionRequest(args, { phase }) {
564
+ const keyAuthorization = await (async () => {
565
+ {
566
+ const keyAuthorization = (
567
+ args as {
568
+ keyAuthorization?:
569
+ | KeyAuthorization.KeyAuthorization
570
+ | undefined
571
+ }
572
+ ).keyAuthorization
573
+ if (keyAuthorization) return keyAuthorization
574
+ }
575
+
576
+ const keyAuthorization = await config.storage?.getItem(
577
+ `pendingKeyAuthorization:${targetAccount?.address.toLowerCase()}`,
578
+ )
579
+ await config.storage?.removeItem(
580
+ `pendingKeyAuthorization:${targetAccount?.address.toLowerCase()}`,
581
+ )
582
+ return keyAuthorization
583
+ })()
584
+
585
+ const [prepareTransactionRequestFn, options] = (() => {
586
+ if (!chain.prepareTransactionRequest) return [undefined, undefined]
587
+ if (typeof chain.prepareTransactionRequest === 'function')
588
+ return [chain.prepareTransactionRequest, undefined]
589
+ return chain.prepareTransactionRequest
590
+ })()
591
+
592
+ const request = await (async () => {
593
+ if (!prepareTransactionRequestFn) return {}
594
+ if (!options || options?.runAt?.includes(phase))
595
+ return await prepareTransactionRequestFn(args, { phase })
596
+ return {}
597
+ })()
598
+
599
+ return {
600
+ ...args,
601
+ ...request,
602
+ keyAuthorization,
603
+ }
604
+ },
605
+ })
555
606
 
556
607
  return createClient({
557
608
  account: targetAccount,
558
- chain: chain as Chain,
559
- transport: walletNamespaceCompat(transport),
609
+ chain: targetChain,
610
+ transport: walletNamespaceCompat(transport, {
611
+ account: targetAccount,
612
+ }),
560
613
  })
561
614
  },
562
615
  async getProvider({ chainId } = {}) {
@@ -594,3 +647,24 @@ export namespace webAuthn {
594
647
  rpId?: string | undefined
595
648
  }
596
649
  }
650
+
651
+ /**
652
+ * Normalizes a value into a structured-clone compatible format.
653
+ *
654
+ * @see https://developer.mozilla.org/en-US/docs/Web/API/Window/structuredClone
655
+ */
656
+ function normalizeValue<type>(value: type): type {
657
+ if (Array.isArray(value)) return value.map(normalizeValue) as never
658
+ if (typeof value === 'function') return undefined as never
659
+ if (typeof value !== 'object' || value === null) return value
660
+ if (Object.getPrototypeOf(value) !== Object.prototype)
661
+ try {
662
+ return structuredClone(value)
663
+ } catch {
664
+ return undefined as never
665
+ }
666
+
667
+ const normalized: Record<string, unknown> = {}
668
+ for (const [k, v] of Object.entries(value)) normalized[k] = normalizeValue(v)
669
+ return normalized as never
670
+ }
@@ -1,6 +1,6 @@
1
- import { Tick } from 'tempo.ts/viem'
2
1
  import { Actions, Hooks } from 'tempo.ts/wagmi'
3
2
  import { type Address, isAddress, parseUnits } from 'viem'
3
+ import { Tick } from 'viem/tempo'
4
4
  import { describe, expect, test, vi } from 'vitest'
5
5
  import { useConnect } from 'wagmi'
6
6
  import { addresses } from '../../../test/config.js'
@@ -100,7 +100,6 @@ describe('useUserToken', () => {
100
100
  {
101
101
  "account": {
102
102
  "address": "0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266",
103
- "assignKeyAuthorization": [Function],
104
103
  "keyType": "secp256k1",
105
104
  "publicKey": "0x8318535b54105d4a7aae60c08fc45f9687181b4fdfc625bd1a753fa7397fed753547f11ca8696646f2f3acb08e31016afac23e630c5d11f59f61fef57b0d2aa5",
106
105
  "sign": [Function],
@@ -110,11 +109,6 @@ describe('useUserToken', () => {
110
109
  "signTransaction": [Function],
111
110
  "signTypedData": [Function],
112
111
  "source": "root",
113
- "storage": {
114
- "getItem": [Function],
115
- "removeItem": [Function],
116
- "setItem": [Function],
117
- },
118
112
  "type": "local",
119
113
  },
120
114
  "chainId": 1337,
@@ -6,7 +6,7 @@ import { config, renderHook } from '../../../test/wagmi/config.js'
6
6
  import * as hooks from './nonce.js'
7
7
  import * as tokenHooks from './token.js'
8
8
 
9
- const { useNonceKeyCount, useNonce } = hooks
9
+ const { useNonce } = hooks
10
10
 
11
11
  const account = accounts[0]
12
12
  const account2 = accounts[1]
@@ -90,35 +90,6 @@ describe('useNonce', () => {
90
90
  })
91
91
  })
92
92
 
93
- describe('useNonceKeyCount', () => {
94
- test('default', async () => {
95
- let testAccount: Address | undefined
96
-
97
- const { result, rerender } = await renderHook(() =>
98
- useNonceKeyCount({ account: testAccount }),
99
- )
100
-
101
- await vi.waitFor(() => result.current.fetchStatus === 'fetching')
102
-
103
- // Should be disabled when account is undefined
104
- expect(result.current.data).toBeUndefined()
105
- expect(result.current.isPending).toBe(true)
106
- expect(result.current.isEnabled).toBe(false)
107
-
108
- // Set account
109
- testAccount = account.address
110
- rerender()
111
-
112
- await vi.waitFor(() => expect(result.current.isSuccess).toBeTruthy(), {
113
- timeout: 5_000,
114
- })
115
-
116
- // Should now be enabled and have data
117
- expect(result.current.isEnabled).toBe(true)
118
- expect(result.current.data).toBe(0n)
119
- })
120
- })
121
-
122
93
  describe('useWatchNonceIncremented', () => {
123
94
  test('default', async () => {
124
95
  const { result: connectResult } = await renderHook(() => ({
@@ -169,39 +140,3 @@ describe('useWatchNonceIncremented', () => {
169
140
  expect(events[1]?.newNonce).toBe(2n)
170
141
  })
171
142
  })
172
-
173
- describe('useWatchActiveKeyCountChanged', () => {
174
- test('default', async () => {
175
- const { result: connectResult } = await renderHook(() => ({
176
- connect: useConnect(),
177
- transferSync: tokenHooks.useTransferSync(),
178
- }))
179
-
180
- await connectResult.current.connect.connectAsync({
181
- connector: config.connectors[0]!,
182
- })
183
-
184
- const events: any[] = []
185
- await renderHook(() =>
186
- hooks.useWatchActiveKeyCountChanged({
187
- onActiveKeyCountChanged(args) {
188
- events.push(args)
189
- },
190
- }),
191
- )
192
-
193
- await connectResult.current.transferSync.mutateAsync({
194
- to: account2.address,
195
- amount: 1n,
196
- token: 1n,
197
- nonceKey: 10n,
198
- nonce: 0,
199
- })
200
-
201
- await vi.waitUntil(() => events.length >= 1)
202
-
203
- expect(events).toHaveLength(1)
204
- expect(events[0]?.account).toBe(account.address)
205
- expect(events[0]?.newCount).toBe(2n)
206
- })
207
- })
@@ -6,12 +6,7 @@ import type { ConfigParameter, QueryParameter } from 'wagmi/internal'
6
6
  import { type UseQueryReturnType, useQuery } from 'wagmi/query'
7
7
 
8
8
  import type { ExactPartial, UnionCompute } from '../../internal/types.js'
9
- import {
10
- getNonce,
11
- getNonceKeyCount,
12
- watchActiveKeyCountChanged,
13
- watchNonceIncremented,
14
- } from '../Actions/nonce.js'
9
+ import { getNonce, watchNonceIncremented } from '../Actions/nonce.js'
15
10
 
16
11
  /**
17
12
  * Hook for getting the nonce for an account and nonce key.
@@ -74,67 +69,6 @@ export declare namespace useNonce {
74
69
  UseQueryReturnType<selectData, Error>
75
70
  }
76
71
 
77
- /**
78
- * Hook for getting the number of active nonce keys for an account.
79
- *
80
- * @example
81
- * ```tsx
82
- * import { Hooks } from 'tempo.ts/wagmi'
83
- *
84
- * function App() {
85
- * const { data, isLoading } = Hooks.nonce.useNonceKeyCount({
86
- * account: '0x...',
87
- * })
88
- *
89
- * if (isLoading) return <div>Loading...</div>
90
- * return <div>Active keys: {data?.toString()}</div>
91
- * }
92
- * ```
93
- *
94
- * @param parameters - Parameters.
95
- * @returns Query result with active nonce key count.
96
- */
97
- export function useNonceKeyCount<
98
- config extends Config = ResolvedRegister['config'],
99
- selectData = getNonceKeyCount.ReturnValue,
100
- >(parameters: useNonceKeyCount.Parameters<config, selectData> = {}) {
101
- const { account, query = {} } = parameters
102
-
103
- const config = useConfig(parameters)
104
- const chainId = useChainId({ config })
105
-
106
- const options = getNonceKeyCount.queryOptions(config, {
107
- ...parameters,
108
- chainId: parameters.chainId ?? chainId,
109
- query: undefined,
110
- })
111
- const enabled = Boolean(account && (query.enabled ?? true))
112
-
113
- return useQuery({ ...query, ...options, enabled })
114
- }
115
-
116
- export declare namespace useNonceKeyCount {
117
- export type Parameters<
118
- config extends Config = ResolvedRegister['config'],
119
- selectData = getNonceKeyCount.ReturnValue,
120
- > = ConfigParameter<config> &
121
- QueryParameter<
122
- getNonceKeyCount.ReturnValue,
123
- DefaultError,
124
- selectData,
125
- getNonceKeyCount.QueryKey<config>
126
- > &
127
- ExactPartial<
128
- Omit<
129
- getNonceKeyCount.queryOptions.Parameters<config, selectData>,
130
- 'query'
131
- >
132
- >
133
-
134
- export type ReturnValue<selectData = getNonceKeyCount.ReturnValue> =
135
- UseQueryReturnType<selectData, Error>
136
- }
137
-
138
72
  /**
139
73
  * Hook for watching nonce incremented events.
140
74
  *
@@ -181,50 +115,3 @@ export declare namespace useWatchNonceIncremented {
181
115
  ConfigParameter<config> & { enabled?: boolean | undefined }
182
116
  >
183
117
  }
184
-
185
- /**
186
- * Hook for watching active key count changed events.
187
- *
188
- * @example
189
- * ```tsx
190
- * import { Hooks } from 'tempo.ts/wagmi'
191
- *
192
- * function App() {
193
- * Hooks.nonce.useWatchActiveKeyCountChanged({
194
- * onActiveKeyCountChanged(args, log) {
195
- * console.log('Active key count changed:', args)
196
- * },
197
- * })
198
- *
199
- * return <div>Watching for active key count changes...</div>
200
- * }
201
- * ```
202
- *
203
- * @param parameters - Parameters.
204
- */
205
- export function useWatchActiveKeyCountChanged<
206
- config extends Config = ResolvedRegister['config'],
207
- >(parameters: useWatchActiveKeyCountChanged.Parameters<config> = {}) {
208
- const { enabled = true, onActiveKeyCountChanged, ...rest } = parameters
209
-
210
- const config = useConfig({ config: parameters.config })
211
- const configChainId = useChainId({ config })
212
- const chainId = parameters.chainId ?? configChainId
213
-
214
- useEffect(() => {
215
- if (!enabled) return
216
- if (!onActiveKeyCountChanged) return
217
- return watchActiveKeyCountChanged(config, {
218
- ...rest,
219
- chainId,
220
- onActiveKeyCountChanged,
221
- })
222
- }, [config, enabled, onActiveKeyCountChanged, chainId, rest])
223
- }
224
-
225
- export declare namespace useWatchActiveKeyCountChanged {
226
- type Parameters<config extends Config = Config> = UnionCompute<
227
- ExactPartial<watchActiveKeyCountChanged.Parameters<config>> &
228
- ConfigParameter<config> & { enabled?: boolean | undefined }
229
- >
230
- }
@@ -14,8 +14,6 @@ import {
14
14
  import type { ExactPartial, UnionCompute } from '../../internal/types.js'
15
15
  import * as Actions from '../Actions/policy.js'
16
16
 
17
- export type { PolicyType } from '../Actions/policy.js'
18
-
19
17
  /**
20
18
  * Hook for creating a new policy.
21
19
  *
@@ -1,7 +1,11 @@
1
1
  import type * as Hex from 'ox/Hex'
2
2
  import * as Json from 'ox/Json'
3
+ import {
4
+ type CreateStorageParameters,
5
+ createStorage,
6
+ type Storage,
7
+ } from 'wagmi'
3
8
  import type * as Handler from '../server/Handler.js'
4
- import * as Storage from '../viem/Storage.js'
5
9
 
6
10
  export type KeyManager = {
7
11
  /** Function to fetch create options for WebAuthn. */
@@ -24,8 +28,7 @@ export function from<manager extends KeyManager>(manager: manager): manager {
24
28
  }
25
29
 
26
30
  /** Instantiates a key manager from a Storage instance. */
27
- export function fromStorage(s: Storage.Storage): KeyManager {
28
- const storage = Storage.from(s, { key: 'webAuthn:publicKey' })
31
+ export function fromStorage(storage: Storage): KeyManager {
29
32
  return from({
30
33
  async getPublicKey(parameters) {
31
34
  const publicKey = await storage.getItem(parameters.credential.id)
@@ -53,8 +56,18 @@ export function fromStorage(s: Storage.Storage): KeyManager {
53
56
  *
54
57
  * @deprecated
55
58
  */
56
- export function localStorage(options: Storage.localStorage.Options = {}) {
57
- return fromStorage(Storage.localStorage(options))
59
+ export function localStorage(options: localStorage.Options = {}) {
60
+ const { key = 'wagmi.keyManager' } = options
61
+ const storage = createStorage({
62
+ ...options,
63
+ key,
64
+ storage: typeof window !== 'undefined' ? window.localStorage : undefined,
65
+ })
66
+ return fromStorage(storage)
67
+ }
68
+
69
+ export namespace localStorage {
70
+ export type Options = Omit<CreateStorageParameters, 'storage'>
58
71
  }
59
72
 
60
73
  /**
package/dist/chains.d.ts DELETED
@@ -1,73 +0,0 @@
1
- import * as Chain from './viem/Chain.js';
2
- export declare const tempoDevnet: Chain.define.ReturnValue<{
3
- readonly id: 1337;
4
- readonly name: "Tempo Devnet";
5
- readonly nativeCurrency: {
6
- readonly name: "USD";
7
- readonly symbol: "USD";
8
- readonly decimals: 6;
9
- };
10
- readonly rpcUrls: {
11
- readonly default: {
12
- readonly http: readonly ["https://rpc.devnet.tempo.xyz"];
13
- readonly webSocket: readonly ["wss://rpc.devnet.tempo.xyz"];
14
- };
15
- };
16
- }>;
17
- export declare const tempoLocal: Chain.define.ReturnValue<{
18
- readonly id: 1337;
19
- readonly name: "Tempo";
20
- readonly nativeCurrency: {
21
- readonly name: "USD";
22
- readonly symbol: "USD";
23
- readonly decimals: 6;
24
- };
25
- readonly rpcUrls: {
26
- readonly default: {
27
- readonly http: readonly ["http://localhost:8545"];
28
- };
29
- };
30
- }>;
31
- export declare const tempoTestnet: Chain.define.ReturnValue<{
32
- readonly id: 42429;
33
- readonly blockExplorers: {
34
- readonly default: {
35
- readonly name: "Tempo Explorer";
36
- readonly url: "https://explore.tempo.xyz";
37
- };
38
- };
39
- readonly name: "Tempo Testnet";
40
- readonly nativeCurrency: {
41
- readonly name: "USD";
42
- readonly symbol: "USD";
43
- readonly decimals: 6;
44
- };
45
- readonly rpcUrls: {
46
- readonly default: {
47
- readonly http: readonly ["https://rpc.testnet.tempo.xyz"];
48
- readonly webSocket: readonly ["wss://rpc.testnet.tempo.xyz"];
49
- };
50
- };
51
- }>;
52
- export declare const tempo: Chain.define.ReturnValue<{
53
- readonly id: 42429;
54
- readonly blockExplorers: {
55
- readonly default: {
56
- readonly name: "Tempo Explorer";
57
- readonly url: "https://explore.tempo.xyz";
58
- };
59
- };
60
- readonly name: "Tempo Testnet";
61
- readonly nativeCurrency: {
62
- readonly name: "USD";
63
- readonly symbol: "USD";
64
- readonly decimals: 6;
65
- };
66
- readonly rpcUrls: {
67
- readonly default: {
68
- readonly http: readonly ["https://rpc.testnet.tempo.xyz"];
69
- readonly webSocket: readonly ["wss://rpc.testnet.tempo.xyz"];
70
- };
71
- };
72
- }>;
73
- //# sourceMappingURL=chains.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chains.d.ts","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC,eAAO,MAAM,WAAW;;;;;;;;;;;;;;EActB,CAAA;AAEF,eAAO,MAAM,UAAU;;;;;;;;;;;;;EAWrB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;EAoBvB,CAAA;AAEF,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;EAA6B,CAAA"}
package/dist/chains.js DELETED
@@ -1,51 +0,0 @@
1
- import * as Chain from './viem/Chain.js';
2
- export const tempoDevnet = /*#__PURE__*/ Chain.define({
3
- id: 1337,
4
- name: 'Tempo Devnet',
5
- nativeCurrency: {
6
- name: 'USD',
7
- symbol: 'USD',
8
- decimals: 6,
9
- },
10
- rpcUrls: {
11
- default: {
12
- http: ['https://rpc.devnet.tempo.xyz'],
13
- webSocket: ['wss://rpc.devnet.tempo.xyz'],
14
- },
15
- },
16
- });
17
- export const tempoLocal = /*#__PURE__*/ Chain.define({
18
- id: 1337,
19
- name: 'Tempo',
20
- nativeCurrency: {
21
- name: 'USD',
22
- symbol: 'USD',
23
- decimals: 6,
24
- },
25
- rpcUrls: {
26
- default: { http: ['http://localhost:8545'] },
27
- },
28
- });
29
- export const tempoTestnet = /*#__PURE__*/ Chain.define({
30
- id: 42429,
31
- blockExplorers: {
32
- default: {
33
- name: 'Tempo Explorer',
34
- url: 'https://explore.tempo.xyz',
35
- },
36
- },
37
- name: 'Tempo Testnet',
38
- nativeCurrency: {
39
- name: 'USD',
40
- symbol: 'USD',
41
- decimals: 6,
42
- },
43
- rpcUrls: {
44
- default: {
45
- http: ['https://rpc.testnet.tempo.xyz'],
46
- webSocket: ['wss://rpc.testnet.tempo.xyz'],
47
- },
48
- },
49
- });
50
- export const tempo = /*#__PURE__*/ tempoTestnet;
51
- //# sourceMappingURL=chains.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chains.js","sourceRoot":"","sources":["../src/chains.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,iBAAiB,CAAA;AAExC,MAAM,CAAC,MAAM,WAAW,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IACpD,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,cAAc;IACpB,cAAc,EAAE;QACd,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,8BAA8B,CAAC;YACtC,SAAS,EAAE,CAAC,4BAA4B,CAAC;SAC1C;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IACnD,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,OAAO;IACb,cAAc,EAAE;QACd,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,EAAE;QACP,OAAO,EAAE,EAAE,IAAI,EAAE,CAAC,uBAAuB,CAAC,EAAE;KAC7C;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;IACrD,EAAE,EAAE,KAAK;IACT,cAAc,EAAE;QACd,OAAO,EAAE;YACP,IAAI,EAAE,gBAAgB;YACtB,GAAG,EAAE,2BAA2B;SACjC;KACF;IACD,IAAI,EAAE,eAAe;IACrB,cAAc,EAAE;QACd,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,KAAK;QACb,QAAQ,EAAE,CAAC;KACZ;IACD,OAAO,EAAE;QACP,OAAO,EAAE;YACP,IAAI,EAAE,CAAC,+BAA+B,CAAC;YACvC,SAAS,EAAE,CAAC,6BAA6B,CAAC;SAC3C;KACF;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,KAAK,GAAG,aAAa,CAAC,YAAY,CAAA"}