rise-wallet 0.2.29 → 0.3.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 (135) hide show
  1. package/README.md +153 -15
  2. package/dist/cli/bin/commands-DupUUwJ9.js +50 -0
  3. package/dist/cli/bin/index.js +1 -1
  4. package/dist/core/Chains.d.ts +285 -12
  5. package/dist/core/Chains.d.ts.map +1 -1
  6. package/dist/core/Dialog.d.ts +2 -2
  7. package/dist/core/Dialog.d.ts.map +1 -1
  8. package/dist/core/Dialog.js +10 -2
  9. package/dist/core/Dialog.js.map +1 -1
  10. package/dist/core/Porto.d.ts +476 -26
  11. package/dist/core/Porto.d.ts.map +1 -1
  12. package/dist/core/Porto.js +1 -1
  13. package/dist/core/Porto.js.map +1 -1
  14. package/dist/core/Transport.d.ts +2 -2
  15. package/dist/core/Transport.js +2 -2
  16. package/dist/core/Transport.js.map +1 -1
  17. package/dist/core/internal/_generated/chains.d.ts +1 -1
  18. package/dist/core/internal/_generated/chains.d.ts.map +1 -1
  19. package/dist/core/internal/_generated/chains.js +1 -1
  20. package/dist/core/internal/_generated/chains.js.map +1 -1
  21. package/dist/core/internal/mode.d.ts +4 -0
  22. package/dist/core/internal/mode.d.ts.map +1 -1
  23. package/dist/core/internal/mode.js.map +1 -1
  24. package/dist/core/internal/modes/dialog.d.ts +47 -7
  25. package/dist/core/internal/modes/dialog.d.ts.map +1 -1
  26. package/dist/core/internal/modes/reactNative.d.ts +187 -10
  27. package/dist/core/internal/modes/reactNative.d.ts.map +1 -1
  28. package/dist/core/internal/modes/relay.d.ts +140 -3
  29. package/dist/core/internal/modes/relay.d.ts.map +1 -1
  30. package/dist/core/internal/modes/relay.js +102 -26
  31. package/dist/core/internal/modes/relay.js.map +1 -1
  32. package/dist/core/internal/permissions.d.ts +1 -1
  33. package/dist/core/internal/permissionsRequest.d.ts +1 -1
  34. package/dist/core/internal/provider.d.ts.map +1 -1
  35. package/dist/core/internal/provider.js +13 -2
  36. package/dist/core/internal/provider.js.map +1 -1
  37. package/dist/core/internal/relay/rpcSchema.d.ts +3 -0
  38. package/dist/core/internal/relay/rpcSchema.d.ts.map +1 -1
  39. package/dist/core/internal/relay/schema/rpc.d.ts +23 -0
  40. package/dist/core/internal/relay/schema/rpc.d.ts.map +1 -1
  41. package/dist/core/internal/relay/schema/rpc.js +18 -0
  42. package/dist/core/internal/relay/schema/rpc.js.map +1 -1
  43. package/dist/core/internal/schema/capabilities.d.ts +2 -2
  44. package/dist/core/internal/schema/key.d.ts +2 -2
  45. package/dist/core/internal/schema/key.d.ts.map +1 -1
  46. package/dist/core/internal/schema/key.js +1 -0
  47. package/dist/core/internal/schema/key.js.map +1 -1
  48. package/dist/core/internal/schema/permissions.d.ts +2 -2
  49. package/dist/core/internal/schema/request.d.ts +18 -16
  50. package/dist/core/internal/schema/request.d.ts.map +1 -1
  51. package/dist/core/internal/schema/rpc.d.ts +52 -46
  52. package/dist/core/internal/schema/rpc.d.ts.map +1 -1
  53. package/dist/core/internal/schema/rpc.js +1 -0
  54. package/dist/core/internal/schema/rpc.js.map +1 -1
  55. package/dist/core/react-native/Porto.d.ts +474 -24
  56. package/dist/core/react-native/Porto.d.ts.map +1 -1
  57. package/dist/index.d.ts +1 -1
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/remote/Events.d.ts.map +1 -1
  62. package/dist/remote/Events.js +5 -1
  63. package/dist/remote/Events.js.map +1 -1
  64. package/dist/remote/Hooks.d.ts +44 -40
  65. package/dist/remote/Hooks.d.ts.map +1 -1
  66. package/dist/remote/Porto.d.ts +429 -19
  67. package/dist/remote/Porto.d.ts.map +1 -1
  68. package/dist/trusted-hosts.d.ts.map +1 -1
  69. package/dist/trusted-hosts.js +5 -0
  70. package/dist/trusted-hosts.js.map +1 -1
  71. package/dist/tsconfig.tmp.tsbuildinfo +1 -1
  72. package/dist/viem/Account.d.ts +3 -0
  73. package/dist/viem/Account.d.ts.map +1 -1
  74. package/dist/viem/Account.js +16 -12
  75. package/dist/viem/Account.js.map +1 -1
  76. package/dist/viem/Key.d.ts +96 -1
  77. package/dist/viem/Key.d.ts.map +1 -1
  78. package/dist/viem/Key.js +102 -3
  79. package/dist/viem/Key.js.map +1 -1
  80. package/dist/viem/RelayActions.d.ts +12 -1
  81. package/dist/viem/RelayActions.d.ts.map +1 -1
  82. package/dist/viem/RelayActions.js +8 -3
  83. package/dist/viem/RelayActions.js.map +1 -1
  84. package/dist/viem/internal/provider.d.ts +9 -0
  85. package/dist/viem/internal/provider.d.ts.map +1 -0
  86. package/dist/viem/internal/provider.js +15 -0
  87. package/dist/viem/internal/provider.js.map +1 -0
  88. package/dist/viem/internal/relayActions.d.ts +16 -0
  89. package/dist/viem/internal/relayActions.d.ts.map +1 -1
  90. package/dist/viem/internal/relayActions.js +29 -0
  91. package/dist/viem/internal/relayActions.js.map +1 -1
  92. package/dist/wagmi/Connector.d.ts +2 -2
  93. package/dist/wagmi/Connector.d.ts.map +1 -1
  94. package/dist/wagmi/Connector.js +4 -4
  95. package/dist/wagmi/Connector.js.map +1 -1
  96. package/dist/wagmi/index.d.ts +1 -1
  97. package/dist/wagmi/index.d.ts.map +1 -1
  98. package/dist/wagmi/index.js +1 -1
  99. package/dist/wagmi/index.js.map +1 -1
  100. package/dist/wagmi/index.native.d.ts +1 -1
  101. package/dist/wagmi/index.native.d.ts.map +1 -1
  102. package/dist/wagmi/index.native.js +1 -1
  103. package/dist/wagmi/index.native.js.map +1 -1
  104. package/package.json +5 -4
  105. package/src/core/Dialog.ts +12 -2
  106. package/src/core/Porto.ts +5 -5
  107. package/src/core/Transport.ts +2 -2
  108. package/src/core/internal/_generated/chains.ts +4 -1
  109. package/src/core/internal/mode.ts +5 -1
  110. package/src/core/internal/modes/relay.ts +158 -56
  111. package/src/core/internal/provider.browser.test.ts +1 -1
  112. package/src/core/internal/provider.test.ts +2 -2
  113. package/src/core/internal/provider.ts +16 -2
  114. package/src/core/internal/relay/rpcSchema.ts +4 -0
  115. package/src/core/internal/relay/schema/rpc.ts +23 -0
  116. package/src/core/internal/schema/key.ts +1 -0
  117. package/src/core/internal/schema/rpc.ts +1 -0
  118. package/src/core/react-native/Porto.ts +1 -1
  119. package/src/index.ts +1 -1
  120. package/src/remote/Events.ts +5 -1
  121. package/src/remote/Porto.ts +3 -3
  122. package/src/server/Route.test.ts +2 -2
  123. package/src/trusted-hosts.ts +5 -0
  124. package/src/viem/Account.ts +30 -12
  125. package/src/viem/Key.ts +163 -4
  126. package/src/viem/RelayActions.ts +30 -8
  127. package/src/viem/RelayClient.test.ts +2 -2
  128. package/src/viem/WalletActions.test.ts +1 -1
  129. package/src/viem/WalletClient.test.ts +2 -2
  130. package/src/viem/internal/provider.ts +19 -0
  131. package/src/viem/internal/relayActions.ts +42 -0
  132. package/src/wagmi/Connector.ts +5 -5
  133. package/src/wagmi/index.native.ts +1 -1
  134. package/src/wagmi/index.ts +1 -1
  135. package/dist/cli/bin/commands-o468kGU4.js +0 -50
@@ -1,6 +1,6 @@
1
1
  import { Hex, Value } from 'ox'
2
- import { Key } from 'porto'
3
- import { Route } from 'porto/server'
2
+ import { Key } from 'rise-wallet'
3
+ import { Route } from 'rise-wallet/server'
4
4
  import { readContract, waitForCallsStatus } from 'viem/actions'
5
5
  import { describe, expect, test } from 'vitest'
6
6
  import * as TestActions from '../../test/src/actions.js'
@@ -40,4 +40,9 @@ export const hostnames = [
40
40
  'swap.defillama.com',
41
41
  'uniswap.org',
42
42
  'www.bungee.exchange',
43
+ 'wallet.risechain.com',
44
+ 'risechain.com',
45
+ 'testnet.rise.trade',
46
+ 'dev.rise.trade',
47
+ 'rise.trade',
43
48
  ]
@@ -13,6 +13,7 @@ import {
13
13
  import { toAccount } from 'viem/accounts'
14
14
  import type { Assign, Compute } from '../core/internal/types.js'
15
15
  import type * as Storage from '../core/Storage.js'
16
+ import type { prepareCalls } from './internal/relayActions.js'
16
17
  import * as Key from './Key.js'
17
18
 
18
19
  export type Account<
@@ -164,7 +165,9 @@ export function getKey(
164
165
  if (account.keys && account.keys.length > 0) {
165
166
  if (typeof key === 'number') return account.keys[key]
166
167
  return account.keys.find(
167
- (key) => key.privateKey && (!role || key.role === role),
168
+ (key) =>
169
+ (key.privateKey && (!role || key.role === role)) ||
170
+ key.type === 'eip1193provider',
168
171
  )
169
172
  }
170
173
 
@@ -191,24 +194,34 @@ export async function sign(
191
194
  account: Account,
192
195
  parameters: sign.Parameters,
193
196
  ): Promise<Compute<Hex.Hex>> {
194
- const { storage, replaySafe = true, wrap = true, webAuthn } = parameters
197
+ const {
198
+ storage,
199
+ replaySafe = true,
200
+ wrap = true,
201
+ webAuthn,
202
+ typedData,
203
+ } = parameters
195
204
 
196
205
  const key = getKey(account, parameters)
197
206
 
207
+ const wrapped = {
208
+ domain: { verifyingContract: account.address },
209
+ message: {
210
+ digest: parameters.payload,
211
+ },
212
+ primaryType: 'ERC1271Sign',
213
+ types: {
214
+ ERC1271Sign: [{ name: 'digest', type: 'bytes32' }],
215
+ },
216
+ } as TypedData.Definition
217
+
198
218
  const payload = (() => {
199
219
  if (!replaySafe) return parameters.payload
200
- return TypedData.getSignPayload({
201
- domain: { verifyingContract: account.address },
202
- message: {
203
- digest: parameters.payload,
204
- },
205
- primaryType: 'ERC1271Sign',
206
- types: {
207
- ERC1271Sign: [{ name: 'digest', type: 'bytes32' }],
208
- },
209
- })
220
+ return TypedData.getSignPayload(wrapped)
210
221
  })()
211
222
 
223
+ const typedDataPayload = !replaySafe ? typedData : wrapped
224
+
212
225
  const sign = (() => {
213
226
  if (!key) {
214
227
  if (account.source === 'privateKey') return account.sign
@@ -219,6 +232,7 @@ export async function sign(
219
232
  address: null,
220
233
  payload: hash,
221
234
  storage,
235
+ typedData: typedDataPayload,
222
236
  webAuthn,
223
237
  wrap,
224
238
  })
@@ -274,5 +288,9 @@ export declare namespace sign {
274
288
  getFn?: WebAuthnP256.sign.Options['getFn'] | undefined
275
289
  }
276
290
  | undefined
291
+ typedData?:
292
+ | prepareCalls.ReturnType['typedData']
293
+ | TypedData.Definition
294
+ | undefined
277
295
  }
278
296
  }
package/src/viem/Key.ts CHANGED
@@ -13,7 +13,7 @@ import * as TypedData from 'ox/TypedData'
13
13
  import * as Value from 'ox/Value'
14
14
  import * as WebAuthnP256 from 'ox/WebAuthnP256'
15
15
  import * as WebCryptoP256 from 'ox/WebCryptoP256'
16
- import { zeroAddress } from 'viem'
16
+ import { type Chain, getTypesForEIP712Domain, zeroAddress } from 'viem'
17
17
  import * as Call from '../core/internal/call.js'
18
18
  import type * as RelayKey_schema from '../core/internal/relay/schema/key.js'
19
19
  import type * as RelayPermission_schema from '../core/internal/relay/schema/permission.js'
@@ -30,6 +30,8 @@ import type {
30
30
  UnionRequiredBy,
31
31
  } from '../core/internal/types.js'
32
32
  import type * as Storage from '../core/Storage.js'
33
+ import { getProvider } from './internal/provider.js'
34
+ import type { prepareCalls } from './internal/relayActions.js'
33
35
 
34
36
  type PrivateKeyFn = () => Hex.Hex
35
37
 
@@ -48,7 +50,12 @@ export type BaseKey<
48
50
  >
49
51
 
50
52
  export type Key = OneOf<
51
- AddressKey | P256Key | Secp256k1Key | WebCryptoKey | WebAuthnKey
53
+ | AddressKey
54
+ | P256Key
55
+ | Secp256k1Key
56
+ | WebCryptoKey
57
+ | WebAuthnKey
58
+ | Eip1193ProviderKey
52
59
  >
53
60
  export type AddressKey = BaseKey<'address'>
54
61
  export type P256Key = BaseKey<'p256', PrivateKeyFn>
@@ -66,6 +73,12 @@ export type WebAuthnKey = BaseKey<
66
73
  }
67
74
  >
68
75
  >
76
+ export type Eip1193ProviderKey = BaseKey<
77
+ 'eip1193provider',
78
+ {
79
+ rdns: string
80
+ }
81
+ >
69
82
 
70
83
  export type Permissions = Key_schema.Permissions
71
84
 
@@ -116,6 +129,7 @@ export const fromSerializedSpendPeriod = {
116
129
  /** Key type to Relay key type mapping. */
117
130
  export const toRelayKeyType = {
118
131
  address: 'secp256k1',
132
+ eip1193provider: 'secp256k1',
119
133
  p256: 'p256',
120
134
  secp256k1: 'secp256k1',
121
135
  'webauthn-p256': 'webauthnp256',
@@ -130,6 +144,7 @@ export const toRelayKeyRole = {
130
144
  /** Key type to serialized (contract-compatible) key type mapping. */
131
145
  export const toSerializedKeyType = {
132
146
  address: 2,
147
+ eip1193provider: 2,
133
148
  p256: 0,
134
149
  secp256k1: 2,
135
150
  'webauthn-p256': 1,
@@ -378,6 +393,38 @@ export declare namespace createWebCryptoP256 {
378
393
  >
379
394
  }
380
395
 
396
+ export async function createEip1193Provider(
397
+ parameters: createEip1193Provider.Parameters,
398
+ ) {
399
+ const { rdns } = parameters
400
+
401
+ const { provider = undefined } = (await getProvider({ rdns })) ?? {}
402
+
403
+ if (!provider) {
404
+ throw new Error('No provider found')
405
+ }
406
+
407
+ const [account] = await provider.request({
408
+ method: 'eth_requestAccounts',
409
+ })
410
+
411
+ if (!account) {
412
+ throw new Error('No account found')
413
+ }
414
+
415
+ return fromEip1193Provider({
416
+ ...parameters,
417
+ account,
418
+ })
419
+ }
420
+
421
+ export declare namespace createEip1193Provider {
422
+ type Parameters = Pick<
423
+ fromEip1193Provider.Parameters,
424
+ 'expiry' | 'feeToken' | 'permissions' | 'role' | 'rdns'
425
+ >
426
+ }
427
+
381
428
  /**
382
429
  * Deserializes a key from its serialized format.
383
430
  *
@@ -452,7 +499,11 @@ export function from<type extends Key['type']>(
452
499
  const publicKey = (() => {
453
500
  const publicKey = key.publicKey
454
501
  if (publicKey === '0x') return publicKey
455
- if (type === 'secp256k1' || type === 'address') {
502
+ if (
503
+ type === 'secp256k1' ||
504
+ type === 'address' ||
505
+ type === 'eip1193provider'
506
+ ) {
456
507
  const isAddress =
457
508
  Hex.size(publicKey) === 20 ||
458
509
  Hex.toBigInt(Hex.slice(publicKey, 0, 12)) === 0n
@@ -833,6 +884,31 @@ export declare namespace fromWebCryptoP256 {
833
884
  }
834
885
  }
835
886
 
887
+ export function fromEip1193Provider(
888
+ parameters: fromEip1193Provider.Parameters,
889
+ ) {
890
+ const { account, rdns } = parameters
891
+
892
+ return from({
893
+ ...parameters,
894
+ privateKey: {
895
+ rdns,
896
+ },
897
+ publicKey: account,
898
+ type: 'eip1193provider',
899
+ })
900
+ }
901
+
902
+ export declare namespace fromEip1193Provider {
903
+ type Parameters = Pick<
904
+ from.Value,
905
+ 'expiry' | 'feeToken' | 'permissions' | 'role'
906
+ > & {
907
+ rdns: string
908
+ account: Hex.Hex
909
+ }
910
+ }
911
+
836
912
  /**
837
913
  * Hashes a key.
838
914
  *
@@ -895,7 +971,7 @@ export function serialize(key: Key): Serialized {
895
971
  }
896
972
 
897
973
  export async function sign(key: Key, parameters: sign.Parameters) {
898
- const { address, storage, webAuthn, wrap = true } = parameters
974
+ const { address, storage, webAuthn, wrap = true, typedData } = parameters
899
975
  const { privateKey, publicKey, type: keyType } = key
900
976
 
901
977
  if (!privateKey)
@@ -1003,6 +1079,85 @@ export async function sign(key: Key, parameters: sign.Parameters) {
1003
1079
  })
1004
1080
  return [signature, false]
1005
1081
  }
1082
+ if (keyType === 'eip1193provider') {
1083
+ const { provider = undefined } =
1084
+ (await getProvider({ rdns: privateKey.rdns })) ?? {}
1085
+
1086
+ if (!provider) throw new Error(`No provider found for key "${key.id}"`)
1087
+
1088
+ if (!typedData) {
1089
+ const signature = await provider.request({
1090
+ method: 'personal_sign',
1091
+ params: [payload, publicKey],
1092
+ })
1093
+ return [signature, false]
1094
+ }
1095
+
1096
+ if (typedData.domain?.chainId) {
1097
+ const chainId = typedData.domain.chainId
1098
+ try {
1099
+ await provider.request({
1100
+ method: 'wallet_switchEthereumChain',
1101
+ params: [{ chainId: `0x${typedData.domain.chainId.toString(16)}` }],
1102
+ })
1103
+ } catch (error: any) {
1104
+ if ('code' in error && error.code === 4902) {
1105
+ const chains = (await import('viem/chains')) as unknown as Record<
1106
+ string,
1107
+ Chain
1108
+ >
1109
+
1110
+ const chain = Object.values(chains).find(
1111
+ (chain) => chain.id === chainId,
1112
+ )
1113
+
1114
+ if (!chain)
1115
+ throw new Error(
1116
+ `Not connected to chain ${typedData.domain.chainId}`,
1117
+ )
1118
+
1119
+ await provider.request({
1120
+ method: 'wallet_addEthereumChain',
1121
+ params: [
1122
+ {
1123
+ blockExplorerUrls: chain.blockExplorers?.default.url
1124
+ ? [chain.blockExplorers.default.url]
1125
+ : undefined,
1126
+ chainId: `0x${chain.id.toString(16)}`,
1127
+ chainName: chain.name,
1128
+ nativeCurrency: {
1129
+ decimals: chain.nativeCurrency.decimals,
1130
+ name: chain.nativeCurrency.name,
1131
+ symbol: chain.nativeCurrency.symbol,
1132
+ },
1133
+ rpcUrls: chain.rpcUrls.default.http,
1134
+ },
1135
+ ],
1136
+ })
1137
+ } else {
1138
+ throw error
1139
+ }
1140
+ }
1141
+ }
1142
+
1143
+ const signature = await provider.request({
1144
+ method: 'eth_signTypedData_v4',
1145
+ params: [
1146
+ publicKey,
1147
+ JSON.stringify({
1148
+ ...typedData,
1149
+ types: {
1150
+ EIP712Domain: getTypesForEIP712Domain({
1151
+ domain: typedData.domain,
1152
+ }),
1153
+ ...typedData.types,
1154
+ },
1155
+ }),
1156
+ ],
1157
+ })
1158
+
1159
+ return [signature, false]
1160
+ }
1006
1161
  throw new Error(
1007
1162
  `Key type "${keyType}" is not supported.\n\nKey:\n` +
1008
1163
  Json.stringify(key, null, 2),
@@ -1047,6 +1202,10 @@ export declare namespace sign {
1047
1202
  * @default true
1048
1203
  */
1049
1204
  wrap?: boolean | undefined
1205
+ typedData?:
1206
+ | prepareCalls.ReturnType['typedData']
1207
+ | TypedData.Definition
1208
+ | undefined
1050
1209
  }
1051
1210
  }
1052
1211
 
@@ -25,6 +25,7 @@ import * as Key from './Key.js'
25
25
 
26
26
  export {
27
27
  addFaucetFunds,
28
+ getAccount,
28
29
  getAssets,
29
30
  getAuthorization,
30
31
  getCallsStatus,
@@ -517,7 +518,7 @@ export async function sendCalls<
517
518
  if (pre.signature) return pre
518
519
 
519
520
  const { authorizeKeys, key, calls, revokeKeys } = pre
520
- const { context, digest } = await prepareCalls(client, {
521
+ const { context, digest, typedData } = await prepareCalls(client, {
521
522
  account: account_,
522
523
  authorizeKeys,
523
524
  calls,
@@ -530,6 +531,7 @@ export async function sendCalls<
530
531
  const signature = await Key.sign(key, {
531
532
  address: null,
532
533
  payload: digest,
534
+ typedData,
533
535
  webAuthn,
534
536
  })
535
537
  return { context, signature }
@@ -537,13 +539,16 @@ export async function sendCalls<
537
539
  )
538
540
 
539
541
  // Prepare main bundle.
540
- const { capabilities, context, digest } = await prepareCalls(client, {
541
- ...parameters,
542
- account: account_,
543
- chain,
544
- key,
545
- preCalls,
546
- } as never)
542
+ const { capabilities, context, digest, typedData } = await prepareCalls(
543
+ client,
544
+ {
545
+ ...parameters,
546
+ account: account_,
547
+ chain,
548
+ key,
549
+ preCalls,
550
+ } as never,
551
+ )
547
552
 
548
553
  // Sign over the bundles.
549
554
  const signature = await (async () => {
@@ -551,6 +556,7 @@ export async function sendCalls<
551
556
  return await Key.sign(key, {
552
557
  address: null,
553
558
  payload: digest,
559
+ typedData,
554
560
  webAuthn,
555
561
  wrap: false,
556
562
  })
@@ -630,6 +636,7 @@ export async function signCalls(
630
636
  key: keyIndex,
631
637
  payload: request.digest,
632
638
  replaySafe: false,
639
+ typedData: request.typedData,
633
640
  wrap: isPrecall,
634
641
  })
635
642
  }
@@ -637,6 +644,7 @@ export async function signCalls(
637
644
  return await Key.sign(key, {
638
645
  address: null,
639
646
  payload: request.digest,
647
+ typedData: request.typedData,
640
648
  wrap: isPrecall,
641
649
  })
642
650
  throw new Error('no key or account provided')
@@ -928,6 +936,19 @@ export type Decorator<
928
936
  createAccount: (
929
937
  parameters: createAccount.Parameters<chain>,
930
938
  ) => Promise<createAccount.ReturnType>
939
+ /**
940
+ * Gets an account by key hash.
941
+ *
942
+ * @example
943
+ * TODO
944
+ *
945
+ * @param client - The client to use.
946
+ * @param parameters - Parameters.
947
+ * @returns Result.
948
+ */
949
+ getAccount: (
950
+ parameters: RelayActions.getAccount.Parameters,
951
+ ) => Promise<RelayActions.getAccount.ReturnType>
931
952
  /**
932
953
  * Gets the status of a call bundle.
933
954
  *
@@ -1065,6 +1086,7 @@ export function decorator<
1065
1086
  >(client: Client<transport, chain, account>): Decorator<chain, account> {
1066
1087
  return {
1067
1088
  createAccount: (parameters) => createAccount(client, parameters),
1089
+ getAccount: (parameters) => RelayActions.getAccount(client, parameters),
1068
1090
  getCallsStatus: (parameters) =>
1069
1091
  RelayActions.getCallsStatus(client, parameters),
1070
1092
  getCapabilities: () => RelayActions.getCapabilities(client),
@@ -1,5 +1,5 @@
1
- import { Porto } from 'porto'
2
- import { RelayClient } from 'porto/viem'
1
+ import { Porto } from 'rise-wallet'
2
+ import { RelayClient } from 'rise-wallet/viem'
3
3
  import { describe, expect, test } from 'vitest'
4
4
 
5
5
  describe('fromPorto', () => {
@@ -1,6 +1,6 @@
1
1
  import { setTimeout } from 'node:timers/promises'
2
2
  import { Value } from 'ox'
3
- import { Key } from 'porto/viem'
3
+ import { Key } from 'rise-wallet/viem'
4
4
  import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
5
5
  import * as Actions from 'viem/actions'
6
6
  import { describe, expect, test } from 'vitest'
@@ -1,5 +1,5 @@
1
- import { Porto } from 'porto'
2
- import { WalletClient } from 'porto/viem'
1
+ import { Porto } from 'rise-wallet'
2
+ import { WalletClient } from 'rise-wallet/viem'
3
3
  import { describe, expect, test } from 'vitest'
4
4
 
5
5
  describe('fromPorto', () => {
@@ -0,0 +1,19 @@
1
+ import * as Mipd from 'mipd'
2
+ import * as MipdPostMessage from 'mipd-postmessage/child'
3
+
4
+ const mipdPMStore = MipdPostMessage.createStore()
5
+ const mipdStore = Mipd.createStore()
6
+
7
+ export async function getProvider(parameters: { rdns: string }) {
8
+ const parentProviders = mipdPMStore
9
+ .getProviders()
10
+ .filter((p) => p.info.rdns !== 'com.risechain.wallet')
11
+ const providers = mipdStore
12
+ .getProviders()
13
+ .filter((p) => p.info.rdns !== 'com.risechain.wallet')
14
+
15
+ return (
16
+ providers.find((p) => p.info.rdns === parameters.rdns) ??
17
+ parentProviders.find((p) => p.info.rdns === parameters.rdns)
18
+ )
19
+ }
@@ -308,6 +308,48 @@ export namespace getCallsStatus {
308
308
  export type ErrorType = parseSchemaError.ErrorType | Errors.GlobalErrorType
309
309
  }
310
310
 
311
+ /**
312
+ * Gets an account by key hash.
313
+ *
314
+ * @example
315
+ * TODO
316
+ *
317
+ * @param client - The client to use.
318
+ * @param parameters - Parameters.
319
+ * @returns Result.
320
+ */
321
+ export async function getAccount(
322
+ client: Client,
323
+ parameters: getAccount.Parameters,
324
+ ): Promise<getAccount.ReturnType> {
325
+ const { keyHash } = parameters
326
+
327
+ try {
328
+ const method = 'wallet_getAccount' as const
329
+ type Schema = Extract<RpcSchema.Viem[number], { Method: typeof method }>
330
+ const result = await client.request<Schema>({
331
+ method,
332
+ params: [
333
+ z.encode(RpcSchema.wallet_getAccount.Parameters, {
334
+ keyHash,
335
+ }),
336
+ ],
337
+ })
338
+ return z.decode(RpcSchema.wallet_getAccount.Response, result)
339
+ } catch (error) {
340
+ parseSchemaError(error)
341
+ throw error
342
+ }
343
+ }
344
+
345
+ export namespace getAccount {
346
+ export type Parameters = RpcSchema.wallet_getAccount.Parameters
347
+
348
+ export type ReturnType = RpcSchema.wallet_getAccount.Response
349
+
350
+ export type ErrorType = parseSchemaError.ErrorType | Errors.GlobalErrorType
351
+ }
352
+
311
353
  /**
312
354
  * Gets the keys for a given account.
313
355
  *
@@ -25,7 +25,7 @@ export type PortoParameters<
25
25
  ],
26
26
  > = ExactPartial<Porto.Config<chains>>
27
27
 
28
- export function porto<
28
+ export function riseWallet<
29
29
  const chains extends readonly [Chains.Chain, ...Chains.Chain[]],
30
30
  >(parameters: PortoParameters<chains> = {}) {
31
31
  type Provider = ReturnType<typeof Porto.create>['provider']
@@ -49,7 +49,7 @@ export function porto<
49
49
  chainId: number
50
50
  }>
51
51
  getPortoInstance(): Promise<
52
- Porto.Porto<readonly [Chains.Chain, ...Chains.Chain[]]>
52
+ Porto.RiseWallet<readonly [Chains.Chain, ...Chains.Chain[]]>
53
53
  >
54
54
  onConnect(connectInfo: ProviderConnectInfo): void
55
55
  }
@@ -208,8 +208,8 @@ export function porto<
208
208
  async getProvider() {
209
209
  return (await this.getPortoInstance()).provider
210
210
  },
211
- icon: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIyIiBoZWlnaHQ9IjQyMiIgdmlld0JveD0iMCAwIDQyMiA0MjIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSI0MjIiIGhlaWdodD0iNDIyIiBmaWxsPSJibGFjayIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMV8xNSkiPgo8cGF0aCBkPSJNODEgMjg2LjM2NkM4MSAyODAuODkzIDg1LjQ1MDUgMjc2LjQ1NSA5MC45NDA0IDI3Ni40NTVIMzI5LjUxMUMzMzUuMDAxIDI3Ni40NTUgMzM5LjQ1MiAyODAuODkzIDMzOS40NTIgMjg2LjM2NlYzMDYuMTg4QzMzOS40NTIgMzExLjY2MiAzMzUuMDAxIDMxNi4wOTkgMzI5LjUxMSAzMTYuMDk5SDkwLjk0MDRDODUuNDUwNSAzMTYuMDk5IDgxIDMxMS42NjIgODEgMzA2LjE4OFYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAyMzQuODI4Qzg1LjQ1MDUgMjM0LjgyOCA4MSAyMzkuMjY2IDgxIDI0NC43MzlWMjcxLjUzMUM4My44NDMyIDI2OS42MzMgODcuMjYyMiAyNjguNTI2IDkwLjk0MDQgMjY4LjUyNkgzMjkuNTExQzMzMy4xODggMjY4LjUyNiAzMzYuNjA4IDI2OS42MzMgMzM5LjQ1MiAyNzEuNTMxVjI0NC43MzlDMzM5LjQ1MiAyMzkuMjY2IDMzNS4wMDEgMjM0LjgyOCAzMjkuNTExIDIzNC44MjhIOTAuOTQwNFpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgwLjg5MyAzMzUuMDAxIDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTlDODEgMzExLjY2NCA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2NCAzMzkuNDUyIDMwNi4xOVYyODYuMzY2WiIgZmlsbD0id2hpdGUiIGZpbGwtb3BhY2l0eT0iMC41Ii8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTAuOTQwNCAxOTMuMjAxQzg1LjQ1MDUgMTkzLjIwMSA4MSAxOTcuNjM4IDgxIDIwMy4xMTJWMjI5LjkwM0M4My44NDMyIDIyOC4wMDYgODcuMjYyMiAyMjYuODk5IDkwLjk0MDQgMjI2Ljg5OUgzMjkuNTExQzMzMy4xODggMjI2Ljg5OSAzMzYuNjA4IDIyOC4wMDYgMzM5LjQ1MiAyMjkuOTAzVjIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNFpNMzM5LjQ1MiAyNDQuNzM5QzMzOS40NTIgMjM5LjI2NSAzMzUuMDAxIDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNDODEuMjE3NSAyNzEuMzg1IDgxLjQzODMgMjcxLjI0NSA4MS42NjI0IDI3MS4xMDlDODMuODMyNSAyNjkuNzk0IDg2LjMwNTQgMjY4LjkyNyA4OC45NTIzIDI2OC42MzVDODkuNjA1MSAyNjguNTYzIDkwLjI2ODQgMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMzAuMTgzIDI2OC41MjYgMzMwLjg0NiAyNjguNTYzIDMzMS40OTggMjY4LjYzNUMzMzQuNDE5IDI2OC45NTcgMzM3LjEyOCAyNjkuOTggMzM5LjQ1MiAyNzEuNTNWMjQ0LjczOVpNMzM5LjQ1MiAyODYuMzY2QzMzOS40NTIgMjgxLjAyMSAzMzUuMjA2IDI3Ni42NjMgMzI5Ljg5MyAyNzYuNDYyQzMyOS43NjcgMjc2LjQ1NyAzMjkuNjQgMjc2LjQ1NSAzMjkuNTExIDI3Ni40NTVIOTAuOTQwNEM4NS40NTA1IDI3Ni40NTUgODEgMjgwLjg5MyA4MSAyODYuMzY2VjMwNi4xODhDODEgMzExLjY2MiA4NS40NTA1IDMxNi4xMDEgOTAuOTQwNCAzMTYuMTAxSDMyOS41MTFDMzM1LjAwMSAzMTYuMTAxIDMzOS40NTIgMzExLjY2MiAzMzkuNDUyIDMwNi4xODhWMjg2LjM2NloiIGZpbGw9IndoaXRlIiBmaWxsLW9wYWNpdHk9IjAuNSIvPgo8cGF0aCBvcGFjaXR5PSIwLjMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNOTguMDE0NiAxMDRDODguNjE3NyAxMDQgODEgMTExLjU5NSA4MSAxMjAuOTY1VjE4OC4yNzZDODMuODQzMiAxODYuMzc5IDg3LjI2MjIgMTg1LjI3MiA5MC45NDA0IDE4NS4yNzJIMzI5LjUxMUMzMzMuMTg4IDE4NS4yNzIgMzM2LjYwOCAxODYuMzc5IDMzOS40NTIgMTg4LjI3NlYxMjAuOTY1QzMzOS40NTIgMTExLjU5NSAzMzEuODMzIDEwNCAzMjIuNDM3IDEwNEg5OC4wMTQ2Wk0zMzkuNDUyIDIwMy4xMTJDMzM5LjQ1MiAxOTcuNjM4IDMzNS4wMDEgMTkzLjIwMSAzMjkuNTExIDE5My4yMDFIOTAuOTQwNEM4NS40NTA1IDE5My4yMDEgODEgMTk3LjYzOCA4MSAyMDMuMTEyVjIyOS45MDNDODEuMjE3NSAyMjkuNzU4IDgxLjQzODMgMjI5LjYxOCA4MS42NjI0IDIyOS40ODJDODMuODMyNSAyMjguMTY3IDg2LjMwNTQgMjI3LjMgODguOTUyMyAyMjcuMDA4Qzg5LjYwNTEgMjI2LjkzNiA5MC4yNjg0IDIyNi44OTkgOTAuOTQwNCAyMjYuODk5SDMyOS41MTFDMzMwLjE4MyAyMjYuODk5IDMzMC44NDYgMjI2LjkzNiAzMzEuNDk4IDIyNy4wMDhDMzM0LjQxOSAyMjcuMzMgMzM3LjEyOCAyMjguMzUyIDMzOS40NTIgMjI5LjkwM1YyMDMuMTEyWk0zMzkuNDUyIDI0NC43MzlDMzM5LjQ1MiAyMzkuMzkzIDMzNS4yMDYgMjM1LjAzNiAzMjkuODkzIDIzNC44MzVDMzI5Ljc2NyAyMzQuODMgMzI5LjY0IDIzNC44MjggMzI5LjUxMSAyMzQuODI4SDkwLjk0MDRDODUuNDUwNSAyMzQuODI4IDgxIDIzOS4yNjUgODEgMjQ0LjczOVYyNzEuNTNMODEuMDcwNyAyNzEuNDgzQzgxLjI2NTMgMjcxLjM1NSA4MS40NjI1IDI3MS4yMyA4MS42NjI0IDI3MS4xMDlDODEuOTA4MyAyNzAuOTYgODIuMTU4MSAyNzAuODE3IDgyLjQxMTcgMjcwLjY3OUM4NC4zOTUzIDI2OS42MDUgODYuNjA1NCAyNjguODk0IDg4Ljk1MjMgMjY4LjYzNUM4OS4wMDUyIDI2OC42MjkgODkuMDU4IDI2OC42MjQgODkuMTExIDI2OC42MThDODkuNzEyNSAyNjguNTU3IDkwLjMyMjggMjY4LjUyNiA5MC45NDA0IDI2OC41MjZIMzI5LjUxMUMzMjkuNzM4IDI2OC41MjYgMzI5Ljk2NSAyNjguNTMgMzMwLjE5MiAyNjguNTM5QzMzMC42MzEgMjY4LjU1NSAzMzEuMDY3IDI2OC41ODcgMzMxLjQ5OCAyNjguNjM1QzMzNC40MTkgMjY4Ljk1NyAzMzcuMTI4IDI2OS45OCAzMzkuNDUyIDI3MS41M1YyNDQuNzM5Wk0zMzkuNDUyIDI4Ni4zNjZDMzM5LjQ1MiAyODEuMDIxIDMzNS4yMDYgMjc2LjY2MyAzMjkuODkzIDI3Ni40NjJMMzI5Ljg2NSAyNzYuNDYxQzMyOS43NDggMjc2LjQ1NyAzMjkuNjI5IDI3Ni40NTUgMzI5LjUxMSAyNzYuNDU1SDkwLjk0MDRDODUuNDUwNSAyNzYuNDU1IDgxIDI4MC44OTMgODEgMjg2LjM2NlYzMDYuMTg4QzgxIDMxMS42NjIgODUuNDUwNSAzMTYuMTAxIDkwLjk0MDQgMzE2LjEwMUgzMjkuNTExQzMzNS4wMDEgMzE2LjEwMSAzMzkuNDUyIDMxMS42NjIgMzM5LjQ1MiAzMDYuMTg4VjI4Ni4zNjZaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjY5Ljg2OCAxMzEuNzUyQzI2OS44NjggMTI2LjI3OCAyNzQuMzE4IDEyMS44NCAyNzkuODA4IDEyMS44NEgzMTEuNjE4QzMxNy4xMDggMTIxLjg0IDMyMS41NTggMTI2LjI3OCAzMjEuNTU4IDEzMS43NTJWMTYxLjQ4NUMzMjEuNTU4IDE2Ni45NTkgMzE3LjEwOCAxNzEuMzk2IDMxMS42MTggMTcxLjM5NkgyNzkuODA4QzI3NC4zMTggMTcxLjM5NiAyNjkuODY4IDE2Ni45NTkgMjY5Ljg2OCAxNjEuNDg1VjEzMS43NTJaIiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzFfMTUiPgo8cmVjdCB3aWR0aD0iMjU5IiBoZWlnaHQ9IjIxMyIgZmlsbD0id2hpdGUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgxIDEwNCkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K',
212
- id: 'xyz.ithaca.porto',
211
+ icon: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAdQAAAHUCAYAAACDJ9lsAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABCdSURBVHgB7d09jFTnvcfxB2Pw7oJhX1hfgXABxUps4xVuLt6OLZcuQBMwjaOsJeMC6V4pF0pzmyu5IYWlpLGUynGJu4s7m+qi3MYFkXARAoowwQ424Fcyz+AJa7zszs7+Z+ac83w+0siYdNHsfv2cc+Y3m37z678+TADAhjyTAIANE1QACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACCCoABBAUAEggKACQABBBYAAggoAAQQVAAIIKgAEEFQACPBsgi789zt7EvTizu3v0/37P6QH9x62Xj+km9e/bf/5xvVvWn/+rv130ASCCvTVxNTmNJE2/+vfZ+dGfvK/56DeaIX106tfp2ut16dXv0lQR4IKDNXI2DNp/8zW9mshPd/+u2utqF65fK8d2M9bJ1yoA0EFKqcT2ExcqQtBBSpteVxzWP+v9XJZmCoSVKA2Dh4aa7/yg06XLt5tBxaqwsdmgNrJDzodPTWe/uP8v7UDC1UgqEBtCStVIqhA7XXCemJpMo1PbU4wDO6hAo2RP+OaX/n+an7BIDmh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',
212
+ id: 'com.risechain.wallet',
213
213
  async isAuthorized() {
214
214
  try {
215
215
  // Use retry strategy as some injected wallets (e.g. MetaMask) fail to
@@ -220,7 +220,7 @@ export function porto<
220
220
  return false
221
221
  }
222
222
  },
223
- name: 'Porto',
223
+ name: 'Rise Wallet',
224
224
  async onAccountsChanged(accounts) {
225
225
  wagmiConfig.emitter.emit('change', {
226
226
  accounts: accounts as readonly Address[],
@@ -1,6 +1,6 @@
1
1
  import '../react-native/register.js'
2
2
 
3
3
  export * as Actions from './Actions.js'
4
- export { type PortoParameters, porto } from './Connector.js'
4
+ export { type PortoParameters, riseWallet } from './Connector.js'
5
5
  export * as Hooks from './Hooks.native.js'
6
6
  export * as Query from './Query.js'
@@ -1,4 +1,4 @@
1
1
  export * as Actions from './Actions.js'
2
- export { type PortoParameters, porto } from './Connector.js'
2
+ export { type PortoParameters, riseWallet } from './Connector.js'
3
3
  export * as Hooks from './Hooks.js'
4
4
  export * as Query from './Query.js'