Socket
Socket
Sign inDemoInstall

@solana/signers

Package Overview
Dependencies
Maintainers
14
Versions
908
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solana/signers - npm Package Compare versions

Comparing version 2.0.0-experimental.ef09aec to 2.0.0-experimental.ef2569b

dist/types/account-signer-meta.d.ts.map

85

dist/index.browser.js

@@ -0,1 +1,2 @@

import { isSignerRole } from '@solana/instructions';
import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

@@ -29,2 +30,27 @@ import { generateKeyPair, signBytes } from '@solana/keys';

}
function addSignersToInstruction(signers, instruction) {
if (!instruction.accounts || instruction.accounts.length === 0) {
return instruction;
}
const signerByAddress = new Map(deduplicateSigners(signers).map((signer) => [signer.address, signer]));
return Object.freeze({
...instruction,
accounts: instruction.accounts.map((account) => {
const signer = signerByAddress.get(account.address);
if (!isSignerRole(account.role) || "signer" in account || !signer) {
return account;
}
return Object.freeze({ ...account, signer });
})
});
}
function addSignersToTransaction(signers, transaction) {
if (transaction.instructions.length === 0) {
return transaction;
}
return Object.freeze({
...transaction,
instructions: transaction.instructions.map((instruction) => addSignersToInstruction(signers, instruction))
});
}

@@ -166,12 +192,11 @@ // src/message-partial-signer.ts

);
if (sendingSigner) {
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
if (!sendingSigner) {
throw new Error(
"No `TransactionSendingSigner` was identified. Please provide a valid `ITransactionWithSingleSendingSigner` transaction."
);
}
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
abortSignal?.throwIfAborted();
return signature;
}

@@ -210,7 +235,10 @@ function categorizeTransactionSigners(signers, config = {}) {

async function signModifyingAndPartialTransactionSigners(transaction, modifyingSigners = [], partialSigners = [], abortSignal) {
const modifiedTransaction = await modifyingSigners.reduce(async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
}, Promise.resolve(transaction));
const modifiedTransaction = await modifyingSigners.reduce(
async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
},
Promise.resolve(transaction)
);
abortSignal?.throwIfAborted();

@@ -243,4 +271,31 @@ const signatureDictionaries = await Promise.all(

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
// src/transaction-with-single-sending-signer.ts
function isTransactionWithSingleSendingSigner(transaction) {
try {
assertIsTransactionWithSingleSendingSigner(transaction);
return true;
} catch {
return false;
}
}
function assertIsTransactionWithSingleSendingSigner(transaction) {
const signers = getSignersFromTransaction(transaction);
const sendingSigners = signers.filter(isTransactionSendingSigner);
if (sendingSigners.length === 0) {
const error = new Error("No `TransactionSendingSigner` was identified.");
error.name = "MissingTransactionSendingSignerError";
throw error;
}
const sendingOnlySigners = sendingSigners.filter(
(signer) => !isTransactionPartialSigner(signer) && !isTransactionModifyingSigner(signer)
);
if (sendingOnlySigners.length > 1) {
const error = new Error("More than one `TransactionSendingSigner` was identified.");
error.name = "MultipleTransactionSendingSignersError";
throw error;
}
}
export { addSignersToInstruction, addSignersToTransaction, assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, assertIsTransactionWithSingleSendingSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, isTransactionWithSingleSendingSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.browser.js.map

@@ -0,1 +1,2 @@

import { isSignerRole } from '@solana/instructions';
import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

@@ -29,2 +30,27 @@ import { generateKeyPair, signBytes } from '@solana/keys';

}
function addSignersToInstruction(signers, instruction) {
if (!instruction.accounts || instruction.accounts.length === 0) {
return instruction;
}
const signerByAddress = new Map(deduplicateSigners(signers).map((signer) => [signer.address, signer]));
return Object.freeze({
...instruction,
accounts: instruction.accounts.map((account) => {
const signer = signerByAddress.get(account.address);
if (!isSignerRole(account.role) || "signer" in account || !signer) {
return account;
}
return Object.freeze({ ...account, signer });
})
});
}
function addSignersToTransaction(signers, transaction) {
if (transaction.instructions.length === 0) {
return transaction;
}
return Object.freeze({
...transaction,
instructions: transaction.instructions.map((instruction) => addSignersToInstruction(signers, instruction))
});
}

@@ -166,12 +192,11 @@ // src/message-partial-signer.ts

);
if (sendingSigner) {
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
if (!sendingSigner) {
throw new Error(
"No `TransactionSendingSigner` was identified. Please provide a valid `ITransactionWithSingleSendingSigner` transaction."
);
}
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
abortSignal?.throwIfAborted();
return signature;
}

@@ -210,7 +235,10 @@ function categorizeTransactionSigners(signers, config = {}) {

async function signModifyingAndPartialTransactionSigners(transaction, modifyingSigners = [], partialSigners = [], abortSignal) {
const modifiedTransaction = await modifyingSigners.reduce(async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
}, Promise.resolve(transaction));
const modifiedTransaction = await modifyingSigners.reduce(
async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
},
Promise.resolve(transaction)
);
abortSignal?.throwIfAborted();

@@ -243,4 +271,31 @@ const signatureDictionaries = await Promise.all(

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
// src/transaction-with-single-sending-signer.ts
function isTransactionWithSingleSendingSigner(transaction) {
try {
assertIsTransactionWithSingleSendingSigner(transaction);
return true;
} catch {
return false;
}
}
function assertIsTransactionWithSingleSendingSigner(transaction) {
const signers = getSignersFromTransaction(transaction);
const sendingSigners = signers.filter(isTransactionSendingSigner);
if (sendingSigners.length === 0) {
const error = new Error("No `TransactionSendingSigner` was identified.");
error.name = "MissingTransactionSendingSignerError";
throw error;
}
const sendingOnlySigners = sendingSigners.filter(
(signer) => !isTransactionPartialSigner(signer) && !isTransactionModifyingSigner(signer)
);
if (sendingOnlySigners.length > 1) {
const error = new Error("More than one `TransactionSendingSigner` was identified.");
error.name = "MultipleTransactionSendingSignersError";
throw error;
}
}
export { addSignersToInstruction, addSignersToTransaction, assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, assertIsTransactionWithSingleSendingSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, isTransactionWithSingleSendingSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.native.js.map

@@ -0,1 +1,2 @@

import { isSignerRole } from '@solana/instructions';
import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

@@ -29,2 +30,27 @@ import { generateKeyPair, signBytes } from '@solana/keys';

}
function addSignersToInstruction(signers, instruction) {
if (!instruction.accounts || instruction.accounts.length === 0) {
return instruction;
}
const signerByAddress = new Map(deduplicateSigners(signers).map((signer) => [signer.address, signer]));
return Object.freeze({
...instruction,
accounts: instruction.accounts.map((account) => {
const signer = signerByAddress.get(account.address);
if (!isSignerRole(account.role) || "signer" in account || !signer) {
return account;
}
return Object.freeze({ ...account, signer });
})
});
}
function addSignersToTransaction(signers, transaction) {
if (transaction.instructions.length === 0) {
return transaction;
}
return Object.freeze({
...transaction,
instructions: transaction.instructions.map((instruction) => addSignersToInstruction(signers, instruction))
});
}

@@ -166,12 +192,11 @@ // src/message-partial-signer.ts

);
if (sendingSigner) {
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
if (!sendingSigner) {
throw new Error(
"No `TransactionSendingSigner` was identified. Please provide a valid `ITransactionWithSingleSendingSigner` transaction."
);
}
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
abortSignal?.throwIfAborted();
return signature;
}

@@ -210,7 +235,10 @@ function categorizeTransactionSigners(signers, config = {}) {

async function signModifyingAndPartialTransactionSigners(transaction, modifyingSigners = [], partialSigners = [], abortSignal) {
const modifiedTransaction = await modifyingSigners.reduce(async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
}, Promise.resolve(transaction));
const modifiedTransaction = await modifyingSigners.reduce(
async (transaction2, modifyingSigner) => {
abortSignal?.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
},
Promise.resolve(transaction)
);
abortSignal?.throwIfAborted();

@@ -243,4 +271,31 @@ const signatureDictionaries = await Promise.all(

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
// src/transaction-with-single-sending-signer.ts
function isTransactionWithSingleSendingSigner(transaction) {
try {
assertIsTransactionWithSingleSendingSigner(transaction);
return true;
} catch {
return false;
}
}
function assertIsTransactionWithSingleSendingSigner(transaction) {
const signers = getSignersFromTransaction(transaction);
const sendingSigners = signers.filter(isTransactionSendingSigner);
if (sendingSigners.length === 0) {
const error = new Error("No `TransactionSendingSigner` was identified.");
error.name = "MissingTransactionSendingSignerError";
throw error;
}
const sendingOnlySigners = sendingSigners.filter(
(signer) => !isTransactionPartialSigner(signer) && !isTransactionModifyingSigner(signer)
);
if (sendingOnlySigners.length > 1) {
const error = new Error("More than one `TransactionSendingSigner` was identified.");
error.name = "MultipleTransactionSendingSignersError";
throw error;
}
}
export { addSignersToInstruction, addSignersToTransaction, assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, assertIsTransactionWithSingleSendingSigner, createNoopSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, isTransactionWithSingleSendingSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.node.js.map

12

dist/types/account-signer-meta.d.ts
import { AccountRole, IAccountLookupMeta, IAccountMeta, IInstruction } from '@solana/instructions';
import { BaseTransaction, TransactionVersion } from '@solana/transactions';
import { TransactionSigner } from './transaction-signer';
import { TransactionSigner } from './transaction-signer.js';
/** An extension of the IAccountMeta type that keeps track of its transaction signer. */

@@ -9,10 +9,12 @@ export interface IAccountSignerMeta<TAddress extends string = string, TSigner extends TransactionSigner = TransactionSigner> extends IAccountMeta<TAddress> {

}
/** A variation of the IInstruction type that allows IAccountSignerMeta in its accounts array. */
type IAccountMetaWithWithSigner<TSigner extends TransactionSigner = TransactionSigner> = IAccountMeta | IAccountLookupMeta | IAccountSignerMeta<string, TSigner>;
export type IInstructionWithSigners<TProgramAddress extends string = string, TSigner extends TransactionSigner = TransactionSigner, TAccounts extends readonly IAccountMetaWithWithSigner<TSigner>[] = readonly IAccountMetaWithWithSigner<TSigner>[]> = IInstruction<TProgramAddress, TAccounts>;
/** A variation of the instruction type that allows IAccountSignerMeta in its account metas. */
export type IInstructionWithSigners<TSigner extends TransactionSigner = TransactionSigner, TAccounts extends readonly IAccountMetaWithWithSigner<TSigner>[] = readonly IAccountMetaWithWithSigner<TSigner>[]> = Pick<IInstruction<string, TAccounts>, 'accounts'>;
/** A variation of the transaction type that allows IAccountSignerMeta in its account metas. */
export type ITransactionWithSigners<TSigner extends TransactionSigner = TransactionSigner, TAccounts extends readonly IAccountMetaWithWithSigner<TSigner>[] = readonly IAccountMetaWithWithSigner<TSigner>[]> = Pick<BaseTransaction<TransactionVersion, IInstruction & IInstructionWithSigners<TSigner, TAccounts>>, 'instructions'>;
/** Extract all signers from an instruction that may contain IAccountSignerMeta accounts. */
export declare function getSignersFromInstruction<TSigner extends TransactionSigner = TransactionSigner>(instruction: IInstructionWithSigners<string, TSigner>): readonly TSigner[];
export declare function getSignersFromInstruction<TSigner extends TransactionSigner = TransactionSigner>(instruction: IInstructionWithSigners<TSigner>): readonly TSigner[];
/** Extract all signers from a transaction that may contain IAccountSignerMeta accounts. */
export declare function getSignersFromTransaction<TSigner extends TransactionSigner = TransactionSigner, TInstruction extends IInstructionWithSigners<string, TSigner> = IInstructionWithSigners<string, TSigner>>(transaction: BaseTransaction<TransactionVersion, TInstruction>): readonly TSigner[];
export declare function getSignersFromTransaction<TSigner extends TransactionSigner = TransactionSigner, TTransaction extends ITransactionWithSigners<TSigner> = ITransactionWithSigners<TSigner>>(transaction: TTransaction): readonly TSigner[];
export {};
//# sourceMappingURL=account-signer-meta.d.ts.map

@@ -1,5 +0,5 @@

import { MessageSigner } from './message-signer';
import { TransactionSigner } from './transaction-signer';
import { MessageSigner } from './message-signer.js';
import { TransactionSigner } from './transaction-signer.js';
/** Removes all duplicated signers from a provided array by comparing their addresses. */
export declare function deduplicateSigners<TSigner extends MessageSigner | TransactionSigner>(signers: readonly TSigner[]): readonly TSigner[];
//# sourceMappingURL=deduplicate-signers.d.ts.map

@@ -1,14 +0,16 @@

export * from './account-signer-meta';
export * from './keypair-signer';
export * from './message-modifying-signer';
export * from './message-partial-signer';
export * from './message-signer';
export * from './noop-signer';
export * from './sign-transaction';
export * from './signable-message';
export * from './transaction-modifying-signer';
export * from './transaction-partial-signer';
export * from './transaction-sending-signer';
export * from './transaction-signer';
export * from './types';
export * from './account-signer-meta.js';
export * from './add-signers.js';
export * from './keypair-signer.js';
export * from './message-modifying-signer.js';
export * from './message-partial-signer.js';
export * from './message-signer.js';
export * from './noop-signer.js';
export * from './sign-transaction.js';
export * from './signable-message.js';
export * from './transaction-modifying-signer.js';
export * from './transaction-partial-signer.js';
export * from './transaction-sending-signer.js';
export * from './transaction-signer.js';
export * from './transaction-with-single-sending-signer.js';
export * from './types.js';
//# sourceMappingURL=index.d.ts.map
import { Address } from '@solana/addresses';
import { MessagePartialSigner } from './message-partial-signer';
import { TransactionPartialSigner } from './transaction-partial-signer';
import { MessagePartialSigner } from './message-partial-signer.js';
import { TransactionPartialSigner } from './transaction-partial-signer.js';
/** Defines a signer capable of signing messages and transactions using a CryptoKeyPair. */

@@ -5,0 +5,0 @@ export type KeyPairSigner<TAddress extends string = string> = MessagePartialSigner<TAddress> & TransactionPartialSigner<TAddress> & {

import { Address } from '@solana/addresses';
import { SignableMessage } from './signable-message';
import { BaseSignerConfig } from './types';
import { SignableMessage } from './signable-message.js';
import { BaseSignerConfig } from './types.js';
export type MessageModifyingSignerConfig = BaseSignerConfig;

@@ -5,0 +5,0 @@ /** Defines a signer capable of signing messages. */

import { Address } from '@solana/addresses';
import { SignableMessage } from './signable-message';
import { BaseSignerConfig, SignatureDictionary } from './types';
import { SignableMessage } from './signable-message.js';
import { BaseSignerConfig, SignatureDictionary } from './types.js';
export type MessagePartialSignerConfig = BaseSignerConfig;

@@ -5,0 +5,0 @@ /** Defines a signer capable of signing messages. */

import { Address } from '@solana/addresses';
import { MessageModifyingSigner } from './message-modifying-signer';
import { MessagePartialSigner } from './message-partial-signer';
import { MessageModifyingSigner } from './message-modifying-signer.js';
import { MessagePartialSigner } from './message-partial-signer.js';
/** Defines a signer capable of signing messages. */

@@ -5,0 +5,0 @@ export type MessageSigner<TAddress extends string = string> = MessagePartialSigner<TAddress> | MessageModifyingSigner<TAddress>;

import { Address } from '@solana/addresses';
import { MessagePartialSigner } from './message-partial-signer';
import { TransactionPartialSigner } from './transaction-partial-signer';
import { MessagePartialSigner } from './message-partial-signer.js';
import { TransactionPartialSigner } from './transaction-partial-signer.js';
/** Defines a no-operation signer that pretends to partially sign messages and transactions. */

@@ -5,0 +5,0 @@ export type NoopSigner<TAddress extends string = string> = MessagePartialSigner<TAddress> & TransactionPartialSigner<TAddress>;

import { SignatureBytes } from '@solana/keys';
import { CompilableTransaction, IFullySignedTransaction, ITransactionWithSignatures, TransactionVersion } from '@solana/transactions';
import { IInstructionWithSigners } from './account-signer-meta';
import { TransactionSigner } from './transaction-signer';
type CompilableTransactionWithSigners = CompilableTransaction<TransactionVersion, IInstructionWithSigners<string, TransactionSigner>> & Partial<ITransactionWithSignatures>;
import { CompilableTransaction, IFullySignedTransaction, ITransactionWithSignatures } from '@solana/transactions';
import { ITransactionWithSigners } from './account-signer-meta.js';
import { ITransactionWithSingleSendingSigner } from './transaction-with-single-sending-signer.js';
type CompilableTransactionWithSigners = CompilableTransaction & ITransactionWithSigners & Partial<ITransactionWithSignatures>;
/**

@@ -29,7 +29,6 @@ * Signs a transaction using any signers that may be stored in IAccountSignerMeta instruction accounts

*/
export declare function signAndSendTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, config?: {
export declare function signAndSendTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners & ITransactionWithSingleSendingSigner = CompilableTransactionWithSigners & ITransactionWithSingleSendingSigner>(transaction: TTransaction, config?: {
abortSignal?: AbortSignal;
fallbackSender?: (transaction: TTransaction & IFullySignedTransaction) => Promise<SignatureBytes>;
}): Promise<SignatureBytes>;
export {};
//# sourceMappingURL=sign-transaction.d.ts.map

@@ -1,2 +0,2 @@

import { SignatureDictionary } from './types';
import { SignatureDictionary } from './types.js';
/** Defines a message that needs signing and its current set of signatures if any. */

@@ -3,0 +3,0 @@ export type SignableMessage = Readonly<{

import { Address } from '@solana/addresses';
import { CompilableTransaction } from '@solana/transactions';
import { BaseSignerConfig } from './types';
import { BaseSignerConfig } from './types.js';
export type TransactionModifyingSignerConfig = BaseSignerConfig;

@@ -5,0 +5,0 @@ /** Defines a signer capable of signing transactions. */

import { Address } from '@solana/addresses';
import { CompilableTransaction } from '@solana/transactions';
import { BaseSignerConfig, SignatureDictionary } from './types';
import { BaseSignerConfig, SignatureDictionary } from './types.js';
export type TransactionPartialSignerConfig = BaseSignerConfig;

@@ -5,0 +5,0 @@ /** Defines a signer capable of signing transactions. */

import { Address } from '@solana/addresses';
import { SignatureBytes } from '@solana/keys';
import { CompilableTransaction } from '@solana/transactions';
import { BaseSignerConfig } from './types';
import { BaseSignerConfig } from './types.js';
export type TransactionSendingSignerConfig = BaseSignerConfig;

@@ -6,0 +6,0 @@ /** Defines a signer capable of signing and sending transactions simultaneously. */

import { Address } from '@solana/addresses';
import { TransactionModifyingSigner } from './transaction-modifying-signer';
import { TransactionPartialSigner } from './transaction-partial-signer';
import { TransactionSendingSigner } from './transaction-sending-signer';
import { TransactionModifyingSigner } from './transaction-modifying-signer.js';
import { TransactionPartialSigner } from './transaction-partial-signer.js';
import { TransactionSendingSigner } from './transaction-sending-signer.js';
/** Defines a signer capable of signing transactions. */

@@ -6,0 +6,0 @@ export type TransactionSigner<TAddress extends string = string> = TransactionPartialSigner<TAddress> | TransactionModifyingSigner<TAddress> | TransactionSendingSigner<TAddress>;

{
"name": "@solana/signers",
"version": "2.0.0-experimental.ef09aec",
"version": "2.0.0-experimental.ef2569b",
"description": "An abstraction layer over signing messages and transactions in Solana",

@@ -52,6 +52,6 @@ "exports": {

"dependencies": {
"@solana/addresses": "2.0.0-experimental.ef09aec",
"@solana/instructions": "2.0.0-experimental.ef09aec",
"@solana/keys": "2.0.0-experimental.ef09aec",
"@solana/transactions": "2.0.0-experimental.ef09aec"
"@solana/addresses": "2.0.0-experimental.ef2569b",
"@solana/instructions": "2.0.0-experimental.ef2569b",
"@solana/keys": "2.0.0-experimental.ef2569b",
"@solana/transactions": "2.0.0-experimental.ef2569b"
},

@@ -61,4 +61,4 @@ "devDependencies": {

"@swc/jest": "^0.2.29",
"@types/jest": "^29.5.6",
"@typescript-eslint/eslint-plugin": "^6.7.0",
"@types/jest": "^29.5.11",
"@typescript-eslint/eslint-plugin": "^6.13.2",
"@typescript-eslint/parser": "^6.3.0",

@@ -73,3 +73,3 @@ "agadoo": "^3.0.0",

"jest-runner-prettier": "^1.0.0",
"prettier": "^2.8",
"prettier": "^3.1",
"tsup": "^8.0.1",

@@ -93,4 +93,4 @@ "typescript": "^5.2.2",

"scripts": {
"compile:js": "tsup --config build-scripts/tsup.config.library.ts",
"compile:typedefs": "tsc -p ./tsconfig.declarations.json",
"compile:js": "tsup --config build-scripts/tsup.config.package.ts",
"compile:typedefs": "tsc -p ./tsconfig.declarations.json && node node_modules/build-scripts/add-js-extension-to-types.mjs",
"dev": "jest -c node_modules/test-config/jest-dev.config.ts --rootDir . --watch",

@@ -97,0 +97,0 @@ "publish-packages": "pnpm publish --tag experimental --access public --no-git-checks",

@@ -394,6 +394,6 @@ [![npm][npm-image]][npm-url]

Extends the `IInstruction` type to allow `IAccountSignerMetas` to be used inside the instruction's `accounts` array.
Composable type that allows `IAccountSignerMetas` to be used inside the instruction's `accounts` array.
```ts
const myInstructionWithSigners: IInstructionWithSigners = {
const myInstructionWithSigners: IInstruction & IInstructionWithSigners = {
programAddress: address('1234..5678'),

@@ -410,2 +410,17 @@ accounts: [

#### `ITransactionWithSigners`
Composable type that allows `IAccountSignerMetas` to be used inside all of the transaction's account metas.
```ts
const myTransactionWithSigners: BaseTransaction & ITransactionWithSigners = {
instructions: [
myInstructionA as IInstruction & IInstructionWithSigners,
myInstructionB as IInstruction & IInstructionWithSigners,
myInstructionC as IInstruction,
],
version: 0,
};
```
### Functions

@@ -441,2 +456,35 @@

#### `addSignersToInstruction()`
Helper function that adds the provided signers to any of the applicable account metas. For an account meta to match a provided signer it:
- Must have a signer role (`AccountRole.READONLY_SIGNER` or `AccountRole.WRITABLE_SIGNER`).
- Must have the same address as the provided signer.
- Must not have an attached signer already.
```ts
const myInstruction: IInstruction = {
accounts: [
{ address: '1111' as Address, role: AccountRole.READONLY_SIGNER },
{ address: '2222' as Address, role: AccountRole.WRITABLE_SIGNER },
],
// ...
};
const signerA: TransactionSigner<'1111'>;
const signerB: TransactionSigner<'2222'>;
const myInstructionWithSigners = addSignersToInstruction([mySignerA, mySignerB], myInstruction);
// myInstructionWithSigners.accounts[0].signer === mySignerA
// myInstructionWithSigners.accounts[1].signer === mySignerB
```
#### `addSignersToTransaction()`
Similarly to `addSignersToInstruction`, this function adds signer to all the applicable account metas of all the instructions inside a transaction.
```ts
const myTransactionWithSigners = addSignersToTransaction(mySigners, myTransaction);
```
## Signing transactions with signers

@@ -455,3 +503,3 @@

```ts
const mySignedTransaction = partiallySignTransactionWithSigners(myTransaction);
const mySignedTransaction = await partiallySignTransactionWithSigners(myTransaction);
```

@@ -462,3 +510,3 @@

```ts
const mySignedTransaction = partiallySignTransactionWithSigners(myTransaction, {
const mySignedTransaction = await partiallySignTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,

@@ -475,6 +523,6 @@ });

```ts
const mySignedTransaction = signTransactionWithSigners(myTransaction);
const mySignedTransaction = await signTransactionWithSigners(myTransaction);
// With additional config.
const mySignedTransaction = signTransactionWithSigners(myTransaction, {
const mySignedTransaction = await signTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,

@@ -492,6 +540,6 @@ });

```ts
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction);
const myTransactionSignature = await signAndSendTransactionWithSigners(myTransaction);
// With additional config.
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, {
const myTransactionSignature = await signAndSendTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,

@@ -501,20 +549,30 @@ });

Similarly to the `partiallySignTransactionWithSigners` function, it first uses all `TransactionModifyingSigners` sequentially before using all `TransactionPartialSigners` in parallel. It then sends the transaction using the first `TransactionSendingSigner` it finds. Any other sending signer that does not implement another transaction signer interface will be ignored.
Similarly to the `partiallySignTransactionWithSigners` function, it first uses all `TransactionModifyingSigners` sequentially before using all `TransactionPartialSigners` in parallel. It then sends the transaction using the `TransactionSendingSigner` it identified.
If no `TransactionSendingSigner` is extracted from the transaction or explicitly provided, the `fallbackSender` third argument will be used to send the transaction. If no fallback sender is provided and no sending signer is identified, an error will be thrown.
Here as well, composite transaction signers are treated such that at least one sending signer is used if any. When a `TransactionSigner` implements more than one interface, use it as a:
- `TransactionSendingSigner`, if no other `TransactionSendingSigner` exists.
- `TransactionModifyingSigner`, if no other `TransactionModifyingSigner` exists.
- `TransactionPartialSigner`, otherwise.
The provided transaction must be of type `ITransactionWithSingleSendingSigner` meaning that it must contain exactly one `TransactionSendingSigner` inside its account metas. If more than one composite signers implement the `TransactionSendingSigner` interface, one of them will be selected as the sending signer.
Therefore, you may use the `assertIsTransactionWithSingleSendingSigner()` function to ensure the transaction is of the expected type.
```ts
const fallbackSender = async (transaction: CompilableTransaction) => {
const encodedTransaction = getBase64EncodedWireTransaction(transaction);
const signature = await rpc.sendTransaction(encodedTransaction).send();
return getBase58Encoder().encode(signature);
};
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, { fallbackSender });
assertIsTransactionWithSingleSendingSigner(myTransaction);
const myTransactionSignature = await signAndSendTransactionWithSigners(myTransaction);
```
Here as well, composite transaction signers are treated such that at least one sending signer is used if any. When a `TransactionSigner` implements more than one interface, use it as a:
Alternatively, you may use the `isTransactionWithSingleSendingSigner()` function to provide a fallback in case the transaction does not contain any sending signer.
- `TransactionSendingSigner`, if no other `TransactionSendingSigner` exist.
- `TransactionModifyingSigner`, if no other `TransactionModifyingSigner` exist.
- `TransactionPartialSigner`, otherwise.
```ts
let transactionSignature: SignatureBytes;
if (isTransactionWithSingleSendingSigner(transaction)) {
transactionSignature = await signAndSendTransactionWithSigners(transaction);
} else {
const signedTransaction = await signTransactionWithSigners(transaction);
const encodedTransaction = getBase64EncodedWireTransaction(signedTransaction);
transactionSignature = await rpc.sendTransaction(encodedTransaction).send();
}
```

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc