accounts 0.12.2 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +35 -0
- package/README.md +6 -5
- package/dist/cli/adapter.d.ts.map +1 -1
- package/dist/cli/adapter.js +76 -69
- package/dist/cli/adapter.js.map +1 -1
- package/dist/core/AccessKey.d.ts +89 -106
- package/dist/core/AccessKey.d.ts.map +1 -1
- package/dist/core/AccessKey.js +230 -210
- package/dist/core/AccessKey.js.map +1 -1
- package/dist/core/Account.d.ts +0 -9
- package/dist/core/Account.d.ts.map +1 -1
- package/dist/core/Account.js +1 -13
- package/dist/core/Account.js.map +1 -1
- package/dist/core/Adapter.d.ts +24 -4
- package/dist/core/Adapter.d.ts.map +1 -1
- package/dist/core/Client.d.ts +1 -1
- package/dist/core/Client.d.ts.map +1 -1
- package/dist/core/Client.js.map +1 -1
- package/dist/core/Provider.d.ts +6 -7
- package/dist/core/Provider.d.ts.map +1 -1
- package/dist/core/Provider.js +73 -77
- package/dist/core/Provider.js.map +1 -1
- package/dist/core/Remote.d.ts +2 -0
- package/dist/core/Remote.d.ts.map +1 -1
- package/dist/core/Remote.js +3 -1
- package/dist/core/Remote.js.map +1 -1
- package/dist/core/Schema.d.ts +17 -7
- package/dist/core/Schema.d.ts.map +1 -1
- package/dist/core/adapters/dialog.d.ts.map +1 -1
- package/dist/core/adapters/dialog.js +126 -131
- package/dist/core/adapters/dialog.js.map +1 -1
- package/dist/core/adapters/local.d.ts.map +1 -1
- package/dist/core/adapters/local.js +92 -105
- package/dist/core/adapters/local.js.map +1 -1
- package/dist/core/adapters/privy.d.ts +164 -0
- package/dist/core/adapters/privy.d.ts.map +1 -0
- package/dist/core/adapters/privy.js +578 -0
- package/dist/core/adapters/privy.js.map +1 -0
- package/dist/core/adapters/turnkey.d.ts.map +1 -1
- package/dist/core/adapters/turnkey.js +136 -133
- package/dist/core/adapters/turnkey.js.map +1 -1
- package/dist/core/internal/AccessKeyTransaction.d.ts +59 -0
- package/dist/core/internal/AccessKeyTransaction.d.ts.map +1 -0
- package/dist/core/internal/AccessKeyTransaction.js +155 -0
- package/dist/core/internal/AccessKeyTransaction.js.map +1 -0
- package/dist/core/zod/rpc.d.ts +71 -4
- package/dist/core/zod/rpc.d.ts.map +1 -1
- package/dist/core/zod/rpc.js +33 -4
- package/dist/core/zod/rpc.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/react-native/adapter.d.ts.map +1 -1
- package/dist/react-native/adapter.js +86 -75
- package/dist/react-native/adapter.js.map +1 -1
- package/dist/server/CliAuth.d.ts +55 -0
- package/dist/server/CliAuth.d.ts.map +1 -1
- package/dist/server/CliAuth.js +18 -1
- package/dist/server/CliAuth.js.map +1 -1
- package/dist/server/Kv.d.ts +19 -9
- package/dist/server/Kv.d.ts.map +1 -1
- package/dist/server/Kv.js +32 -9
- package/dist/server/Kv.js.map +1 -1
- package/dist/server/internal/handlers/auth.d.ts.map +1 -1
- package/dist/server/internal/handlers/auth.js +3 -1
- package/dist/server/internal/handlers/auth.js.map +1 -1
- package/dist/server/internal/handlers/codeAuth.js +1 -1
- package/dist/server/internal/handlers/codeAuth.js.map +1 -1
- package/dist/server/internal/handlers/exchange.js +1 -1
- package/dist/server/internal/handlers/exchange.js.map +1 -1
- package/dist/server/internal/handlers/relay.d.ts +18 -12
- package/dist/server/internal/handlers/relay.d.ts.map +1 -1
- package/dist/server/internal/handlers/relay.js +116 -3
- package/dist/server/internal/handlers/relay.js.map +1 -1
- package/dist/server/internal/handlers/webAuthn.d.ts +6 -1
- package/dist/server/internal/handlers/webAuthn.d.ts.map +1 -1
- package/dist/server/internal/handlers/webAuthn.js +16 -9
- package/dist/server/internal/handlers/webAuthn.js.map +1 -1
- package/package.json +3 -3
- package/src/cli/{Provider.test.ts → Provider.localnet.test.ts} +49 -1
- package/src/cli/adapter.ts +95 -76
- package/src/core/AccessKey.test.ts +563 -560
- package/src/core/AccessKey.ts +327 -327
- package/src/core/Account.test.ts +6 -51
- package/src/core/Account.ts +1 -19
- package/src/core/Adapter.ts +22 -4
- package/src/core/Client.test.ts +1 -1
- package/src/core/Client.ts +1 -1
- package/src/core/Provider.connect.browser.test.ts +1 -1
- package/src/core/{Provider.test.ts → Provider.localnet.test.ts} +98 -32
- package/src/core/Provider.ts +118 -112
- package/src/core/Remote.test.ts +28 -0
- package/src/core/Remote.ts +4 -1
- package/src/core/Schema.test-d.ts +41 -0
- package/src/core/adapters/dialog.test.ts +335 -15
- package/src/core/adapters/dialog.ts +120 -127
- package/src/core/adapters/local.test.ts +1 -1
- package/src/core/adapters/local.ts +95 -119
- package/src/core/adapters/privy.test-d.ts +128 -0
- package/src/core/adapters/privy.test.ts +648 -0
- package/src/core/adapters/privy.ts +811 -0
- package/src/core/adapters/turnkey.test.ts +117 -13
- package/src/core/adapters/turnkey.ts +132 -149
- package/src/core/internal/AccessKeyTransaction.ts +243 -0
- package/src/core/{mppx.test.ts → mppx.localnet.test.ts} +32 -2
- package/src/core/zod/request.test.ts +36 -0
- package/src/core/zod/rpc.test.ts +139 -0
- package/src/core/zod/rpc.ts +44 -10
- package/src/index.ts +1 -1
- package/src/react-native/{Provider.test.ts → Provider.localnet.test.ts} +65 -0
- package/src/react-native/adapter.ts +107 -87
- package/src/server/CliAuth.test-d.ts +23 -0
- package/src/server/CliAuth.test.ts +47 -0
- package/src/server/CliAuth.ts +20 -1
- package/src/server/Handler.test-d.ts +1 -1
- package/src/server/Kv.test.ts +51 -0
- package/src/server/Kv.ts +43 -9
- package/src/server/internal/handlers/auth.test.ts +10 -5
- package/src/server/internal/handlers/auth.ts +4 -1
- package/src/server/internal/handlers/codeAuth.ts +1 -1
- package/src/server/internal/handlers/exchange.ts +1 -1
- package/src/server/internal/handlers/{relay.test.ts → relay.localnet.test.ts} +4 -1
- package/src/server/internal/handlers/relay.ts +139 -14
- package/src/server/internal/handlers/session.test.ts +1 -1
- package/src/server/internal/handlers/webAuthn.test.ts +20 -0
- package/src/server/internal/handlers/webAuthn.ts +24 -12
- /package/src/server/internal/handlers/{exchange.test.ts → exchange.localnet.test.ts} +0 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
import { Address as core_Address, Hex, Provider as ox_Provider, PublicKey, RpcResponse, Secp256k1, Signature, WebCryptoP256, } from 'ox';
|
|
2
|
+
import { KeyAuthorization, SignatureEnvelope } from 'ox/tempo';
|
|
3
|
+
import { hashMessage, hashTypedData, isAddressEqual, keccak256 } from 'viem';
|
|
4
|
+
import { prepareTransactionRequest } from 'viem/actions';
|
|
5
|
+
import { Actions, Transaction as TempoTransaction } from 'viem/tempo';
|
|
6
|
+
import * as AccessKey from '../AccessKey.js';
|
|
7
|
+
import * as Adapter from '../Adapter.js';
|
|
8
|
+
import * as AccessKeyTransaction from '../internal/AccessKeyTransaction.js';
|
|
9
|
+
import * as Store from '../Store.js';
|
|
10
|
+
const privySessionErrorCodes = new Set([
|
|
11
|
+
'attempted_rpc_call_before_logged_in',
|
|
12
|
+
'attempted_to_read_storage_before_client_initialized',
|
|
13
|
+
'embedded_wallet_before_logged_in',
|
|
14
|
+
'embedded_wallet_does_not_exist',
|
|
15
|
+
'embedded_wallet_request_error',
|
|
16
|
+
'missing_auth_token',
|
|
17
|
+
'missing_privy_token',
|
|
18
|
+
'oauth_session_failed',
|
|
19
|
+
'oauth_session_timeout',
|
|
20
|
+
'session_expired',
|
|
21
|
+
'unauthenticated',
|
|
22
|
+
'unauthorized',
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Creates a Privy adapter backed by `@privy-io/js-sdk-core` Privy sessions and embedded
|
|
26
|
+
* Ethereum wallets.
|
|
27
|
+
*
|
|
28
|
+
* The adapter owns silent reconnect, session-expiry cleanup, and signing. Apps supply
|
|
29
|
+
* the UI-bearing login flow via `loadAccounts` (and optionally a distinct `createAccount`
|
|
30
|
+
* for registration). Callbacks fire only on user-initiated `wallet_connect`/registration —
|
|
31
|
+
* never during silent restore on page reload.
|
|
32
|
+
*
|
|
33
|
+
* Silent restore on page reload pulls wallets directly from the Privy SDK
|
|
34
|
+
* (`client.user.get` + `client.embeddedWallet.getEthereumProvider`), so apps don't
|
|
35
|
+
* need to re-run the login UI when the user returns with a still-valid Privy session.
|
|
36
|
+
*
|
|
37
|
+
* Callbacks only run the Privy auth UI. They may optionally return a subset of
|
|
38
|
+
* embedded wallet addresses to expose; if omitted, the adapter exposes every
|
|
39
|
+
* embedded wallet on the resulting Privy user.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```ts
|
|
43
|
+
* import Privy from '@privy-io/js-sdk-core'
|
|
44
|
+
*
|
|
45
|
+
* const client = new Privy({ appId: import.meta.env.VITE_PRIVY_APP_ID })
|
|
46
|
+
*
|
|
47
|
+
* const provider = Provider.create({
|
|
48
|
+
* adapter: privy({
|
|
49
|
+
* client,
|
|
50
|
+
* // Optional: omit to route registration through `loadAccounts`.
|
|
51
|
+
* createAccount: async ({ client }) => {
|
|
52
|
+
* await myPrivyRegisterUI(client)
|
|
53
|
+
* },
|
|
54
|
+
* loadAccounts: async ({ client }) => {
|
|
55
|
+
* await myPrivyLoginUI(client)
|
|
56
|
+
* },
|
|
57
|
+
* }),
|
|
58
|
+
* })
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
export function privy(options) {
|
|
62
|
+
const { icon, name = 'Privy', rdns = 'io.privy' } = options;
|
|
63
|
+
return Adapter.define({ icon, name, rdns }, ({ getClient, store }) => {
|
|
64
|
+
let privyClient_promise;
|
|
65
|
+
let restore_promise;
|
|
66
|
+
let walletAccounts = [];
|
|
67
|
+
async function getPrivyClient() {
|
|
68
|
+
privyClient_promise ??= (async () => {
|
|
69
|
+
await options.client.initialize?.();
|
|
70
|
+
return options.client;
|
|
71
|
+
})();
|
|
72
|
+
return await privyClient_promise;
|
|
73
|
+
}
|
|
74
|
+
function toStoreAccount(account, label) {
|
|
75
|
+
return {
|
|
76
|
+
address: core_Address.from(account.address),
|
|
77
|
+
...(label ? { label } : {}),
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
function clear() {
|
|
81
|
+
restore_promise = undefined;
|
|
82
|
+
walletAccounts = [];
|
|
83
|
+
store.setState({ accessKeys: [], accounts: [], activeAccount: 0 });
|
|
84
|
+
}
|
|
85
|
+
async function hasValidSession() {
|
|
86
|
+
const token = await (await getPrivyClient()).getAccessToken().catch((error) => {
|
|
87
|
+
if (isSessionError(error))
|
|
88
|
+
return null;
|
|
89
|
+
throw error;
|
|
90
|
+
});
|
|
91
|
+
return !!token;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Loads the user's Privy embedded Ethereum wallets and constructs their
|
|
95
|
+
* EIP-1193 providers. Mirrors `getAllUserEmbeddedEthereumWallets` +
|
|
96
|
+
* `getEntropyDetailsFromUser` from `@privy-io/js-sdk-core`: per the SDK,
|
|
97
|
+
* `entropyId` is the **primary** embedded wallet's address (wallet_index === 0)
|
|
98
|
+
* shared across all wallets of the same user, and `entropyIdVerifier` is
|
|
99
|
+
* hardcoded to `'ethereum-address-verifier'` for Ethereum wallets.
|
|
100
|
+
*/
|
|
101
|
+
async function loadEthereumWallets(privyClient) {
|
|
102
|
+
const { user } = await privyClient.user.get();
|
|
103
|
+
const wallets = (user?.linked_accounts ?? [])
|
|
104
|
+
.filter((account) => account.type === 'wallet' &&
|
|
105
|
+
account.wallet_client_type === 'privy' &&
|
|
106
|
+
account.connector_type === 'embedded' &&
|
|
107
|
+
account.chain_type === 'ethereum' &&
|
|
108
|
+
typeof account.address === 'string')
|
|
109
|
+
.slice()
|
|
110
|
+
.sort((a, b) => {
|
|
111
|
+
// Wallets without a `wallet_index` are sorted to the end so they
|
|
112
|
+
// never accidentally become primary when a sibling has an index.
|
|
113
|
+
const a_index = a.wallet_index ?? Number.POSITIVE_INFINITY;
|
|
114
|
+
const b_index = b.wallet_index ?? Number.POSITIVE_INFINITY;
|
|
115
|
+
return a_index - b_index;
|
|
116
|
+
});
|
|
117
|
+
// Primary is the wallet with `wallet_index === 0`. Fall back to the
|
|
118
|
+
// lowest-indexed wallet only when no wallet declares index 0.
|
|
119
|
+
const primary = wallets.find((wallet) => wallet.wallet_index === 0) ?? wallets[0];
|
|
120
|
+
if (!primary)
|
|
121
|
+
return [];
|
|
122
|
+
const entropyId = primary.address;
|
|
123
|
+
return await Promise.all(wallets.map(async (wallet) => ({
|
|
124
|
+
address: core_Address.from(wallet.address),
|
|
125
|
+
provider: await privyClient.embeddedWallet.getEthereumProvider({
|
|
126
|
+
wallet,
|
|
127
|
+
entropyId,
|
|
128
|
+
entropyIdVerifier: 'ethereum-address-verifier',
|
|
129
|
+
}),
|
|
130
|
+
})));
|
|
131
|
+
}
|
|
132
|
+
function selectWalletAccounts(accounts, addresses) {
|
|
133
|
+
if (!addresses)
|
|
134
|
+
return accounts;
|
|
135
|
+
return addresses.map((address) => {
|
|
136
|
+
const address_ = core_Address.from(address);
|
|
137
|
+
const account = accounts.find((account) => isAddressEqual(core_Address.from(account.address), address_));
|
|
138
|
+
if (account)
|
|
139
|
+
return account;
|
|
140
|
+
throw new ox_Provider.UnauthorizedError({
|
|
141
|
+
message: `Privy callback returned address "${address_}" that was not found in the user's embedded wallets.`,
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
async function restore() {
|
|
146
|
+
await Store.waitForHydration(store);
|
|
147
|
+
if (walletAccounts.length > 0)
|
|
148
|
+
return;
|
|
149
|
+
if (restore_promise)
|
|
150
|
+
return await restore_promise;
|
|
151
|
+
restore_promise = (async () => {
|
|
152
|
+
const state = store.getState();
|
|
153
|
+
const persisted = state.accounts;
|
|
154
|
+
if (persisted.length === 0)
|
|
155
|
+
return;
|
|
156
|
+
if (!(await hasValidSession())) {
|
|
157
|
+
clear();
|
|
158
|
+
throw new ox_Provider.DisconnectedError({ message: 'Privy session expired.' });
|
|
159
|
+
}
|
|
160
|
+
const restored = await loadEthereumWallets(await getPrivyClient()).catch((error) => {
|
|
161
|
+
if (!isSessionError(error))
|
|
162
|
+
throw error;
|
|
163
|
+
clear();
|
|
164
|
+
throw new ox_Provider.DisconnectedError({ message: 'Privy session expired.' });
|
|
165
|
+
});
|
|
166
|
+
walletAccounts = persisted
|
|
167
|
+
.map((account) => restored.find((walletAccount) => isAddressEqual(core_Address.from(walletAccount.address), account.address)))
|
|
168
|
+
.filter((account) => !!account);
|
|
169
|
+
// If the persisted accounts no longer exist in Privy (different user
|
|
170
|
+
// signed in, wallets removed), wipe the stale state so callers see a
|
|
171
|
+
// clean disconnected state instead of ghost accounts without providers.
|
|
172
|
+
if (walletAccounts.length === 0) {
|
|
173
|
+
clear();
|
|
174
|
+
throw new ox_Provider.DisconnectedError({
|
|
175
|
+
message: 'Privy session no longer matches persisted accounts.',
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
store.setState({
|
|
179
|
+
accounts: walletAccounts.map((account) => toStoreAccount(account)),
|
|
180
|
+
activeAccount: Math.min(state.activeAccount, walletAccounts.length - 1),
|
|
181
|
+
});
|
|
182
|
+
})();
|
|
183
|
+
try {
|
|
184
|
+
await restore_promise;
|
|
185
|
+
}
|
|
186
|
+
finally {
|
|
187
|
+
restore_promise = undefined;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
async function requireSession() {
|
|
191
|
+
if (await hasValidSession())
|
|
192
|
+
return;
|
|
193
|
+
clear();
|
|
194
|
+
throw new ox_Provider.DisconnectedError({ message: 'Privy session expired.' });
|
|
195
|
+
}
|
|
196
|
+
async function accountForSigning(address) {
|
|
197
|
+
await restore();
|
|
198
|
+
await requireSession();
|
|
199
|
+
const address_ = address ?? store.getState().accounts[store.getState().activeAccount]?.address;
|
|
200
|
+
if (!address_)
|
|
201
|
+
throw new ox_Provider.DisconnectedError({ message: 'No accounts connected.' });
|
|
202
|
+
const account = walletAccounts.find((account) => isAddressEqual(core_Address.from(account.address), address_));
|
|
203
|
+
if (account)
|
|
204
|
+
return account;
|
|
205
|
+
if (walletAccounts.length === 0)
|
|
206
|
+
throw new ox_Provider.DisconnectedError({
|
|
207
|
+
message: 'No Privy account connected.',
|
|
208
|
+
});
|
|
209
|
+
throw new ox_Provider.UnauthorizedError({ message: `Account "${address_}" not found.` });
|
|
210
|
+
}
|
|
211
|
+
async function signPayload(parameters) {
|
|
212
|
+
const { payload, walletAccount } = parameters;
|
|
213
|
+
const result = await walletAccount.provider
|
|
214
|
+
.request({ method: 'secp256k1_sign', params: [payload] })
|
|
215
|
+
.catch((error) => {
|
|
216
|
+
const code = getPrivyErrorCode(error);
|
|
217
|
+
const message = getPrivyErrorMessage(error).toLowerCase();
|
|
218
|
+
const unsupported = (typeof code === 'number' && (code === 4200 || code === -32601)) ||
|
|
219
|
+
(typeof code === 'string' && code.toLowerCase().includes('unsupported')) ||
|
|
220
|
+
message.includes('unsupported') ||
|
|
221
|
+
message.includes('method not found');
|
|
222
|
+
if (unsupported)
|
|
223
|
+
throw new ox_Provider.UnsupportedMethodError({
|
|
224
|
+
message: 'Privy adapter requires raw secp256k1 hash signing via `secp256k1_sign` for Tempo transactions and access keys.',
|
|
225
|
+
});
|
|
226
|
+
if (isSessionError(error)) {
|
|
227
|
+
clear();
|
|
228
|
+
throw new ox_Provider.DisconnectedError({ message: 'Privy session expired.' });
|
|
229
|
+
}
|
|
230
|
+
throw error;
|
|
231
|
+
});
|
|
232
|
+
if (typeof result !== 'string' || !Hex.validate(result))
|
|
233
|
+
throw new ox_Provider.ProviderRpcError(-32603, 'Privy provider returned a non-hex secp256k1_sign result.');
|
|
234
|
+
const signature = result;
|
|
235
|
+
// Verify Privy returned a signature for the wallet we asked.
|
|
236
|
+
const expected = core_Address.from(walletAccount.address);
|
|
237
|
+
const recovered = (() => {
|
|
238
|
+
try {
|
|
239
|
+
return Secp256k1.recoverAddress({ payload, signature: Signature.fromHex(signature) });
|
|
240
|
+
}
|
|
241
|
+
catch {
|
|
242
|
+
return undefined;
|
|
243
|
+
}
|
|
244
|
+
})();
|
|
245
|
+
if (!recovered || !isAddressEqual(recovered, expected))
|
|
246
|
+
throw new ox_Provider.UnauthorizedError({
|
|
247
|
+
message: `Privy provider returned a signature for "${recovered ?? 'unknown'}" that does not match the requested wallet "${expected}".`,
|
|
248
|
+
});
|
|
249
|
+
return signature;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Builds, signs, and saves an access key authorization for the given Privy
|
|
253
|
+
* wallet. Generates a local P256 key pair when no external key is provided.
|
|
254
|
+
*/
|
|
255
|
+
async function authorizeAccessKeyFor(account, options) {
|
|
256
|
+
const { expiry, limits, scopes } = options;
|
|
257
|
+
const chainId = options.chainId ?? getClient().chain.id;
|
|
258
|
+
const prepared = await (async () => {
|
|
259
|
+
if (options.publicKey || options.address) {
|
|
260
|
+
const address = options.address ?? core_Address.fromPublicKey(PublicKey.from(options.publicKey));
|
|
261
|
+
return {
|
|
262
|
+
keyAuthorization: KeyAuthorization.from({
|
|
263
|
+
address,
|
|
264
|
+
chainId: BigInt(chainId),
|
|
265
|
+
expiry,
|
|
266
|
+
limits,
|
|
267
|
+
scopes,
|
|
268
|
+
type: options.keyType ?? 'secp256k1',
|
|
269
|
+
}),
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
if (options.keyType && options.keyType !== 'p256')
|
|
273
|
+
throw new RpcResponse.InvalidParamsError({
|
|
274
|
+
message: `\`keyType: "${options.keyType}"\` requires externally generated key material; provide \`publicKey\` or \`address\`.`,
|
|
275
|
+
});
|
|
276
|
+
const keyPair = await WebCryptoP256.createKeyPair();
|
|
277
|
+
const address = core_Address.fromPublicKey(PublicKey.from(keyPair.publicKey));
|
|
278
|
+
return {
|
|
279
|
+
keyAuthorization: KeyAuthorization.from({
|
|
280
|
+
address,
|
|
281
|
+
chainId: BigInt(chainId),
|
|
282
|
+
expiry,
|
|
283
|
+
limits,
|
|
284
|
+
scopes,
|
|
285
|
+
type: 'p256',
|
|
286
|
+
}),
|
|
287
|
+
keyPair,
|
|
288
|
+
};
|
|
289
|
+
})();
|
|
290
|
+
const signature = await signPayload({
|
|
291
|
+
payload: KeyAuthorization.getSignPayload(prepared.keyAuthorization),
|
|
292
|
+
walletAccount: account,
|
|
293
|
+
});
|
|
294
|
+
const keyAuthorization = KeyAuthorization.from(prepared.keyAuthorization, {
|
|
295
|
+
signature: SignatureEnvelope.from(signature),
|
|
296
|
+
});
|
|
297
|
+
AccessKey.add({
|
|
298
|
+
account: core_Address.from(account.address),
|
|
299
|
+
authorization: keyAuthorization,
|
|
300
|
+
...(prepared.keyPair ? { keyPair: prepared.keyPair } : {}),
|
|
301
|
+
store,
|
|
302
|
+
});
|
|
303
|
+
return KeyAuthorization.toRpc(keyAuthorization);
|
|
304
|
+
}
|
|
305
|
+
async function signTransaction(parameters) {
|
|
306
|
+
const account = await accountForSigning(parameters.from);
|
|
307
|
+
const { feePayer, ...rest } = parameters;
|
|
308
|
+
const viemClient = getClient({
|
|
309
|
+
chainId: parameters.chainId,
|
|
310
|
+
feePayer: feePayer === true ? undefined : feePayer,
|
|
311
|
+
});
|
|
312
|
+
const prepared = await prepareTransactionRequest(viemClient, {
|
|
313
|
+
account: core_Address.from(account.address),
|
|
314
|
+
...rest,
|
|
315
|
+
...(feePayer ? { feePayer: true } : {}),
|
|
316
|
+
type: 'tempo',
|
|
317
|
+
});
|
|
318
|
+
return await signPreparedTransaction(account, prepared);
|
|
319
|
+
}
|
|
320
|
+
async function signPreparedTransaction(account, prepared) {
|
|
321
|
+
const presign = (() => {
|
|
322
|
+
if (prepared &&
|
|
323
|
+
typeof prepared === 'object' &&
|
|
324
|
+
'feePayerSignature' in prepared &&
|
|
325
|
+
prepared.feePayerSignature)
|
|
326
|
+
return { ...prepared, feePayerSignature: null };
|
|
327
|
+
return prepared;
|
|
328
|
+
})();
|
|
329
|
+
const unsignedTransaction = await TempoTransaction.serialize(presign);
|
|
330
|
+
const signature = await signPayload({
|
|
331
|
+
payload: keccak256(unsignedTransaction),
|
|
332
|
+
walletAccount: account,
|
|
333
|
+
});
|
|
334
|
+
return await TempoTransaction.serialize(prepared, SignatureEnvelope.from(Signature.fromHex(signature)));
|
|
335
|
+
}
|
|
336
|
+
async function prepareTransaction(parameters) {
|
|
337
|
+
const viemClient = getClient({
|
|
338
|
+
chainId: parameters.chainId,
|
|
339
|
+
feePayer: parameters.feePayer === true ? undefined : parameters.feePayer,
|
|
340
|
+
});
|
|
341
|
+
const state = store.getState();
|
|
342
|
+
const address = parameters.from ?? state.accounts[state.activeAccount]?.address;
|
|
343
|
+
const transaction = address
|
|
344
|
+
? await AccessKeyTransaction.create({
|
|
345
|
+
address,
|
|
346
|
+
calls: parameters.calls,
|
|
347
|
+
chainId: parameters.chainId ?? state.chainId,
|
|
348
|
+
client: viemClient,
|
|
349
|
+
store,
|
|
350
|
+
})
|
|
351
|
+
: undefined;
|
|
352
|
+
if (transaction) {
|
|
353
|
+
const { feePayer, ...rest } = parameters;
|
|
354
|
+
try {
|
|
355
|
+
return await transaction.prepare({
|
|
356
|
+
...rest,
|
|
357
|
+
...(feePayer ? { feePayer: true } : {}),
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
catch { }
|
|
361
|
+
}
|
|
362
|
+
async function sign() {
|
|
363
|
+
return await signTransaction(parameters);
|
|
364
|
+
}
|
|
365
|
+
return {
|
|
366
|
+
request: undefined,
|
|
367
|
+
sign,
|
|
368
|
+
async send() {
|
|
369
|
+
const signed = await sign();
|
|
370
|
+
return await viemClient.request({
|
|
371
|
+
method: 'eth_sendRawTransaction',
|
|
372
|
+
params: [signed],
|
|
373
|
+
});
|
|
374
|
+
},
|
|
375
|
+
async sendSync() {
|
|
376
|
+
const signed = await sign();
|
|
377
|
+
return await viemClient.request({
|
|
378
|
+
method: 'eth_sendRawTransactionSync',
|
|
379
|
+
params: [signed],
|
|
380
|
+
});
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
}
|
|
384
|
+
function isSessionError(error) {
|
|
385
|
+
const code = getPrivyErrorCode(error);
|
|
386
|
+
if (typeof code === 'string') {
|
|
387
|
+
const normalized = code.toLowerCase();
|
|
388
|
+
if (privySessionErrorCodes.has(normalized))
|
|
389
|
+
return true;
|
|
390
|
+
if (normalized.includes('session'))
|
|
391
|
+
return true;
|
|
392
|
+
if (normalized.includes('before_logged_in'))
|
|
393
|
+
return true;
|
|
394
|
+
}
|
|
395
|
+
const message = getPrivyErrorMessage(error).toLowerCase();
|
|
396
|
+
return (message.includes('missing privy token') ||
|
|
397
|
+
message.includes('must be logged in') ||
|
|
398
|
+
message.includes('not authenticated') ||
|
|
399
|
+
message.includes('not logged in') ||
|
|
400
|
+
message.includes('session expired'));
|
|
401
|
+
}
|
|
402
|
+
function getPrivyErrorCode(error) {
|
|
403
|
+
if (!isObject(error))
|
|
404
|
+
return undefined;
|
|
405
|
+
if (typeof error.code === 'string' || typeof error.code === 'number')
|
|
406
|
+
return error.code;
|
|
407
|
+
if (typeof error.error_code === 'string' || typeof error.error_code === 'number')
|
|
408
|
+
return error.error_code;
|
|
409
|
+
if (typeof error.errorCode === 'string' || typeof error.errorCode === 'number')
|
|
410
|
+
return error.errorCode;
|
|
411
|
+
return getPrivyErrorCode(error.cause);
|
|
412
|
+
}
|
|
413
|
+
function getPrivyErrorMessage(error) {
|
|
414
|
+
if (error instanceof Error) {
|
|
415
|
+
const caused = getPrivyErrorMessage(error.cause);
|
|
416
|
+
return caused ? `${error.message} ${caused}` : error.message;
|
|
417
|
+
}
|
|
418
|
+
if (!isObject(error))
|
|
419
|
+
return '';
|
|
420
|
+
const own = (typeof error.message === 'string' && error.message) ||
|
|
421
|
+
(typeof error.error === 'string' && error.error) ||
|
|
422
|
+
'';
|
|
423
|
+
const caused = getPrivyErrorMessage(error.cause);
|
|
424
|
+
if (own && caused)
|
|
425
|
+
return `${own} ${caused}`;
|
|
426
|
+
return own || caused;
|
|
427
|
+
}
|
|
428
|
+
function isObject(value) {
|
|
429
|
+
return typeof value === 'object' && value !== null;
|
|
430
|
+
}
|
|
431
|
+
return {
|
|
432
|
+
cleanup() { },
|
|
433
|
+
actions: {
|
|
434
|
+
async createAccount(parameters) {
|
|
435
|
+
const { authorizeAccessKey, personalSign } = parameters;
|
|
436
|
+
if (personalSign && parameters.digest)
|
|
437
|
+
throw new ox_Provider.ProviderRpcError(-32602, '`digest` and `personalSign` cannot both be set on `wallet_connect`.');
|
|
438
|
+
const privyClient = await getPrivyClient();
|
|
439
|
+
const addresses = options.createAccount
|
|
440
|
+
? await options.createAccount({ client: privyClient, parameters })
|
|
441
|
+
: await options.loadAccounts({
|
|
442
|
+
client: privyClient,
|
|
443
|
+
parameters: {
|
|
444
|
+
...(authorizeAccessKey ? { authorizeAccessKey } : {}),
|
|
445
|
+
...(parameters.digest ? { digest: parameters.digest } : {}),
|
|
446
|
+
...(personalSign ? { personalSign } : {}),
|
|
447
|
+
},
|
|
448
|
+
});
|
|
449
|
+
await requireSession();
|
|
450
|
+
walletAccounts = selectWalletAccounts(await loadEthereumWallets(privyClient), addresses);
|
|
451
|
+
// Drop any in-flight `restore()` (from a concurrent `accountForSigning`)
|
|
452
|
+
// so re-entrant `restore()` calls don't `await` a stale IIFE that would
|
|
453
|
+
// later overwrite `walletAccounts` with the intersection against
|
|
454
|
+
// now-replaced persisted accounts.
|
|
455
|
+
restore_promise = undefined;
|
|
456
|
+
const account = walletAccounts[0];
|
|
457
|
+
if (!account)
|
|
458
|
+
throw new ox_Provider.DisconnectedError({
|
|
459
|
+
message: 'Privy returned no wallet.',
|
|
460
|
+
});
|
|
461
|
+
const digest = personalSign ? hashMessage(personalSign.message) : parameters.digest;
|
|
462
|
+
const keyAuthorization = authorizeAccessKey
|
|
463
|
+
? await authorizeAccessKeyFor(account, authorizeAccessKey)
|
|
464
|
+
: undefined;
|
|
465
|
+
return {
|
|
466
|
+
accounts: walletAccounts.map((wallet, index) => toStoreAccount(wallet, index === 0 ? parameters.name : undefined)),
|
|
467
|
+
...(personalSign ? { personalSign: { message: personalSign.message } } : {}),
|
|
468
|
+
...(keyAuthorization ? { keyAuthorization } : {}),
|
|
469
|
+
signature: digest
|
|
470
|
+
? await signPayload({
|
|
471
|
+
payload: digest,
|
|
472
|
+
walletAccount: account,
|
|
473
|
+
})
|
|
474
|
+
: undefined,
|
|
475
|
+
};
|
|
476
|
+
},
|
|
477
|
+
async loadAccounts(parameters) {
|
|
478
|
+
const { authorizeAccessKey, personalSign } = parameters ?? {};
|
|
479
|
+
if (personalSign && parameters?.digest)
|
|
480
|
+
throw new ox_Provider.ProviderRpcError(-32602, '`digest` and `personalSign` cannot both be set on `wallet_connect`.');
|
|
481
|
+
const privyClient = await getPrivyClient();
|
|
482
|
+
const addresses = await options.loadAccounts({ client: privyClient, parameters });
|
|
483
|
+
await requireSession();
|
|
484
|
+
walletAccounts = selectWalletAccounts(await loadEthereumWallets(privyClient), addresses);
|
|
485
|
+
// Drop any in-flight `restore()` (from a concurrent `accountForSigning`)
|
|
486
|
+
// so re-entrant `restore()` calls don't `await` a stale IIFE that would
|
|
487
|
+
// later overwrite `walletAccounts` with the intersection against
|
|
488
|
+
// now-replaced persisted accounts.
|
|
489
|
+
restore_promise = undefined;
|
|
490
|
+
const digest = personalSign ? hashMessage(personalSign.message) : parameters?.digest;
|
|
491
|
+
const account = walletAccounts[0];
|
|
492
|
+
const keyAuthorization = authorizeAccessKey && account
|
|
493
|
+
? await authorizeAccessKeyFor(account, authorizeAccessKey)
|
|
494
|
+
: undefined;
|
|
495
|
+
return {
|
|
496
|
+
accounts: walletAccounts.map((account) => toStoreAccount(account)),
|
|
497
|
+
...(personalSign ? { personalSign: { message: personalSign.message } } : {}),
|
|
498
|
+
...(keyAuthorization ? { keyAuthorization } : {}),
|
|
499
|
+
signature: digest && account
|
|
500
|
+
? await signPayload({
|
|
501
|
+
payload: digest,
|
|
502
|
+
walletAccount: account,
|
|
503
|
+
})
|
|
504
|
+
: undefined,
|
|
505
|
+
};
|
|
506
|
+
},
|
|
507
|
+
async authorizeAccessKey(parameters) {
|
|
508
|
+
const account = await accountForSigning(undefined);
|
|
509
|
+
const keyAuthorization = await authorizeAccessKeyFor(account, parameters);
|
|
510
|
+
return { keyAuthorization, rootAddress: core_Address.from(account.address) };
|
|
511
|
+
},
|
|
512
|
+
async revokeAccessKey(parameters) {
|
|
513
|
+
const account = await accountForSigning(parameters.address);
|
|
514
|
+
const account_tempo = {
|
|
515
|
+
address: core_Address.from(account.address),
|
|
516
|
+
source: 'privy',
|
|
517
|
+
signTransaction: async (request) => await signPreparedTransaction(account, request),
|
|
518
|
+
type: 'local',
|
|
519
|
+
};
|
|
520
|
+
try {
|
|
521
|
+
await Actions.accessKey.revoke(getClient(), {
|
|
522
|
+
account: account_tempo,
|
|
523
|
+
accessKey: parameters.accessKeyAddress,
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
catch (error) {
|
|
527
|
+
if (!AccessKey.isUnavailableError(error))
|
|
528
|
+
throw error;
|
|
529
|
+
}
|
|
530
|
+
AccessKey.remove({
|
|
531
|
+
accessKey: parameters.accessKeyAddress,
|
|
532
|
+
account: core_Address.from(account.address),
|
|
533
|
+
chainId: store.getState().chainId,
|
|
534
|
+
store,
|
|
535
|
+
});
|
|
536
|
+
},
|
|
537
|
+
async signPersonalMessage(parameters) {
|
|
538
|
+
const account = await accountForSigning(parameters.address);
|
|
539
|
+
return await signPayload({
|
|
540
|
+
payload: hashMessage({ raw: parameters.data }),
|
|
541
|
+
walletAccount: account,
|
|
542
|
+
});
|
|
543
|
+
},
|
|
544
|
+
async signTransaction(parameters) {
|
|
545
|
+
return await (await prepareTransaction(parameters)).sign();
|
|
546
|
+
},
|
|
547
|
+
async signTypedData(parameters) {
|
|
548
|
+
const account = await accountForSigning(parameters.address);
|
|
549
|
+
const typedData = JSON.parse(parameters.data);
|
|
550
|
+
return await signPayload({
|
|
551
|
+
payload: hashTypedData(typedData),
|
|
552
|
+
walletAccount: account,
|
|
553
|
+
});
|
|
554
|
+
},
|
|
555
|
+
async sendTransaction(parameters) {
|
|
556
|
+
return await (await prepareTransaction(parameters)).send();
|
|
557
|
+
},
|
|
558
|
+
async sendTransactionSync(parameters) {
|
|
559
|
+
return await (await prepareTransaction(parameters)).sendSync();
|
|
560
|
+
},
|
|
561
|
+
async disconnect() {
|
|
562
|
+
try {
|
|
563
|
+
const privyClient = await getPrivyClient();
|
|
564
|
+
const userId = await privyClient.user
|
|
565
|
+
.get()
|
|
566
|
+
.then(({ user }) => user.id)
|
|
567
|
+
.catch(() => undefined);
|
|
568
|
+
await privyClient.auth.logout(userId ? { userId } : undefined);
|
|
569
|
+
}
|
|
570
|
+
finally {
|
|
571
|
+
clear();
|
|
572
|
+
}
|
|
573
|
+
},
|
|
574
|
+
},
|
|
575
|
+
};
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=privy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"privy.js","sourceRoot":"","sources":["../../../src/core/adapters/privy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"turnkey.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/turnkey.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,GAAG,EAKJ,MAAM,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"turnkey.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/turnkey.ts"],"names":[],"mappings":"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"}
|