@solana/react 2.0.0-20241006045741
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/LICENSE +20 -0
- package/README.md +311 -0
- package/dist/index.browser.cjs +294 -0
- package/dist/index.browser.cjs.map +1 -0
- package/dist/index.browser.mjs +286 -0
- package/dist/index.browser.mjs.map +1 -0
- package/dist/index.native.mjs +286 -0
- package/dist/index.native.mjs.map +1 -0
- package/dist/index.node.cjs +294 -0
- package/dist/index.node.cjs.map +1 -0
- package/dist/index.node.mjs +286 -0
- package/dist/index.node.mjs.map +1 -0
- package/dist/types/chain.d.ts +5 -0
- package/dist/types/chain.d.ts.map +1 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/useSignAndSendTransaction.d.ts +16 -0
- package/dist/types/useSignAndSendTransaction.d.ts.map +1 -0
- package/dist/types/useSignIn.d.ts +13 -0
- package/dist/types/useSignIn.d.ts.map +1 -0
- package/dist/types/useSignMessage.d.ts +11 -0
- package/dist/types/useSignMessage.d.ts.map +1 -0
- package/dist/types/useSignTransaction.d.ts +16 -0
- package/dist/types/useSignTransaction.d.ts.map +1 -0
- package/dist/types/useWalletAccountMessageSigner.d.ts +7 -0
- package/dist/types/useWalletAccountMessageSigner.d.ts.map +1 -0
- package/dist/types/useWalletAccountTransactionSendingSigner.d.ts +9 -0
- package/dist/types/useWalletAccountTransactionSendingSigner.d.ts.map +1 -0
- package/dist/types/useWalletAccountTransactionSigner.d.ts +10 -0
- package/dist/types/useWalletAccountTransactionSigner.d.ts.map +1 -0
- package/package.json +99 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useSignAndSendTransaction.ts","../src/useSignIn.ts","../src/useSignMessage.ts","../src/useSignTransaction.ts","../src/useWalletAccountMessageSigner.ts","../src/useWalletAccountTransactionSigner.ts","../src/useWalletAccountTransactionSendingSigner.ts"],"names":["useCallback","WalletStandardError","WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED","SolanaSignAndSendTransaction","getWalletAccountFeature","getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","SolanaSignIn","getWalletFeature","getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","SolanaSignMessage","SolanaSignTransaction","useMemo","address","SolanaError","SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED","getAbortablePromise","useRef","transactions","getTransactionCodec","getTransactionEncoder"],"mappings":"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","file":"index.browser.cjs","sourcesContent":["import {\n SolanaSignAndSendTransaction,\n SolanaSignAndSendTransactionFeature,\n SolanaSignAndSendTransactionInput,\n SolanaSignAndSendTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED,\n WalletStandardError,\n} from '@wallet-standard/errors';\nimport { getWalletAccountFeature, type UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\nimport { OnlySolanaChains } from './chain';\n\ntype Input = Readonly<\n Omit<SolanaSignAndSendTransactionInput, 'account' | 'chain' | 'options'> & {\n options?: Readonly<{\n minContextSlot?: bigint;\n }>;\n }\n>;\ntype Output = SolanaSignAndSendTransactionOutput;\n\n/**\n * Returns a function you can call to sign and send a serialized transaction.\n */\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): (input: Input) => Promise<Output>;\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output>;\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output> {\n const signAndSendTransactions = useSignAndSendTransactions(uiWalletAccount, chain);\n return useCallback(\n async input => {\n const [result] = await signAndSendTransactions(input);\n return result;\n },\n [signAndSendTransactions],\n );\n}\n\nfunction useSignAndSendTransactions<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n if (!uiWalletAccount.chains.includes(chain)) {\n throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {\n address: uiWalletAccount.address,\n chain,\n featureName: SolanaSignAndSendTransaction,\n supportedChains: [...uiWalletAccount.chains],\n supportedFeatures: [...uiWalletAccount.features],\n });\n }\n const signAndSendTransactionFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignAndSendTransaction,\n ) as SolanaSignAndSendTransactionFeature[typeof SolanaSignAndSendTransaction];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithChainAndAccount = inputs.map(({ options, ...rest }) => {\n const minContextSlot = options?.minContextSlot;\n return {\n ...rest,\n account,\n chain,\n ...(minContextSlot != null\n ? {\n options: {\n minContextSlot: Number(minContextSlot),\n },\n }\n : null),\n };\n });\n const results = await signAndSendTransactionFeature.signAndSendTransaction(...inputsWithChainAndAccount);\n return results;\n },\n [account, chain, signAndSendTransactionFeature],\n );\n}\n","import { Address } from '@solana/addresses';\nimport {\n SolanaSignIn,\n SolanaSignInFeature,\n SolanaSignInInput,\n SolanaSignInOutput,\n} from '@solana/wallet-standard-features';\nimport {\n getWalletAccountFeature,\n getWalletFeature,\n UiWallet,\n UiWalletAccount,\n UiWalletHandle,\n} from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n} from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\ntype Input = SolanaSignInInput;\ntype Output = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: UiWalletAccount;\n }>;\n\n/**\n * Returns a function you can call to sign in to a domain\n */\nexport function useSignIn(uiWalletAccount: UiWalletAccount): (input?: Omit<Input, 'address'>) => Promise<Output>;\nexport function useSignIn(uiWallet: UiWallet): (input?: Input) => Promise<Output>;\nexport function useSignIn(uiWalletHandle: UiWalletHandle): (input?: Input) => Promise<Output> {\n const signIns = useSignIns(uiWalletHandle);\n return useCallback(\n async input => {\n const [result] = await signIns(input);\n return result;\n },\n [signIns],\n );\n}\n\nfunction useSignIns(\n uiWalletHandle: UiWalletHandle,\n): (...inputs: readonly (Input | undefined)[]) => Promise<readonly Output[]> {\n let signMessageFeature: SolanaSignInFeature[typeof SolanaSignIn];\n if ('address' in uiWalletHandle && typeof uiWalletHandle.address === 'string') {\n getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle as UiWalletAccount);\n signMessageFeature = getWalletAccountFeature(\n uiWalletHandle as UiWalletAccount,\n SolanaSignIn,\n ) as SolanaSignInFeature[typeof SolanaSignIn];\n } else {\n signMessageFeature = getWalletFeature(uiWalletHandle, SolanaSignIn) as SolanaSignInFeature[typeof SolanaSignIn];\n }\n const wallet = getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle);\n return useCallback(\n async (...inputs) => {\n const inputsWithAddressAndChainId = inputs.map(input => ({\n ...input,\n // Prioritize the `UiWalletAccount` address if it exists.\n ...('address' in uiWalletHandle ? { address: uiWalletHandle.address as Address } : null),\n }));\n const results = await signMessageFeature.signIn(...inputsWithAddressAndChainId);\n const resultsWithoutSignatureType = results.map(\n ({\n account,\n signatureType: _, // Solana signatures are always of type `ed25519` so drop this property.\n ...rest\n }) => ({\n ...rest,\n account: getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(\n wallet,\n account,\n ),\n }),\n );\n return resultsWithoutSignatureType;\n },\n [signMessageFeature, uiWalletHandle, wallet],\n );\n}\n","import {\n SolanaSignMessage,\n SolanaSignMessageFeature,\n SolanaSignMessageInput,\n SolanaSignMessageOutput,\n} from '@solana/wallet-standard-features';\nimport { getWalletAccountFeature, UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\ntype Input = Omit<SolanaSignMessageInput, 'account'>;\ntype Output = Omit<SolanaSignMessageOutput, 'signatureType'>;\n\n/**\n * Returns a function you can call to sign a serialized transaction.\n */\nexport function useSignMessage<TWalletAccount extends UiWalletAccount>(\n ...config: Parameters<typeof useSignMessages<TWalletAccount>>\n): (input: Input) => Promise<Output> {\n const signMessages = useSignMessages(...config);\n return useCallback(\n async input => {\n const [result] = await signMessages(input);\n return result;\n },\n [signMessages],\n );\n}\n\nfunction useSignMessages<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n const signMessageFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignMessage,\n ) as SolanaSignMessageFeature[typeof SolanaSignMessage];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithAccount = inputs.map(input => ({ ...input, account }));\n const results = await signMessageFeature.signMessage(...inputsWithAccount);\n const resultsWithoutSignatureType = results.map(\n ({\n signatureType: _, // Solana signatures are always of type `ed25519` so drop this property.\n ...rest\n }) => rest,\n );\n return resultsWithoutSignatureType;\n },\n [signMessageFeature, account],\n );\n}\n","import {\n SolanaSignAndSendTransaction,\n SolanaSignTransaction,\n SolanaSignTransactionFeature,\n SolanaSignTransactionInput,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED,\n WalletStandardError,\n} from '@wallet-standard/errors';\nimport { getWalletAccountFeature, UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\nimport { OnlySolanaChains } from './chain';\n\ntype Input = Readonly<\n Omit<SolanaSignTransactionInput, 'account' | 'chain' | 'options'> & {\n options?: Readonly<{\n minContextSlot?: bigint;\n }>;\n }\n>;\ntype Output = SolanaSignTransactionOutput;\n\n/**\n * Returns a function you can call to sign a serialized transaction.\n */\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): (input: Input) => Promise<Output>;\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output>;\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output> {\n const signTransactions = useSignTransactions(uiWalletAccount, chain);\n return useCallback(\n async input => {\n const [result] = await signTransactions(input);\n return result;\n },\n [signTransactions],\n );\n}\n\nfunction useSignTransactions<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n if (!uiWalletAccount.chains.includes(chain)) {\n throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {\n address: uiWalletAccount.address,\n chain,\n featureName: SolanaSignAndSendTransaction,\n supportedChains: [...uiWalletAccount.chains],\n supportedFeatures: [...uiWalletAccount.features],\n });\n }\n const signTransactionFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignTransaction,\n ) as SolanaSignTransactionFeature[typeof SolanaSignTransaction];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithAccountAndChain = inputs.map(({ options, ...rest }) => {\n const minContextSlot = options?.minContextSlot;\n return {\n ...rest,\n account,\n chain,\n ...(minContextSlot != null\n ? {\n options: {\n minContextSlot: Number(minContextSlot),\n },\n }\n : null),\n };\n });\n const results = await signTransactionFeature.signTransaction(...inputsWithAccountAndChain);\n return results;\n },\n [signTransactionFeature, account, chain],\n );\n}\n","import { Address, address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { SignatureBytes } from '@solana/keys';\nimport { getAbortablePromise } from '@solana/promises';\nimport { MessageModifyingSigner, SignableMessage } from '@solana/signers';\nimport type { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo } from 'react';\n\nimport { useSignMessage } from './useSignMessage';\n\n/**\n * Returns an object that conforms to the `MessageModifyingSigner` interface of `@solana/signers`.\n */\nexport function useWalletAccountMessageSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n): MessageModifyingSigner<TWalletAccount['address']> {\n const signMessage = useSignMessage(uiWalletAccount);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async modifyAndSignMessages(messages, config) {\n config?.abortSignal?.throwIfAborted();\n if (messages.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (messages.length === 0) {\n return messages;\n }\n const { content: originalMessage, signatures: originalSignatureMap } = messages[0];\n const input = {\n message: originalMessage,\n };\n const { signedMessage, signature } = await getAbortablePromise(signMessage(input), config?.abortSignal);\n const messageWasModified =\n originalMessage.length !== signedMessage.length ||\n originalMessage.some((originalByte, ii) => originalByte !== signedMessage[ii]);\n const originalSignature = originalSignatureMap[uiWalletAccount.address as Address<string>] as\n | SignatureBytes\n | undefined;\n const signatureIsNew = !originalSignature?.every((originalByte, ii) => originalByte === signature[ii]);\n if (!signatureIsNew && !messageWasModified) {\n // We already had this exact signature, and the message wasn't modified.\n // Don't replace the existing message object.\n return messages;\n }\n const nextSignatureMap = messageWasModified\n ? { [uiWalletAccount.address]: signature }\n : { ...originalSignatureMap, [uiWalletAccount.address]: signature };\n const outputMessages = Object.freeze([\n Object.freeze({\n content: signedMessage,\n signatures: Object.freeze(nextSignatureMap),\n }) as SignableMessage,\n ]);\n return outputMessages;\n },\n }),\n [uiWalletAccount, signMessage],\n );\n}\n","import { address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { getAbortablePromise } from '@solana/promises';\nimport { TransactionModifyingSigner } from '@solana/signers';\nimport { getTransactionCodec } from '@solana/transactions';\nimport { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo, useRef } from 'react';\n\nimport { OnlySolanaChains } from './chain';\nimport { useSignTransaction } from './useSignTransaction';\n\n/**\n * Returns an object that conforms to the `TransactionModifyingSigner` interface of\n * `@solana/signers`.\n */\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): TransactionModifyingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionModifyingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionModifyingSigner<TWalletAccount['address']> {\n const encoderRef = useRef<ReturnType<typeof getTransactionCodec>>();\n const signTransaction = useSignTransaction(uiWalletAccount, chain);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async modifyAndSignTransactions(transactions, config = {}) {\n const { abortSignal, ...options } = config;\n abortSignal?.throwIfAborted();\n const transactionCodec = (encoderRef.current ||= getTransactionCodec());\n if (transactions.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (transactions.length === 0) {\n return transactions;\n }\n const [transaction] = transactions;\n const wireTransactionBytes = transactionCodec.encode(transaction);\n const inputWithOptions = {\n ...options,\n transaction: wireTransactionBytes as Uint8Array,\n };\n const { signedTransaction } = await getAbortablePromise(signTransaction(inputWithOptions), abortSignal);\n const decodedSignedTransaction = transactionCodec.decode(\n signedTransaction,\n ) as (typeof transactions)[number];\n return Object.freeze([decodedSignedTransaction]);\n },\n }),\n [uiWalletAccount.address, signTransaction],\n );\n}\n","import { address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { SignatureBytes } from '@solana/keys';\nimport { getAbortablePromise } from '@solana/promises';\nimport { TransactionSendingSigner } from '@solana/signers';\nimport { getTransactionEncoder } from '@solana/transactions';\nimport { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo, useRef } from 'react';\n\nimport { OnlySolanaChains } from './chain';\nimport { useSignAndSendTransaction } from './useSignAndSendTransaction';\n\n/**\n * Returns an object that conforms to the `TransactionSendingSigner` interface of `@solana/signers`.\n */\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): TransactionSendingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionSendingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionSendingSigner<TWalletAccount['address']> {\n const encoderRef = useRef<ReturnType<typeof getTransactionEncoder>>();\n const signAndSendTransaction = useSignAndSendTransaction(uiWalletAccount, chain);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async signAndSendTransactions(transactions, config = {}) {\n const { abortSignal, ...options } = config;\n abortSignal?.throwIfAborted();\n const transactionEncoder = (encoderRef.current ||= getTransactionEncoder());\n if (transactions.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (transactions.length === 0) {\n return [];\n }\n const [transaction] = transactions;\n const wireTransactionBytes = transactionEncoder.encode(transaction);\n const inputWithOptions = {\n ...options,\n transaction: wireTransactionBytes as Uint8Array,\n };\n const { signature } = await getAbortablePromise(signAndSendTransaction(inputWithOptions), abortSignal);\n return Object.freeze([signature as SignatureBytes]);\n },\n }),\n [signAndSendTransaction, uiWalletAccount.address],\n );\n}\n"]}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
import { SolanaSignAndSendTransaction, SolanaSignIn, SolanaSignMessage, SolanaSignTransaction } from '@solana/wallet-standard-features';
|
|
2
|
+
import { WalletStandardError, WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED } from '@wallet-standard/errors';
|
|
3
|
+
import { getWalletAccountFeature, getWalletFeature } from '@wallet-standard/ui';
|
|
4
|
+
import { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED, getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';
|
|
5
|
+
import { useCallback, useMemo, useRef } from 'react';
|
|
6
|
+
import { address } from '@solana/addresses';
|
|
7
|
+
import { SolanaError, SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED } from '@solana/errors';
|
|
8
|
+
import { getAbortablePromise } from '@solana/promises';
|
|
9
|
+
import { getTransactionCodec, getTransactionEncoder } from '@solana/transactions';
|
|
10
|
+
|
|
11
|
+
// src/useSignAndSendTransaction.ts
|
|
12
|
+
function useSignAndSendTransaction(uiWalletAccount, chain) {
|
|
13
|
+
const signAndSendTransactions = useSignAndSendTransactions(uiWalletAccount, chain);
|
|
14
|
+
return useCallback(
|
|
15
|
+
async (input) => {
|
|
16
|
+
const [result] = await signAndSendTransactions(input);
|
|
17
|
+
return result;
|
|
18
|
+
},
|
|
19
|
+
[signAndSendTransactions]
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
function useSignAndSendTransactions(uiWalletAccount, chain) {
|
|
23
|
+
if (!uiWalletAccount.chains.includes(chain)) {
|
|
24
|
+
throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {
|
|
25
|
+
address: uiWalletAccount.address,
|
|
26
|
+
chain,
|
|
27
|
+
featureName: SolanaSignAndSendTransaction,
|
|
28
|
+
supportedChains: [...uiWalletAccount.chains],
|
|
29
|
+
supportedFeatures: [...uiWalletAccount.features]
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
const signAndSendTransactionFeature = getWalletAccountFeature(
|
|
33
|
+
uiWalletAccount,
|
|
34
|
+
SolanaSignAndSendTransaction
|
|
35
|
+
);
|
|
36
|
+
const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);
|
|
37
|
+
return useCallback(
|
|
38
|
+
async (...inputs) => {
|
|
39
|
+
const inputsWithChainAndAccount = inputs.map(({ options, ...rest }) => {
|
|
40
|
+
const minContextSlot = options?.minContextSlot;
|
|
41
|
+
return {
|
|
42
|
+
...rest,
|
|
43
|
+
account,
|
|
44
|
+
chain,
|
|
45
|
+
...minContextSlot != null ? {
|
|
46
|
+
options: {
|
|
47
|
+
minContextSlot: Number(minContextSlot)
|
|
48
|
+
}
|
|
49
|
+
} : null
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
const results = await signAndSendTransactionFeature.signAndSendTransaction(...inputsWithChainAndAccount);
|
|
53
|
+
return results;
|
|
54
|
+
},
|
|
55
|
+
[account, chain, signAndSendTransactionFeature]
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function useSignIn(uiWalletHandle) {
|
|
59
|
+
const signIns = useSignIns(uiWalletHandle);
|
|
60
|
+
return useCallback(
|
|
61
|
+
async (input) => {
|
|
62
|
+
const [result] = await signIns(input);
|
|
63
|
+
return result;
|
|
64
|
+
},
|
|
65
|
+
[signIns]
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
function useSignIns(uiWalletHandle) {
|
|
69
|
+
let signMessageFeature;
|
|
70
|
+
if ("address" in uiWalletHandle && typeof uiWalletHandle.address === "string") {
|
|
71
|
+
getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle);
|
|
72
|
+
signMessageFeature = getWalletAccountFeature(
|
|
73
|
+
uiWalletHandle,
|
|
74
|
+
SolanaSignIn
|
|
75
|
+
);
|
|
76
|
+
} else {
|
|
77
|
+
signMessageFeature = getWalletFeature(uiWalletHandle, SolanaSignIn);
|
|
78
|
+
}
|
|
79
|
+
const wallet = getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle);
|
|
80
|
+
return useCallback(
|
|
81
|
+
async (...inputs) => {
|
|
82
|
+
const inputsWithAddressAndChainId = inputs.map((input) => ({
|
|
83
|
+
...input,
|
|
84
|
+
// Prioritize the `UiWalletAccount` address if it exists.
|
|
85
|
+
..."address" in uiWalletHandle ? { address: uiWalletHandle.address } : null
|
|
86
|
+
}));
|
|
87
|
+
const results = await signMessageFeature.signIn(...inputsWithAddressAndChainId);
|
|
88
|
+
const resultsWithoutSignatureType = results.map(
|
|
89
|
+
({
|
|
90
|
+
account,
|
|
91
|
+
signatureType: _,
|
|
92
|
+
// Solana signatures are always of type `ed25519` so drop this property.
|
|
93
|
+
...rest
|
|
94
|
+
}) => ({
|
|
95
|
+
...rest,
|
|
96
|
+
account: getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(
|
|
97
|
+
wallet,
|
|
98
|
+
account
|
|
99
|
+
)
|
|
100
|
+
})
|
|
101
|
+
);
|
|
102
|
+
return resultsWithoutSignatureType;
|
|
103
|
+
},
|
|
104
|
+
[signMessageFeature, uiWalletHandle, wallet]
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
function useSignMessage(...config) {
|
|
108
|
+
const signMessages = useSignMessages(...config);
|
|
109
|
+
return useCallback(
|
|
110
|
+
async (input) => {
|
|
111
|
+
const [result] = await signMessages(input);
|
|
112
|
+
return result;
|
|
113
|
+
},
|
|
114
|
+
[signMessages]
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
function useSignMessages(uiWalletAccount) {
|
|
118
|
+
const signMessageFeature = getWalletAccountFeature(
|
|
119
|
+
uiWalletAccount,
|
|
120
|
+
SolanaSignMessage
|
|
121
|
+
);
|
|
122
|
+
const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);
|
|
123
|
+
return useCallback(
|
|
124
|
+
async (...inputs) => {
|
|
125
|
+
const inputsWithAccount = inputs.map((input) => ({ ...input, account }));
|
|
126
|
+
const results = await signMessageFeature.signMessage(...inputsWithAccount);
|
|
127
|
+
const resultsWithoutSignatureType = results.map(
|
|
128
|
+
({
|
|
129
|
+
signatureType: _,
|
|
130
|
+
// Solana signatures are always of type `ed25519` so drop this property.
|
|
131
|
+
...rest
|
|
132
|
+
}) => rest
|
|
133
|
+
);
|
|
134
|
+
return resultsWithoutSignatureType;
|
|
135
|
+
},
|
|
136
|
+
[signMessageFeature, account]
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
function useSignTransaction(uiWalletAccount, chain) {
|
|
140
|
+
const signTransactions = useSignTransactions(uiWalletAccount, chain);
|
|
141
|
+
return useCallback(
|
|
142
|
+
async (input) => {
|
|
143
|
+
const [result] = await signTransactions(input);
|
|
144
|
+
return result;
|
|
145
|
+
},
|
|
146
|
+
[signTransactions]
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
function useSignTransactions(uiWalletAccount, chain) {
|
|
150
|
+
if (!uiWalletAccount.chains.includes(chain)) {
|
|
151
|
+
throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {
|
|
152
|
+
address: uiWalletAccount.address,
|
|
153
|
+
chain,
|
|
154
|
+
featureName: SolanaSignAndSendTransaction,
|
|
155
|
+
supportedChains: [...uiWalletAccount.chains],
|
|
156
|
+
supportedFeatures: [...uiWalletAccount.features]
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
const signTransactionFeature = getWalletAccountFeature(
|
|
160
|
+
uiWalletAccount,
|
|
161
|
+
SolanaSignTransaction
|
|
162
|
+
);
|
|
163
|
+
const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);
|
|
164
|
+
return useCallback(
|
|
165
|
+
async (...inputs) => {
|
|
166
|
+
const inputsWithAccountAndChain = inputs.map(({ options, ...rest }) => {
|
|
167
|
+
const minContextSlot = options?.minContextSlot;
|
|
168
|
+
return {
|
|
169
|
+
...rest,
|
|
170
|
+
account,
|
|
171
|
+
chain,
|
|
172
|
+
...minContextSlot != null ? {
|
|
173
|
+
options: {
|
|
174
|
+
minContextSlot: Number(minContextSlot)
|
|
175
|
+
}
|
|
176
|
+
} : null
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
const results = await signTransactionFeature.signTransaction(...inputsWithAccountAndChain);
|
|
180
|
+
return results;
|
|
181
|
+
},
|
|
182
|
+
[signTransactionFeature, account, chain]
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
function useWalletAccountMessageSigner(uiWalletAccount) {
|
|
186
|
+
const signMessage = useSignMessage(uiWalletAccount);
|
|
187
|
+
return useMemo(
|
|
188
|
+
() => ({
|
|
189
|
+
address: address(uiWalletAccount.address),
|
|
190
|
+
async modifyAndSignMessages(messages, config) {
|
|
191
|
+
config?.abortSignal?.throwIfAborted();
|
|
192
|
+
if (messages.length > 1) {
|
|
193
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);
|
|
194
|
+
}
|
|
195
|
+
if (messages.length === 0) {
|
|
196
|
+
return messages;
|
|
197
|
+
}
|
|
198
|
+
const { content: originalMessage, signatures: originalSignatureMap } = messages[0];
|
|
199
|
+
const input = {
|
|
200
|
+
message: originalMessage
|
|
201
|
+
};
|
|
202
|
+
const { signedMessage, signature } = await getAbortablePromise(signMessage(input), config?.abortSignal);
|
|
203
|
+
const messageWasModified = originalMessage.length !== signedMessage.length || originalMessage.some((originalByte, ii) => originalByte !== signedMessage[ii]);
|
|
204
|
+
const originalSignature = originalSignatureMap[uiWalletAccount.address];
|
|
205
|
+
const signatureIsNew = !originalSignature?.every((originalByte, ii) => originalByte === signature[ii]);
|
|
206
|
+
if (!signatureIsNew && !messageWasModified) {
|
|
207
|
+
return messages;
|
|
208
|
+
}
|
|
209
|
+
const nextSignatureMap = messageWasModified ? { [uiWalletAccount.address]: signature } : { ...originalSignatureMap, [uiWalletAccount.address]: signature };
|
|
210
|
+
const outputMessages = Object.freeze([
|
|
211
|
+
Object.freeze({
|
|
212
|
+
content: signedMessage,
|
|
213
|
+
signatures: Object.freeze(nextSignatureMap)
|
|
214
|
+
})
|
|
215
|
+
]);
|
|
216
|
+
return outputMessages;
|
|
217
|
+
}
|
|
218
|
+
}),
|
|
219
|
+
[uiWalletAccount, signMessage]
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
function useWalletAccountTransactionSigner(uiWalletAccount, chain) {
|
|
223
|
+
const encoderRef = useRef();
|
|
224
|
+
const signTransaction = useSignTransaction(uiWalletAccount, chain);
|
|
225
|
+
return useMemo(
|
|
226
|
+
() => ({
|
|
227
|
+
address: address(uiWalletAccount.address),
|
|
228
|
+
async modifyAndSignTransactions(transactions, config = {}) {
|
|
229
|
+
const { abortSignal, ...options } = config;
|
|
230
|
+
abortSignal?.throwIfAborted();
|
|
231
|
+
const transactionCodec = encoderRef.current ||= getTransactionCodec();
|
|
232
|
+
if (transactions.length > 1) {
|
|
233
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);
|
|
234
|
+
}
|
|
235
|
+
if (transactions.length === 0) {
|
|
236
|
+
return transactions;
|
|
237
|
+
}
|
|
238
|
+
const [transaction] = transactions;
|
|
239
|
+
const wireTransactionBytes = transactionCodec.encode(transaction);
|
|
240
|
+
const inputWithOptions = {
|
|
241
|
+
...options,
|
|
242
|
+
transaction: wireTransactionBytes
|
|
243
|
+
};
|
|
244
|
+
const { signedTransaction } = await getAbortablePromise(signTransaction(inputWithOptions), abortSignal);
|
|
245
|
+
const decodedSignedTransaction = transactionCodec.decode(
|
|
246
|
+
signedTransaction
|
|
247
|
+
);
|
|
248
|
+
return Object.freeze([decodedSignedTransaction]);
|
|
249
|
+
}
|
|
250
|
+
}),
|
|
251
|
+
[uiWalletAccount.address, signTransaction]
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
function useWalletAccountTransactionSendingSigner(uiWalletAccount, chain) {
|
|
255
|
+
const encoderRef = useRef();
|
|
256
|
+
const signAndSendTransaction = useSignAndSendTransaction(uiWalletAccount, chain);
|
|
257
|
+
return useMemo(
|
|
258
|
+
() => ({
|
|
259
|
+
address: address(uiWalletAccount.address),
|
|
260
|
+
async signAndSendTransactions(transactions, config = {}) {
|
|
261
|
+
const { abortSignal, ...options } = config;
|
|
262
|
+
abortSignal?.throwIfAborted();
|
|
263
|
+
const transactionEncoder = encoderRef.current ||= getTransactionEncoder();
|
|
264
|
+
if (transactions.length > 1) {
|
|
265
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);
|
|
266
|
+
}
|
|
267
|
+
if (transactions.length === 0) {
|
|
268
|
+
return [];
|
|
269
|
+
}
|
|
270
|
+
const [transaction] = transactions;
|
|
271
|
+
const wireTransactionBytes = transactionEncoder.encode(transaction);
|
|
272
|
+
const inputWithOptions = {
|
|
273
|
+
...options,
|
|
274
|
+
transaction: wireTransactionBytes
|
|
275
|
+
};
|
|
276
|
+
const { signature } = await getAbortablePromise(signAndSendTransaction(inputWithOptions), abortSignal);
|
|
277
|
+
return Object.freeze([signature]);
|
|
278
|
+
}
|
|
279
|
+
}),
|
|
280
|
+
[signAndSendTransaction, uiWalletAccount.address]
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
export { useSignAndSendTransaction, useSignIn, useSignMessage, useSignTransaction, useWalletAccountMessageSigner, useWalletAccountTransactionSendingSigner, useWalletAccountTransactionSigner };
|
|
285
|
+
//# sourceMappingURL=index.browser.mjs.map
|
|
286
|
+
//# sourceMappingURL=index.browser.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/useSignAndSendTransaction.ts","../src/useSignIn.ts","../src/useSignMessage.ts","../src/useSignTransaction.ts","../src/useWalletAccountMessageSigner.ts","../src/useWalletAccountTransactionSigner.ts","../src/useWalletAccountTransactionSendingSigner.ts"],"names":["useCallback","getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED","getWalletAccountFeature","WalletStandardError","WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED","SolanaSignAndSendTransaction","useMemo","address","SolanaError","SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED","getAbortablePromise","useRef"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import {\n SolanaSignAndSendTransaction,\n SolanaSignAndSendTransactionFeature,\n SolanaSignAndSendTransactionInput,\n SolanaSignAndSendTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED,\n WalletStandardError,\n} from '@wallet-standard/errors';\nimport { getWalletAccountFeature, type UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\nimport { OnlySolanaChains } from './chain';\n\ntype Input = Readonly<\n Omit<SolanaSignAndSendTransactionInput, 'account' | 'chain' | 'options'> & {\n options?: Readonly<{\n minContextSlot?: bigint;\n }>;\n }\n>;\ntype Output = SolanaSignAndSendTransactionOutput;\n\n/**\n * Returns a function you can call to sign and send a serialized transaction.\n */\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): (input: Input) => Promise<Output>;\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output>;\nexport function useSignAndSendTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output> {\n const signAndSendTransactions = useSignAndSendTransactions(uiWalletAccount, chain);\n return useCallback(\n async input => {\n const [result] = await signAndSendTransactions(input);\n return result;\n },\n [signAndSendTransactions],\n );\n}\n\nfunction useSignAndSendTransactions<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n if (!uiWalletAccount.chains.includes(chain)) {\n throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {\n address: uiWalletAccount.address,\n chain,\n featureName: SolanaSignAndSendTransaction,\n supportedChains: [...uiWalletAccount.chains],\n supportedFeatures: [...uiWalletAccount.features],\n });\n }\n const signAndSendTransactionFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignAndSendTransaction,\n ) as SolanaSignAndSendTransactionFeature[typeof SolanaSignAndSendTransaction];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithChainAndAccount = inputs.map(({ options, ...rest }) => {\n const minContextSlot = options?.minContextSlot;\n return {\n ...rest,\n account,\n chain,\n ...(minContextSlot != null\n ? {\n options: {\n minContextSlot: Number(minContextSlot),\n },\n }\n : null),\n };\n });\n const results = await signAndSendTransactionFeature.signAndSendTransaction(...inputsWithChainAndAccount);\n return results;\n },\n [account, chain, signAndSendTransactionFeature],\n );\n}\n","import { Address } from '@solana/addresses';\nimport {\n SolanaSignIn,\n SolanaSignInFeature,\n SolanaSignInInput,\n SolanaSignInOutput,\n} from '@solana/wallet-standard-features';\nimport {\n getWalletAccountFeature,\n getWalletFeature,\n UiWallet,\n UiWalletAccount,\n UiWalletHandle,\n} from '@wallet-standard/ui';\nimport {\n getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,\n} from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\ntype Input = SolanaSignInInput;\ntype Output = Omit<SolanaSignInOutput, 'account' | 'signatureType'> &\n Readonly<{\n account: UiWalletAccount;\n }>;\n\n/**\n * Returns a function you can call to sign in to a domain\n */\nexport function useSignIn(uiWalletAccount: UiWalletAccount): (input?: Omit<Input, 'address'>) => Promise<Output>;\nexport function useSignIn(uiWallet: UiWallet): (input?: Input) => Promise<Output>;\nexport function useSignIn(uiWalletHandle: UiWalletHandle): (input?: Input) => Promise<Output> {\n const signIns = useSignIns(uiWalletHandle);\n return useCallback(\n async input => {\n const [result] = await signIns(input);\n return result;\n },\n [signIns],\n );\n}\n\nfunction useSignIns(\n uiWalletHandle: UiWalletHandle,\n): (...inputs: readonly (Input | undefined)[]) => Promise<readonly Output[]> {\n let signMessageFeature: SolanaSignInFeature[typeof SolanaSignIn];\n if ('address' in uiWalletHandle && typeof uiWalletHandle.address === 'string') {\n getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle as UiWalletAccount);\n signMessageFeature = getWalletAccountFeature(\n uiWalletHandle as UiWalletAccount,\n SolanaSignIn,\n ) as SolanaSignInFeature[typeof SolanaSignIn];\n } else {\n signMessageFeature = getWalletFeature(uiWalletHandle, SolanaSignIn) as SolanaSignInFeature[typeof SolanaSignIn];\n }\n const wallet = getWalletForHandle_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletHandle);\n return useCallback(\n async (...inputs) => {\n const inputsWithAddressAndChainId = inputs.map(input => ({\n ...input,\n // Prioritize the `UiWalletAccount` address if it exists.\n ...('address' in uiWalletHandle ? { address: uiWalletHandle.address as Address } : null),\n }));\n const results = await signMessageFeature.signIn(...inputsWithAddressAndChainId);\n const resultsWithoutSignatureType = results.map(\n ({\n account,\n signatureType: _, // Solana signatures are always of type `ed25519` so drop this property.\n ...rest\n }) => ({\n ...rest,\n account: getOrCreateUiWalletAccountForStandardWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(\n wallet,\n account,\n ),\n }),\n );\n return resultsWithoutSignatureType;\n },\n [signMessageFeature, uiWalletHandle, wallet],\n );\n}\n","import {\n SolanaSignMessage,\n SolanaSignMessageFeature,\n SolanaSignMessageInput,\n SolanaSignMessageOutput,\n} from '@solana/wallet-standard-features';\nimport { getWalletAccountFeature, UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\ntype Input = Omit<SolanaSignMessageInput, 'account'>;\ntype Output = Omit<SolanaSignMessageOutput, 'signatureType'>;\n\n/**\n * Returns a function you can call to sign a serialized transaction.\n */\nexport function useSignMessage<TWalletAccount extends UiWalletAccount>(\n ...config: Parameters<typeof useSignMessages<TWalletAccount>>\n): (input: Input) => Promise<Output> {\n const signMessages = useSignMessages(...config);\n return useCallback(\n async input => {\n const [result] = await signMessages(input);\n return result;\n },\n [signMessages],\n );\n}\n\nfunction useSignMessages<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n const signMessageFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignMessage,\n ) as SolanaSignMessageFeature[typeof SolanaSignMessage];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithAccount = inputs.map(input => ({ ...input, account }));\n const results = await signMessageFeature.signMessage(...inputsWithAccount);\n const resultsWithoutSignatureType = results.map(\n ({\n signatureType: _, // Solana signatures are always of type `ed25519` so drop this property.\n ...rest\n }) => rest,\n );\n return resultsWithoutSignatureType;\n },\n [signMessageFeature, account],\n );\n}\n","import {\n SolanaSignAndSendTransaction,\n SolanaSignTransaction,\n SolanaSignTransactionFeature,\n SolanaSignTransactionInput,\n SolanaSignTransactionOutput,\n} from '@solana/wallet-standard-features';\nimport {\n WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED,\n WalletStandardError,\n} from '@wallet-standard/errors';\nimport { getWalletAccountFeature, UiWalletAccount } from '@wallet-standard/ui';\nimport { getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED } from '@wallet-standard/ui-registry';\nimport { useCallback } from 'react';\n\nimport { OnlySolanaChains } from './chain';\n\ntype Input = Readonly<\n Omit<SolanaSignTransactionInput, 'account' | 'chain' | 'options'> & {\n options?: Readonly<{\n minContextSlot?: bigint;\n }>;\n }\n>;\ntype Output = SolanaSignTransactionOutput;\n\n/**\n * Returns a function you can call to sign a serialized transaction.\n */\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): (input: Input) => Promise<Output>;\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output>;\nexport function useSignTransaction<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (input: Input) => Promise<Output> {\n const signTransactions = useSignTransactions(uiWalletAccount, chain);\n return useCallback(\n async input => {\n const [result] = await signTransactions(input);\n return result;\n },\n [signTransactions],\n );\n}\n\nfunction useSignTransactions<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): (...inputs: readonly Input[]) => Promise<readonly Output[]> {\n if (!uiWalletAccount.chains.includes(chain)) {\n throw new WalletStandardError(WALLET_STANDARD_ERROR__FEATURES__WALLET_ACCOUNT_CHAIN_UNSUPPORTED, {\n address: uiWalletAccount.address,\n chain,\n featureName: SolanaSignAndSendTransaction,\n supportedChains: [...uiWalletAccount.chains],\n supportedFeatures: [...uiWalletAccount.features],\n });\n }\n const signTransactionFeature = getWalletAccountFeature(\n uiWalletAccount,\n SolanaSignTransaction,\n ) as SolanaSignTransactionFeature[typeof SolanaSignTransaction];\n const account = getWalletAccountForUiWalletAccount_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(uiWalletAccount);\n return useCallback(\n async (...inputs) => {\n const inputsWithAccountAndChain = inputs.map(({ options, ...rest }) => {\n const minContextSlot = options?.minContextSlot;\n return {\n ...rest,\n account,\n chain,\n ...(minContextSlot != null\n ? {\n options: {\n minContextSlot: Number(minContextSlot),\n },\n }\n : null),\n };\n });\n const results = await signTransactionFeature.signTransaction(...inputsWithAccountAndChain);\n return results;\n },\n [signTransactionFeature, account, chain],\n );\n}\n","import { Address, address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { SignatureBytes } from '@solana/keys';\nimport { getAbortablePromise } from '@solana/promises';\nimport { MessageModifyingSigner, SignableMessage } from '@solana/signers';\nimport type { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo } from 'react';\n\nimport { useSignMessage } from './useSignMessage';\n\n/**\n * Returns an object that conforms to the `MessageModifyingSigner` interface of `@solana/signers`.\n */\nexport function useWalletAccountMessageSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n): MessageModifyingSigner<TWalletAccount['address']> {\n const signMessage = useSignMessage(uiWalletAccount);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async modifyAndSignMessages(messages, config) {\n config?.abortSignal?.throwIfAborted();\n if (messages.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (messages.length === 0) {\n return messages;\n }\n const { content: originalMessage, signatures: originalSignatureMap } = messages[0];\n const input = {\n message: originalMessage,\n };\n const { signedMessage, signature } = await getAbortablePromise(signMessage(input), config?.abortSignal);\n const messageWasModified =\n originalMessage.length !== signedMessage.length ||\n originalMessage.some((originalByte, ii) => originalByte !== signedMessage[ii]);\n const originalSignature = originalSignatureMap[uiWalletAccount.address as Address<string>] as\n | SignatureBytes\n | undefined;\n const signatureIsNew = !originalSignature?.every((originalByte, ii) => originalByte === signature[ii]);\n if (!signatureIsNew && !messageWasModified) {\n // We already had this exact signature, and the message wasn't modified.\n // Don't replace the existing message object.\n return messages;\n }\n const nextSignatureMap = messageWasModified\n ? { [uiWalletAccount.address]: signature }\n : { ...originalSignatureMap, [uiWalletAccount.address]: signature };\n const outputMessages = Object.freeze([\n Object.freeze({\n content: signedMessage,\n signatures: Object.freeze(nextSignatureMap),\n }) as SignableMessage,\n ]);\n return outputMessages;\n },\n }),\n [uiWalletAccount, signMessage],\n );\n}\n","import { address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { getAbortablePromise } from '@solana/promises';\nimport { TransactionModifyingSigner } from '@solana/signers';\nimport { getTransactionCodec } from '@solana/transactions';\nimport { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo, useRef } from 'react';\n\nimport { OnlySolanaChains } from './chain';\nimport { useSignTransaction } from './useSignTransaction';\n\n/**\n * Returns an object that conforms to the `TransactionModifyingSigner` interface of\n * `@solana/signers`.\n */\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): TransactionModifyingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionModifyingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionModifyingSigner<TWalletAccount['address']> {\n const encoderRef = useRef<ReturnType<typeof getTransactionCodec>>();\n const signTransaction = useSignTransaction(uiWalletAccount, chain);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async modifyAndSignTransactions(transactions, config = {}) {\n const { abortSignal, ...options } = config;\n abortSignal?.throwIfAborted();\n const transactionCodec = (encoderRef.current ||= getTransactionCodec());\n if (transactions.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (transactions.length === 0) {\n return transactions;\n }\n const [transaction] = transactions;\n const wireTransactionBytes = transactionCodec.encode(transaction);\n const inputWithOptions = {\n ...options,\n transaction: wireTransactionBytes as Uint8Array,\n };\n const { signedTransaction } = await getAbortablePromise(signTransaction(inputWithOptions), abortSignal);\n const decodedSignedTransaction = transactionCodec.decode(\n signedTransaction,\n ) as (typeof transactions)[number];\n return Object.freeze([decodedSignedTransaction]);\n },\n }),\n [uiWalletAccount.address, signTransaction],\n );\n}\n","import { address } from '@solana/addresses';\nimport { SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED, SolanaError } from '@solana/errors';\nimport { SignatureBytes } from '@solana/keys';\nimport { getAbortablePromise } from '@solana/promises';\nimport { TransactionSendingSigner } from '@solana/signers';\nimport { getTransactionEncoder } from '@solana/transactions';\nimport { UiWalletAccount } from '@wallet-standard/ui';\nimport { useMemo, useRef } from 'react';\n\nimport { OnlySolanaChains } from './chain';\nimport { useSignAndSendTransaction } from './useSignAndSendTransaction';\n\n/**\n * Returns an object that conforms to the `TransactionSendingSigner` interface of `@solana/signers`.\n */\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: OnlySolanaChains<TWalletAccount['chains']>,\n): TransactionSendingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionSendingSigner<TWalletAccount['address']>;\nexport function useWalletAccountTransactionSendingSigner<TWalletAccount extends UiWalletAccount>(\n uiWalletAccount: TWalletAccount,\n chain: `solana:${string}`,\n): TransactionSendingSigner<TWalletAccount['address']> {\n const encoderRef = useRef<ReturnType<typeof getTransactionEncoder>>();\n const signAndSendTransaction = useSignAndSendTransaction(uiWalletAccount, chain);\n return useMemo(\n () => ({\n address: address(uiWalletAccount.address),\n async signAndSendTransactions(transactions, config = {}) {\n const { abortSignal, ...options } = config;\n abortSignal?.throwIfAborted();\n const transactionEncoder = (encoderRef.current ||= getTransactionEncoder());\n if (transactions.length > 1) {\n throw new SolanaError(SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED);\n }\n if (transactions.length === 0) {\n return [];\n }\n const [transaction] = transactions;\n const wireTransactionBytes = transactionEncoder.encode(transaction);\n const inputWithOptions = {\n ...options,\n transaction: wireTransactionBytes as Uint8Array,\n };\n const { signature } = await getAbortablePromise(signAndSendTransaction(inputWithOptions), abortSignal);\n return Object.freeze([signature as SignatureBytes]);\n },\n }),\n [signAndSendTransaction, uiWalletAccount.address],\n );\n}\n"]}
|