Socket
Socket
Sign inDemoInstall

@solana/signers

Package Overview
Dependencies
Maintainers
14
Versions
840
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.4c1874d to 2.0.0-experimental.65e87b8

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

52

dist/index.browser.js

@@ -11,2 +11,6 @@ import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

deduplicated[signer.address] = signer;
} else if (deduplicated[signer.address] !== signer) {
throw new Error(
`Multiple distinct signers were identified for address "${signer.address}". Please ensure that you are using the same signer instance for each address.`
);
}

@@ -97,2 +101,12 @@ });

// src/noop-signer.ts
function createNoopSigner(address) {
const out = {
address,
signMessages: async (messages) => messages.map(() => Object.freeze({})),
signTransactions: async (transactions) => transactions.map(() => Object.freeze({}))
};
return Object.freeze(out);
}
// src/transaction-modifying-signer.ts

@@ -129,3 +143,4 @@ function isTransactionModifyingSigner(value) {

// src/sign-transaction.ts
async function partiallySignTransactionWithSigners(transaction, signers = []) {
async function partiallySignTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const { partialSigners, modifyingSigners } = categorizeTransactionSigners(

@@ -135,30 +150,35 @@ deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers]),

);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners, config.abortSignal);
}
async function signTransactionWithSigners(transaction, signers = []) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, signers);
async function signTransactionWithSigners(transaction, config = {}) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, config);
assertTransactionIsFullySigned(signedTransaction);
return signedTransaction;
}
async function signAndSendTransactionWithSigners(transaction, signers = [], fallbackSender) {
async function signAndSendTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const abortSignal = config.abortSignal;
const { partialSigners, modifyingSigners, sendingSigner } = categorizeTransactionSigners(
deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers])
);
abortSignal?.throwIfAborted();
const signedTransaction = await signModifyingAndPartialTransactionSigners(
transaction,
modifyingSigners,
partialSigners
partialSigners,
abortSignal
);
if (sendingSigner) {
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction]);
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
}
if (fallbackSender) {
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return fallbackSender(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
}
function categorizeTransactionSigners(signers, options) {
const identifySendingSigner = options?.identifySendingSigner ?? true;
function categorizeTransactionSigners(signers, config = {}) {
const identifySendingSigner = config.identifySendingSigner ?? true;
const sendingSigner = identifySendingSigner ? identifyTransactionSendingSigner(signers) : null;

@@ -193,10 +213,12 @@ const otherSigners = signers.filter(

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

@@ -225,4 +247,4 @@ })

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
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 };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.browser.js.map

@@ -11,2 +11,6 @@ this.globalThis = this.globalThis || {};

deduplicated[signer.address] = signer;
} else if (deduplicated[signer.address] !== signer) {
throw new Error(
`Multiple distinct signers were identified for address "${signer.address}". Please ensure that you are using the same signer instance for each address.`
);
}

@@ -1188,2 +1192,12 @@ });

// src/noop-signer.ts
function createNoopSigner(address2) {
const out = {
address: address2,
signMessages: async (messages) => messages.map(() => Object.freeze({})),
signTransactions: async (transactions) => transactions.map(() => Object.freeze({}))
};
return Object.freeze(out);
}
// src/transaction-modifying-signer.ts

@@ -1220,3 +1234,5 @@ function isTransactionModifyingSigner(value) {

// src/sign-transaction.ts
async function partiallySignTransactionWithSigners(transaction, signers = []) {
async function partiallySignTransactionWithSigners(transaction, config = {}) {
var _a;
const signers = (_a = config.signers) != null ? _a : [];
const { partialSigners, modifyingSigners } = categorizeTransactionSigners(

@@ -1226,31 +1242,37 @@ deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers]),

);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners, config.abortSignal);
}
async function signTransactionWithSigners(transaction, signers = []) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, signers);
async function signTransactionWithSigners(transaction, config = {}) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, config);
assertTransactionIsFullySigned(signedTransaction);
return signedTransaction;
}
async function signAndSendTransactionWithSigners(transaction, signers = [], fallbackSender) {
async function signAndSendTransactionWithSigners(transaction, config = {}) {
var _a;
const signers = (_a = config.signers) != null ? _a : [];
const abortSignal = config.abortSignal;
const { partialSigners, modifyingSigners, sendingSigner } = categorizeTransactionSigners(
deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers])
);
abortSignal == null ? void 0 : abortSignal.throwIfAborted();
const signedTransaction = await signModifyingAndPartialTransactionSigners(
transaction,
modifyingSigners,
partialSigners
partialSigners,
abortSignal
);
if (sendingSigner) {
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction]);
abortSignal == null ? void 0 : abortSignal.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
}
if (fallbackSender) {
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return fallbackSender(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
}
function categorizeTransactionSigners(signers, options) {
function categorizeTransactionSigners(signers, config = {}) {
var _a;
const identifySendingSigner = (_a = options == null ? void 0 : options.identifySendingSigner) != null ? _a : true;
const identifySendingSigner = (_a = config.identifySendingSigner) != null ? _a : true;
const sendingSigner = identifySendingSigner ? identifyTransactionSendingSigner(signers) : null;

@@ -1285,11 +1307,13 @@ const otherSigners = signers.filter(

}
async function signModifyingAndPartialTransactionSigners(transaction, modifyingSigners = [], partialSigners = []) {
async function signModifyingAndPartialTransactionSigners(transaction, modifyingSigners = [], partialSigners = [], abortSignal) {
var _a;
const modifiedTransaction = await modifyingSigners.reduce(async (transaction2, modifyingSigner) => {
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2]);
abortSignal == null ? void 0 : abortSignal.throwIfAborted();
const [tx] = await modifyingSigner.modifyAndSignTransactions([await transaction2], { abortSignal });
return Object.freeze(tx);
}, Promise.resolve(transaction));
abortSignal == null ? void 0 : abortSignal.throwIfAborted();
const signatureDictionaries = await Promise.all(
partialSigners.map(async (partialSigner) => {
const [signatures] = await partialSigner.signTransactions([modifiedTransaction]);
const [signatures] = await partialSigner.signTransactions([modifiedTransaction], { abortSignal });
return signatures;

@@ -1326,2 +1350,3 @@ })

exports.assertIsTransactionSigner = assertIsTransactionSigner;
exports.createNoopSigner = createNoopSigner;
exports.createSignableMessage = createSignableMessage;

@@ -1328,0 +1353,0 @@ exports.createSignerFromKeyPair = createSignerFromKeyPair;

@@ -11,2 +11,6 @@ import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

deduplicated[signer.address] = signer;
} else if (deduplicated[signer.address] !== signer) {
throw new Error(
`Multiple distinct signers were identified for address "${signer.address}". Please ensure that you are using the same signer instance for each address.`
);
}

@@ -97,2 +101,12 @@ });

// src/noop-signer.ts
function createNoopSigner(address) {
const out = {
address,
signMessages: async (messages) => messages.map(() => Object.freeze({})),
signTransactions: async (transactions) => transactions.map(() => Object.freeze({}))
};
return Object.freeze(out);
}
// src/transaction-modifying-signer.ts

@@ -129,3 +143,4 @@ function isTransactionModifyingSigner(value) {

// src/sign-transaction.ts
async function partiallySignTransactionWithSigners(transaction, signers = []) {
async function partiallySignTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const { partialSigners, modifyingSigners } = categorizeTransactionSigners(

@@ -135,30 +150,35 @@ deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers]),

);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners, config.abortSignal);
}
async function signTransactionWithSigners(transaction, signers = []) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, signers);
async function signTransactionWithSigners(transaction, config = {}) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, config);
assertTransactionIsFullySigned(signedTransaction);
return signedTransaction;
}
async function signAndSendTransactionWithSigners(transaction, signers = [], fallbackSender) {
async function signAndSendTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const abortSignal = config.abortSignal;
const { partialSigners, modifyingSigners, sendingSigner } = categorizeTransactionSigners(
deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers])
);
abortSignal?.throwIfAborted();
const signedTransaction = await signModifyingAndPartialTransactionSigners(
transaction,
modifyingSigners,
partialSigners
partialSigners,
abortSignal
);
if (sendingSigner) {
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction]);
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
}
if (fallbackSender) {
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return fallbackSender(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
}
function categorizeTransactionSigners(signers, options) {
const identifySendingSigner = options?.identifySendingSigner ?? true;
function categorizeTransactionSigners(signers, config = {}) {
const identifySendingSigner = config.identifySendingSigner ?? true;
const sendingSigner = identifySendingSigner ? identifyTransactionSendingSigner(signers) : null;

@@ -193,10 +213,12 @@ const otherSigners = signers.filter(

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

@@ -225,4 +247,4 @@ })

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
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 };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.native.js.map

@@ -11,2 +11,6 @@ import { getAddressFromPublicKey, isAddress } from '@solana/addresses';

deduplicated[signer.address] = signer;
} else if (deduplicated[signer.address] !== signer) {
throw new Error(
`Multiple distinct signers were identified for address "${signer.address}". Please ensure that you are using the same signer instance for each address.`
);
}

@@ -97,2 +101,12 @@ });

// src/noop-signer.ts
function createNoopSigner(address) {
const out = {
address,
signMessages: async (messages) => messages.map(() => Object.freeze({})),
signTransactions: async (transactions) => transactions.map(() => Object.freeze({}))
};
return Object.freeze(out);
}
// src/transaction-modifying-signer.ts

@@ -129,3 +143,4 @@ function isTransactionModifyingSigner(value) {

// src/sign-transaction.ts
async function partiallySignTransactionWithSigners(transaction, signers = []) {
async function partiallySignTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const { partialSigners, modifyingSigners } = categorizeTransactionSigners(

@@ -135,30 +150,35 @@ deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers]),

);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners);
return signModifyingAndPartialTransactionSigners(transaction, modifyingSigners, partialSigners, config.abortSignal);
}
async function signTransactionWithSigners(transaction, signers = []) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, signers);
async function signTransactionWithSigners(transaction, config = {}) {
const signedTransaction = await partiallySignTransactionWithSigners(transaction, config);
assertTransactionIsFullySigned(signedTransaction);
return signedTransaction;
}
async function signAndSendTransactionWithSigners(transaction, signers = [], fallbackSender) {
async function signAndSendTransactionWithSigners(transaction, config = {}) {
const signers = config.signers ?? [];
const abortSignal = config.abortSignal;
const { partialSigners, modifyingSigners, sendingSigner } = categorizeTransactionSigners(
deduplicateSigners([...getSignersFromTransaction(transaction).filter(isTransactionSigner), ...signers])
);
abortSignal?.throwIfAborted();
const signedTransaction = await signModifyingAndPartialTransactionSigners(
transaction,
modifyingSigners,
partialSigners
partialSigners,
abortSignal
);
if (sendingSigner) {
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction]);
abortSignal?.throwIfAborted();
const [signature] = await sendingSigner.signAndSendTransactions([signedTransaction], { abortSignal });
return signature;
}
if (fallbackSender) {
if (config.fallbackSender) {
assertTransactionIsFullySigned(signedTransaction);
return fallbackSender(signedTransaction);
return config.fallbackSender(signedTransaction);
}
throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.");
}
function categorizeTransactionSigners(signers, options) {
const identifySendingSigner = options?.identifySendingSigner ?? true;
function categorizeTransactionSigners(signers, config = {}) {
const identifySendingSigner = config.identifySendingSigner ?? true;
const sendingSigner = identifySendingSigner ? identifyTransactionSendingSigner(signers) : null;

@@ -193,10 +213,12 @@ const otherSigners = signers.filter(

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

@@ -225,4 +247,4 @@ })

export { assertIsKeyPairSigner, assertIsMessageModifyingSigner, assertIsMessagePartialSigner, assertIsMessageSigner, assertIsTransactionModifyingSigner, assertIsTransactionPartialSigner, assertIsTransactionSendingSigner, assertIsTransactionSigner, createSignableMessage, createSignerFromKeyPair, generateKeyPairSigner, getSignersFromInstruction, getSignersFromTransaction, isKeyPairSigner, isMessageModifyingSigner, isMessagePartialSigner, isMessageSigner, isTransactionModifyingSigner, isTransactionPartialSigner, isTransactionSendingSigner, isTransactionSigner, partiallySignTransactionWithSigners, signAndSendTransactionWithSigners, signTransactionWithSigners };
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 };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.node.js.map

@@ -5,7 +5,7 @@ this.globalThis = this.globalThis || {};

function b(e){let n={};return e.forEach(r=>{n[r.address]||(n[r.address]=r);}),Object.values(n)}function Be(e){var n;return b(((n=e.accounts)!=null?n:[]).flatMap(r=>"signer"in r?r.signer:[]))}function _(e){return b(e.instructions.flatMap(Be))}function v(e,n,r=0){if(n.length-r<=0)throw new Error(`Codec [${e}] cannot decode empty byte arrays.`)}function A(e,n,r,t=0){let i=r.length-t;if(i<n)throw new Error(`Codec [${e}] expected ${n} bytes, got ${i}.`)}var w=e=>{let n=e.filter(o=>o.length);if(n.length===0)return e.length?e[0]:new Uint8Array;if(n.length===1)return n[0];let r=n.reduce((o,s)=>o+s.length,0),t=new Uint8Array(r),i=0;return n.forEach(o=>{t.set(o,i),i+=o.length;}),t},Me=(e,n)=>{if(e.length>=n)return e;let r=new Uint8Array(n).fill(0);return r.set(e),r},W=(e,n)=>Me(e.length<=n?e:e.slice(0,n),n);function se(e,n,r){return {description:r!=null?r:`fixed(${n}, ${e.description})`,fixedSize:n,maxSize:n}}function k(e,n,r){return {...se(e,n,r),encode:t=>W(e.encode(t),n)}}function j(e,n,r){return {...se(e,n,r),decode:(t,i=0)=>{A("fixCodec",n,t,i),(i>0||t.length>n)&&(t=t.slice(i,i+n)),e.fixedSize!==null&&(t=W(t,e.fixedSize));let[o]=e.decode(t,0);return [o,i+n]}}}function I(e,n){return {description:e.description,encode:r=>e.encode(n(r)),fixedSize:e.fixedSize,maxSize:e.maxSize}}function ae(e,n,r,t){if(t<n||t>r)throw new Error(`Codec [${e}] expected number to be in the range [${n}, ${r}], got ${t}.`)}function ce(e){var t;let n,r=e.name;return e.size>1&&(n=!("endian"in e.config)||e.config.endian===0,r+=n?"(le)":"(be)"),{description:(t=e.config.description)!=null?t:r,fixedSize:e.size,littleEndian:n,maxSize:e.size}}function de(e){let n=ce(e);return {description:n.description,encode(r){e.range&&ae(e.name,e.range[0],e.range[1],r);let t=new ArrayBuffer(e.size);return e.set(new DataView(t),r,n.littleEndian),new Uint8Array(t)},fixedSize:n.fixedSize,maxSize:n.maxSize}}function ke(e){let n=ce(e);return {decode(r,t=0){v(n.description,r,t),A(n.description,e.size,r,t);let i=new DataView(Pe(r,t,e.size));return [e.get(i,n.littleEndian),t+e.size]},description:n.description,fixedSize:n.fixedSize,maxSize:n.maxSize}}function Pe(e,n,r){let t=e.byteOffset+(n!=null?n:0),i=r!=null?r:e.byteLength;return e.buffer.slice(t,t+i)}var S=(e={})=>{var n;return {description:(n=e.description)!=null?n:"shortU16",encode:r=>{ae("shortU16",0,65535,r);let t=[0];for(let i=0;;i+=1){let o=r>>i*7;if(o===0)break;let s=127&o;t[i]=s,i>0&&(t[i-1]|=128);}return new Uint8Array(t)},fixedSize:null,maxSize:3}};var $=(e={})=>de({config:e,name:"u32",range:[0,+"0xffffffff"],set:(n,r,t)=>n.setUint32(0,r,t),size:4}),K=(e={})=>ke({config:e,get:(n,r)=>n.getUint32(0,r),name:"u32",size:4});var y=(e={})=>de({config:e,name:"u8",range:[0,+"0xff"],set:(n,r)=>n.setUint8(0,r),size:1});function $e(e,n,r=n){if(!n.match(new RegExp(`^[${e}]*$`)))throw new Error(`Expected a string of base ${e.length}, got [${r}].`)}var Ue=e=>{let n=e.length,r=BigInt(n);return {description:`base${n}`,encode(t){if($e(e,t),t==="")return new Uint8Array;let i=[...t],o=i.findIndex(m=>m!==e[0]);o=o===-1?i.length:o;let s=Array(o).fill(0);if(o===i.length)return Uint8Array.from(s);let a=i.slice(o),c=0n,d=1n;for(let m=a.length-1;m>=0;m-=1)c+=d*BigInt(e.indexOf(a[m])),d*=r;let l=[];for(;c>0n;)l.unshift(Number(c%256n)),c/=256n;return Uint8Array.from(s.concat(l))},fixedSize:null,maxSize:null}},Ne=e=>{let n=e.length,r=BigInt(n);return {decode(t,i=0){let o=i===0?t:t.slice(i);if(o.length===0)return ["",0];let s=o.findIndex(l=>l!==0);s=s===-1?o.length:s;let a=e[0].repeat(s);if(s===o.length)return [a,t.length];let c=o.slice(s).reduce((l,m)=>l*256n+BigInt(m),0n),d=[];for(;c>0n;)d.unshift(e[Number(c%r)]),c/=r;return [a+d.join(""),t.length]},description:`base${n}`,fixedSize:null,maxSize:null}};var ue="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",U=()=>Ue(ue),V=()=>Ne(ue);var Re=e=>e.replace(/\u0000/g,"");var Oe=globalThis.TextDecoder,Le=globalThis.TextEncoder,Fe=()=>{let e;return {description:"utf8",encode:n=>new Uint8Array((e||(e=new Le)).encode(n)),fixedSize:null,maxSize:null}},_e=()=>{let e;return {decode(n,r=0){let t=(e||(e=new Oe)).decode(n.slice(r));return [Re(t),n.length]},description:"utf8",fixedSize:null,maxSize:null}};var N=(e={})=>{var i,o,s;let n=(i=e.size)!=null?i:$(),r=(o=e.encoding)!=null?o:Fe(),t=(s=e.description)!=null?s:`string(${r.description}; ${ge(n)})`;return n==="variable"?{...r,description:t}:typeof n=="number"?k(r,n,t):{description:t,encode:a=>{let c=r.encode(a),d=n.encode(c.length);return w([d,c])},fixedSize:null,maxSize:null}},H=(e={})=>{var i,o,s;let n=(i=e.size)!=null?i:K(),r=(o=e.encoding)!=null?o:_e(),t=(s=e.description)!=null?s:`string(${r.description}; ${ge(n)})`;return n==="variable"?{...r,description:t}:typeof n=="number"?j(r,n,t):{decode:(a,c=0)=>{v("string",a,c);let[d,l]=n.decode(a,c),m=Number(d);c=l;let oe=a.slice(c,c+m);A("string",m,oe);let[Ce,De]=r.decode(oe);return c+=De,[Ce,c]},description:t,fixedSize:null,maxSize:null}};function ge(e){return typeof e=="object"?e.description:`${e}`}function G(){if(!globalThis.isSecureContext)throw new Error("Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}var h;async function We(e){return h===void 0&&(h=new Promise(n=>{e.generateKey("Ed25519",!1,["sign","verify"]).catch(()=>{n(h=!1);}).then(()=>{n(h=!0);});})),typeof h=="boolean"?h:await h}async function le(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.generateKey)!="function")throw new Error("No key generation implementation could be found");if(!await We(globalThis.crypto.subtle))throw new Error(`This runtime does not support the generation of Ed25519 key pairs.
function A(e){let n={};return e.forEach(r=>{if(!n[r.address])n[r.address]=r;else if(n[r.address]!==r)throw new Error(`Multiple distinct signers were identified for address "${r.address}". Please ensure that you are using the same signer instance for each address.`)}),Object.values(n)}function De(e){var n;return A(((n=e.accounts)!=null?n:[]).flatMap(r=>"signer"in r?r.signer:[]))}function _(e){return A(e.instructions.flatMap(De))}function I(e,n,r=0){if(n.length-r<=0)throw new Error(`Codec [${e}] cannot decode empty byte arrays.`)}function b(e,n,r,t=0){let i=r.length-t;if(i<n)throw new Error(`Codec [${e}] expected ${n} bytes, got ${i}.`)}var w=e=>{let n=e.filter(o=>o.length);if(n.length===0)return e.length?e[0]:new Uint8Array;if(n.length===1)return n[0];let r=n.reduce((o,s)=>o+s.length,0),t=new Uint8Array(r),i=0;return n.forEach(o=>{t.set(o,i),i+=o.length;}),t},Me=(e,n)=>{if(e.length>=n)return e;let r=new Uint8Array(n).fill(0);return r.set(e),r},W=(e,n)=>Me(e.length<=n?e:e.slice(0,n),n);function se(e,n,r){return {description:r!=null?r:`fixed(${n}, ${e.description})`,fixedSize:n,maxSize:n}}function k(e,n,r){return {...se(e,n,r),encode:t=>W(e.encode(t),n)}}function j(e,n,r){return {...se(e,n,r),decode:(t,i=0)=>{b("fixCodec",n,t,i),(i>0||t.length>n)&&(t=t.slice(i,i+n)),e.fixedSize!==null&&(t=W(t,e.fixedSize));let[o]=e.decode(t,0);return [o,i+n]}}}function v(e,n){return {description:e.description,encode:r=>e.encode(n(r)),fixedSize:e.fixedSize,maxSize:e.maxSize}}function ae(e,n,r,t){if(t<n||t>r)throw new Error(`Codec [${e}] expected number to be in the range [${n}, ${r}], got ${t}.`)}function ce(e){var t;let n,r=e.name;return e.size>1&&(n=!("endian"in e.config)||e.config.endian===0,r+=n?"(le)":"(be)"),{description:(t=e.config.description)!=null?t:r,fixedSize:e.size,littleEndian:n,maxSize:e.size}}function de(e){let n=ce(e);return {description:n.description,encode(r){e.range&&ae(e.name,e.range[0],e.range[1],r);let t=new ArrayBuffer(e.size);return e.set(new DataView(t),r,n.littleEndian),new Uint8Array(t)},fixedSize:n.fixedSize,maxSize:n.maxSize}}function ke(e){let n=ce(e);return {decode(r,t=0){I(n.description,r,t),b(n.description,e.size,r,t);let i=new DataView(Pe(r,t,e.size));return [e.get(i,n.littleEndian),t+e.size]},description:n.description,fixedSize:n.fixedSize,maxSize:n.maxSize}}function Pe(e,n,r){let t=e.byteOffset+(n!=null?n:0),i=r!=null?r:e.byteLength;return e.buffer.slice(t,t+i)}var S=(e={})=>{var n;return {description:(n=e.description)!=null?n:"shortU16",encode:r=>{ae("shortU16",0,65535,r);let t=[0];for(let i=0;;i+=1){let o=r>>i*7;if(o===0)break;let s=127&o;t[i]=s,i>0&&(t[i-1]|=128);}return new Uint8Array(t)},fixedSize:null,maxSize:3}};var $=(e={})=>de({config:e,name:"u32",range:[0,+"0xffffffff"],set:(n,r,t)=>n.setUint32(0,r,t),size:4}),K=(e={})=>ke({config:e,get:(n,r)=>n.getUint32(0,r),name:"u32",size:4});var y=(e={})=>de({config:e,name:"u8",range:[0,+"0xff"],set:(n,r)=>n.setUint8(0,r),size:1});function $e(e,n,r=n){if(!n.match(new RegExp(`^[${e}]*$`)))throw new Error(`Expected a string of base ${e.length}, got [${r}].`)}var Ue=e=>{let n=e.length,r=BigInt(n);return {description:`base${n}`,encode(t){if($e(e,t),t==="")return new Uint8Array;let i=[...t],o=i.findIndex(m=>m!==e[0]);o=o===-1?i.length:o;let s=Array(o).fill(0);if(o===i.length)return Uint8Array.from(s);let a=i.slice(o),c=0n,d=1n;for(let m=a.length-1;m>=0;m-=1)c+=d*BigInt(e.indexOf(a[m])),d*=r;let u=[];for(;c>0n;)u.unshift(Number(c%256n)),c/=256n;return Uint8Array.from(s.concat(u))},fixedSize:null,maxSize:null}},Ne=e=>{let n=e.length,r=BigInt(n);return {decode(t,i=0){let o=i===0?t:t.slice(i);if(o.length===0)return ["",0];let s=o.findIndex(u=>u!==0);s=s===-1?o.length:s;let a=e[0].repeat(s);if(s===o.length)return [a,t.length];let c=o.slice(s).reduce((u,m)=>u*256n+BigInt(m),0n),d=[];for(;c>0n;)d.unshift(e[Number(c%r)]),c/=r;return [a+d.join(""),t.length]},description:`base${n}`,fixedSize:null,maxSize:null}};var ue="123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz",U=()=>Ue(ue),V=()=>Ne(ue);var Oe=e=>e.replace(/\u0000/g,"");var Re=globalThis.TextDecoder,Le=globalThis.TextEncoder,Fe=()=>{let e;return {description:"utf8",encode:n=>new Uint8Array((e||(e=new Le)).encode(n)),fixedSize:null,maxSize:null}},_e=()=>{let e;return {decode(n,r=0){let t=(e||(e=new Re)).decode(n.slice(r));return [Oe(t),n.length]},description:"utf8",fixedSize:null,maxSize:null}};var N=(e={})=>{var i,o,s;let n=(i=e.size)!=null?i:$(),r=(o=e.encoding)!=null?o:Fe(),t=(s=e.description)!=null?s:`string(${r.description}; ${ge(n)})`;return n==="variable"?{...r,description:t}:typeof n=="number"?k(r,n,t):{description:t,encode:a=>{let c=r.encode(a),d=n.encode(c.length);return w([d,c])},fixedSize:null,maxSize:null}},H=(e={})=>{var i,o,s;let n=(i=e.size)!=null?i:K(),r=(o=e.encoding)!=null?o:_e(),t=(s=e.description)!=null?s:`string(${r.description}; ${ge(n)})`;return n==="variable"?{...r,description:t}:typeof n=="number"?j(r,n,t):{decode:(a,c=0)=>{I("string",a,c);let[d,u]=n.decode(a,c),m=Number(d);c=u;let oe=a.slice(c,c+m);b("string",m,oe);let[Ce,Be]=r.decode(oe);return c+=Be,[Ce,c]},description:t,fixedSize:null,maxSize:null}};function ge(e){return typeof e=="object"?e.description:`${e}`}function G(){if(!globalThis.isSecureContext)throw new Error("Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}var h;async function We(e){return h===void 0&&(h=new Promise(n=>{e.generateKey("Ed25519",!1,["sign","verify"]).catch(()=>{n(h=!1);}).then(()=>{n(h=!0);});})),typeof h=="boolean"?h:await h}async function fe(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.generateKey)!="function")throw new Error("No key generation implementation could be found");if(!await We(globalThis.crypto.subtle))throw new Error(`This runtime does not support the generation of Ed25519 key pairs.
Install and import \`@solana/webcrypto-ed25519-polyfill\` before generating keys in environments that do not support Ed25519.
For a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20`)}async function fe(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.exportKey)!="function")throw new Error("No key export implementation could be found")}async function me(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.sign)!="function")throw new Error("No signing implementation could be found")}var Y,X;function q(){return Y||(Y=U()),Y}function je(){return X||(X=V()),X}function pe(e){return !(e.length<32||e.length>44||q().encode(e).byteLength!==32)}function Se(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let t=q().encode(e).byteLength;if(t!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${t}`)}catch(n){throw new Error(`\`${e}\` is not a base-58 encoded address`,{cause:n})}}function Ke(e){return Se(e),e}function Z(e){var n;return I(N({description:(n=e==null?void 0:e.description)!=null?n:"Address",encoding:q(),size:32}),r=>Ke(r))}function ye(e){var n;return H({description:(n=e==null?void 0:e.description)!=null?n:"Address",encoding:je(),size:32})}function R(){return new Intl.Collator("en",{caseFirst:"lower",ignorePunctuation:!1,localeMatcher:"best fit",numeric:!1,sensitivity:"variant",usage:"sort"}).compare}async function O(e){if(await fe(),e.type!=="public"||e.algorithm.name!=="Ed25519")throw new Error("The `CryptoKey` must be an `Ed25519` public key");let n=await crypto.subtle.exportKey("raw",e),[r]=ye().decode(new Uint8Array(n));return r}async function he(){return await le(),await crypto.subtle.generateKey("Ed25519",!1,["sign","verify"])}async function L(e,n){await me();let r=await crypto.subtle.sign("Ed25519",e,n);return new Uint8Array(r)}function J(e){return e.reduce((n,r)=>n===null||r===null?null:n+r,0)}function He(e){return typeof e=="object"?e.description:`${e}`}function Te(e,n){if(typeof e!="number")return null;if(e===0)return 0;let r=J(n);return r===null?null:r*e}function Ge(e,n){return typeof e=="object"?e.encode(n):new Uint8Array}function Ye(e,n,r){if(n!==r)throw new Error(`Expected [${e}] to have ${n} items, got ${r}.`)}function Xe(e,n,r){if(n==="remainder"&&e.fixedSize===null)throw new Error('Codecs of "remainder" size must have fixed-size items.');return {description:r!=null?r:`array(${e.description}; ${He(n)})`,fixedSize:Te(n,[e.fixedSize]),maxSize:Te(n,[e.maxSize])}}function T(e,n={}){var t;let r=(t=n.size)!=null?t:$();return {...Xe(e,r,n.description),encode:i=>(typeof r=="number"&&Ye("array",r,i.length),w([Ge(r,i.length),...i.map(o=>e.encode(o))]))}}function xe(e={}){var o,s;let n=(o=e.size)!=null?o:"variable",r=typeof n=="object"?n.description:`${n}`,t=(s=e.description)!=null?s:`bytes(${r})`,i={description:t,encode:a=>a,fixedSize:null,maxSize:null};return n==="variable"?i:typeof n=="number"?k(i,n,t):{...i,encode:a=>{let c=i.encode(a),d=n.encode(c.length);return w([d,c])}}}function qe(e,n){let r=e.map(([t,i])=>`${String(t)}: ${i.description}`).join(", ");return {description:n!=null?n:`struct(${r})`,fixedSize:J(e.map(([,t])=>t.fixedSize)),maxSize:J(e.map(([,t])=>t.maxSize))}}function z(e,n={}){return {...qe(e,n.description),encode:r=>{let t=e.map(([i,o])=>o.encode(r[i]));return w(t)}}}var C=(e=>(e[e.WRITABLE_SIGNER=3]="WRITABLE_SIGNER",e[e.READONLY_SIGNER=2]="READONLY_SIGNER",e[e.WRITABLE=1]="WRITABLE",e[e.READONLY=0]="READONLY",e))(C||{}),Ze=1;function E(e){return e>=2}function D(e){return (e&Ze)!==0}function be(e,n){return e|n}function Ae(e,n,r){var t;e[n]=r((t=e[n])!=null?t:{role:C.READONLY});}var g=Symbol("AddressMapTypeProperty");function Je(e,n){let r={[e]:{[g]:0,role:C.WRITABLE_SIGNER}},t=new Set;for(let i of n){Ae(r,i.programAddress,s=>{if(t.add(i.programAddress),g in s){if(D(s.role))switch(s[g]){case 0:throw new Error(`This transaction includes an address (\`${i.programAddress}\`) which is both invoked and set as the fee payer. Program addresses may not pay fees.`);default:throw new Error(`This transaction includes an address (\`${i.programAddress}\`) which is both invoked and marked writable. Program addresses may not be writable.`)}if(s[g]===2)return s}return {[g]:2,role:C.READONLY}});let o;if(i.accounts)for(let s of i.accounts)Ae(r,s.address,a=>{let{address:c,...d}=s;if(g in a)switch(a[g]){case 0:return a;case 1:{let l=be(a.role,d.role);if("lookupTableAddress"in d){if(a.lookupTableAddress!==d.lookupTableAddress&&(o||(o=R()))(d.lookupTableAddress,a.lookupTableAddress)<0)return {[g]:1,...d,role:l}}else if(E(d.role))return {[g]:2,role:l};return a.role!==l?{...a,role:l}:a}case 2:{let l=be(a.role,d.role);if(t.has(s.address)){if(D(d.role))throw new Error(`This transaction includes an address (\`${s.address}\`) which is both invoked and marked writable. Program addresses may not be writable.`);return a.role!==l?{...a,role:l}:a}else return "lookupTableAddress"in d&&!E(a.role)?{...d,[g]:1,role:l}:a.role!==l?{...a,role:l}:a}}return "lookupTableAddress"in d?{...d,[g]:1}:{...d,[g]:2}});}return r}function Qe(e){let n;return Object.entries(e).sort(([t,i],[o,s])=>{if(i[g]!==s[g]){if(i[g]===0)return -1;if(s[g]===0)return 1;if(i[g]===2)return -1;if(s[g]===2)return 1}let a=E(i.role);if(a!==E(s.role))return a?-1:1;let c=D(i.role);return c!==D(s.role)?c?-1:1:(n||(n=R()),i[g]===1&&s[g]===1&&i.lookupTableAddress!==s.lookupTableAddress?n(i.lookupTableAddress,s.lookupTableAddress):n(t,o))}).map(([t,i])=>({address:t,...i}))}function en(e){var r;let n={};for(let t of e){if(!("lookupTableAddress"in t))continue;let i=n[r=t.lookupTableAddress]||(n[r]={readableIndices:[],writableIndices:[]});t.role===C.WRITABLE?i.writableIndices.push(t.addressIndex):i.readableIndices.push(t.addressIndex);}return Object.keys(n).sort(R()).map(t=>({lookupTableAddress:t,...n[t]}))}function nn(e){let n=0,r=0,t=0;for(let i of e){if("lookupTableAddress"in i)break;let o=D(i.role);E(i.role)?(t++,o||r++):o||n++;}return {numReadonlyNonSignerAccounts:n,numReadonlySignerAccounts:r,numSignerAccounts:t}}function rn(e){let n={};for(let[r,t]of e.entries())n[t.address]=r;return n}function tn(e,n){let r=rn(n);return e.map(({accounts:t,data:i,programAddress:o})=>({programAddressIndex:r[o],...t?{accountIndices:t.map(({address:s})=>r[s])}:null,...i?{data:i}:null}))}function on(e){return "nonce"in e?e.nonce:e.blockhash}function sn(e){let n=e.findIndex(t=>"lookupTableAddress"in t);return (n===-1?e:e.slice(0,n)).map(({address:t})=>t)}function an(e){let n=Je(e.feePayer,e.instructions),r=Qe(n);return {...e.version!=="legacy"?{addressTableLookups:en(r)}:null,header:nn(r),instructions:tn(e.instructions,r),lifetimeToken:on(e.lifetimeConstraint),staticAccounts:sn(r),version:e.version}}var cn="lookupTableAddress",dn="writableIndices",un="readableIndices",gn="addressTableLookup",Q;function ln(){return Q||(Q=z([["lookupTableAddress",Z({description:cn})],["writableIndices",T(y(),{description:dn,size:S()})],["readableIndices",T(y(),{description:un,size:S()})]],{description:gn})),Q}var ee;function fn(){return ee||(ee=y()),ee}function ne(e){let n=fn();return {...n,description:e!=null?e:n.description}}var mn=void 0,pn=void 0,Sn=void 0,yn=void 0;function hn(){return z([["numSignerAccounts",ne(mn)],["numReadonlySignerAccounts",ne(pn)],["numReadonlyNonSignerAccounts",ne(Sn)]],{description:yn})}var Tn="programAddressIndex",xn=void 0,bn="accountIndices",An="data",re;function wn(){return re||(re=I(z([["programAddressIndex",y({description:Tn})],["accountIndices",T(y({description:xn}),{description:bn,size:S()})],["data",xe({description:An,size:S()})]]),e=>{var n,r;return e.accountIndices!==void 0&&e.data!==void 0?e:{...e,accountIndices:(n=e.accountIndices)!=null?n:[],data:(r=e.data)!=null?r:new Uint8Array(0)}})),re}var zn=128,En={description:"",fixedSize:null,maxSize:1};function vn(e){if(e==="legacy")return new Uint8Array;if(e<0||e>127)throw new Error(`Transaction version must be in the range [0, 127]. \`${e}\` given.`);return new Uint8Array([e|zn])}function In(){return {...En,encode:vn}}var Cn="staticAccounts",Dn="lifetimeToken",Bn="instructions",Mn="addressTableLookups";function kn(){return z(we())}function Pn(){return I(z([...we(),["addressTableLookups",$n()]]),e=>{var n;return e.version==="legacy"?e:{...e,addressTableLookups:(n=e.addressTableLookups)!=null?n:[]}})}function we(){return [["version",In()],["header",hn()],["staticAccounts",T(Z(),{description:Cn,size:S()})],["lifetimeToken",N({description:Dn,encoding:U(),size:32})],["instructions",T(wn(),{description:Bn,size:S()})]]}function $n(){return T(ln(),{description:Mn,size:S()})}var Un="message";function Nn(){return {description:Un,encode:e=>e.version==="legacy"?kn().encode(e):Pn().encode(e),fixedSize:null,maxSize:null}}async function ze(e,n){let r=an(n),t="signatures"in n?{...n.signatures}:{},i=Nn().encode(r),o=await Promise.all(e.map(a=>Promise.all([O(a.publicKey),L(a.privateKey,i)])));for(let[a,c]of o)t[a]=c;let s={...n,signatures:t};return Object.freeze(s),s}function te(e){let n=e.instructions.flatMap(t=>{var i,o;return (o=(i=t.accounts)==null?void 0:i.filter(s=>E(s.role)))!=null?o:[]}).map(t=>t.address);new Set([e.feePayer,...n]).forEach(t=>{if(!e.signatures[t])throw new Error(`Transaction is missing signature for address \`${t}\``)});}function B(e){return "signMessages"in e&&typeof e.signMessages=="function"}function Ur(e){if(!B(e))throw new Error("The provided value does not implement the MessagePartialSigner interface")}function p(e){return "signTransactions"in e&&typeof e.signTransactions=="function"}function Or(e){if(!p(e))throw new Error("The provided value does not implement the TransactionPartialSigner interface")}function Rn(e){return "keyPair"in e&&typeof e.keyPair=="object"&&B(e)&&p(e)}function Xr(e){if(!Rn(e))throw new Error("The provided value does not implement the KeyPairSigner interface")}async function On(e){let n=await O(e.publicKey);return Object.freeze({address:n,keyPair:e,signMessages:t=>Promise.all(t.map(async i=>Object.freeze({[n]:await L(e.privateKey,i.content)}))),signTransactions:t=>Promise.all(t.map(async i=>{let o=await ze([e],i);return Object.freeze({[n]:o.signatures[n]})}))})}async function qr(){return On(await he())}function ie(e){return pe(e.address)&&"modifyAndSignMessages"in e&&typeof e.modifyAndSignMessages=="function"}function nt(e){if(!ie(e))throw new Error("The provided value does not implement the MessageModifyingSigner interface")}function Ln(e){return B(e)||ie(e)}function ct(e){if(!Ln(e))throw new Error("The provided value does not implement any of the MessageSigner interfaces")}function x(e){return "modifyAndSignTransactions"in e&&typeof e.modifyAndSignTransactions=="function"}function gt(e){if(!x(e))throw new Error("The provided value does not implement the TransactionModifyingSigner interface")}function M(e){return "signAndSendTransactions"in e&&typeof e.signAndSendTransactions=="function"}function mt(e){if(!M(e))throw new Error("The provided value does not implement the TransactionSendingSigner interface")}function F(e){return p(e)||x(e)||M(e)}function wt(e){if(!F(e))throw new Error("The provided value does not implement any of the TransactionSigner interfaces")}async function Fn(e,n=[]){let{partialSigners:r,modifyingSigners:t}=Ee(b([..._(e).filter(F),...n]),{identifySendingSigner:!1});return ve(e,t,r)}async function Wt(e,n=[]){let r=await Fn(e,n);return te(r),r}async function jt(e,n=[],r){let{partialSigners:t,modifyingSigners:i,sendingSigner:o}=Ee(b([..._(e).filter(F),...n])),s=await ve(e,i,t);if(o){let[a]=await o.signAndSendTransactions([s]);return a}if(r)return te(s),r(s);throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.")}function Ee(e,n){var a;let t=((a=n==null?void 0:n.identifySendingSigner)!=null?a:!0)?_n(e):null,i=e.filter(c=>c!==t&&(x(c)||p(c))),o=Wn(i),s=i.filter(p).filter(c=>!o.includes(c));return Object.freeze({modifyingSigners:o,partialSigners:s,sendingSigner:t})}function _n(e){let n=e.filter(M);if(n.length===0)return null;let r=n.filter(t=>!x(t)&&!p(t));return r.length>0?r[0]:n[0]}function Wn(e){let n=e.filter(x);if(n.length===0)return [];let r=n.filter(t=>!p(t));return r.length>0?r:[n[0]]}async function ve(e,n=[],r=[]){var s;let t=await n.reduce(async(a,c)=>{let[d]=await c.modifyAndSignTransactions([await a]);return Object.freeze(d)},Promise.resolve(e)),i=await Promise.all(r.map(async a=>{let[c]=await a.signTransactions([t]);return c})),o={...t,signatures:Object.freeze(i.reduce((a,c)=>({...a,...c}),(s=t.signatures)!=null?s:{}))};return Object.freeze(o)}var Ie=globalThis.TextEncoder;function qt(e,n={}){return Object.freeze({content:typeof e=="string"?new Ie().encode(e):e,signatures:Object.freeze({...n})})}
For a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20`)}async function le(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.exportKey)!="function")throw new Error("No key export implementation could be found")}async function me(){var e;if(G(),typeof globalThis.crypto>"u"||typeof((e=globalThis.crypto.subtle)==null?void 0:e.sign)!="function")throw new Error("No signing implementation could be found")}var Y,X;function q(){return Y||(Y=U()),Y}function je(){return X||(X=V()),X}function pe(e){return !(e.length<32||e.length>44||q().encode(e).byteLength!==32)}function Se(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let t=q().encode(e).byteLength;if(t!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${t}`)}catch(n){throw new Error(`\`${e}\` is not a base-58 encoded address`,{cause:n})}}function Ke(e){return Se(e),e}function Z(e){var n;return v(N({description:(n=e==null?void 0:e.description)!=null?n:"Address",encoding:q(),size:32}),r=>Ke(r))}function ye(e){var n;return H({description:(n=e==null?void 0:e.description)!=null?n:"Address",encoding:je(),size:32})}function O(){return new Intl.Collator("en",{caseFirst:"lower",ignorePunctuation:!1,localeMatcher:"best fit",numeric:!1,sensitivity:"variant",usage:"sort"}).compare}async function R(e){if(await le(),e.type!=="public"||e.algorithm.name!=="Ed25519")throw new Error("The `CryptoKey` must be an `Ed25519` public key");let n=await crypto.subtle.exportKey("raw",e),[r]=ye().decode(new Uint8Array(n));return r}async function he(){return await fe(),await crypto.subtle.generateKey("Ed25519",!1,["sign","verify"])}async function L(e,n){await me();let r=await crypto.subtle.sign("Ed25519",e,n);return new Uint8Array(r)}function J(e){return e.reduce((n,r)=>n===null||r===null?null:n+r,0)}function He(e){return typeof e=="object"?e.description:`${e}`}function Te(e,n){if(typeof e!="number")return null;if(e===0)return 0;let r=J(n);return r===null?null:r*e}function Ge(e,n){return typeof e=="object"?e.encode(n):new Uint8Array}function Ye(e,n,r){if(n!==r)throw new Error(`Expected [${e}] to have ${n} items, got ${r}.`)}function Xe(e,n,r){if(n==="remainder"&&e.fixedSize===null)throw new Error('Codecs of "remainder" size must have fixed-size items.');return {description:r!=null?r:`array(${e.description}; ${He(n)})`,fixedSize:Te(n,[e.fixedSize]),maxSize:Te(n,[e.maxSize])}}function T(e,n={}){var t;let r=(t=n.size)!=null?t:$();return {...Xe(e,r,n.description),encode:i=>(typeof r=="number"&&Ye("array",r,i.length),w([Ge(r,i.length),...i.map(o=>e.encode(o))]))}}function xe(e={}){var o,s;let n=(o=e.size)!=null?o:"variable",r=typeof n=="object"?n.description:`${n}`,t=(s=e.description)!=null?s:`bytes(${r})`,i={description:t,encode:a=>a,fixedSize:null,maxSize:null};return n==="variable"?i:typeof n=="number"?k(i,n,t):{...i,encode:a=>{let c=i.encode(a),d=n.encode(c.length);return w([d,c])}}}function qe(e,n){let r=e.map(([t,i])=>`${String(t)}: ${i.description}`).join(", ");return {description:n!=null?n:`struct(${r})`,fixedSize:J(e.map(([,t])=>t.fixedSize)),maxSize:J(e.map(([,t])=>t.maxSize))}}function z(e,n={}){return {...qe(e,n.description),encode:r=>{let t=e.map(([i,o])=>o.encode(r[i]));return w(t)}}}var C=(e=>(e[e.WRITABLE_SIGNER=3]="WRITABLE_SIGNER",e[e.READONLY_SIGNER=2]="READONLY_SIGNER",e[e.WRITABLE=1]="WRITABLE",e[e.READONLY=0]="READONLY",e))(C||{}),Ze=1;function E(e){return e>=2}function B(e){return (e&Ze)!==0}function Ae(e,n){return e|n}function be(e,n,r){var t;e[n]=r((t=e[n])!=null?t:{role:C.READONLY});}var f=Symbol("AddressMapTypeProperty");function Je(e,n){let r={[e]:{[f]:0,role:C.WRITABLE_SIGNER}},t=new Set;for(let i of n){be(r,i.programAddress,s=>{if(t.add(i.programAddress),f in s){if(B(s.role))switch(s[f]){case 0:throw new Error(`This transaction includes an address (\`${i.programAddress}\`) which is both invoked and set as the fee payer. Program addresses may not pay fees.`);default:throw new Error(`This transaction includes an address (\`${i.programAddress}\`) which is both invoked and marked writable. Program addresses may not be writable.`)}if(s[f]===2)return s}return {[f]:2,role:C.READONLY}});let o;if(i.accounts)for(let s of i.accounts)be(r,s.address,a=>{let{address:c,...d}=s;if(f in a)switch(a[f]){case 0:return a;case 1:{let u=Ae(a.role,d.role);if("lookupTableAddress"in d){if(a.lookupTableAddress!==d.lookupTableAddress&&(o||(o=O()))(d.lookupTableAddress,a.lookupTableAddress)<0)return {[f]:1,...d,role:u}}else if(E(d.role))return {[f]:2,role:u};return a.role!==u?{...a,role:u}:a}case 2:{let u=Ae(a.role,d.role);if(t.has(s.address)){if(B(d.role))throw new Error(`This transaction includes an address (\`${s.address}\`) which is both invoked and marked writable. Program addresses may not be writable.`);return a.role!==u?{...a,role:u}:a}else return "lookupTableAddress"in d&&!E(a.role)?{...d,[f]:1,role:u}:a.role!==u?{...a,role:u}:a}}return "lookupTableAddress"in d?{...d,[f]:1}:{...d,[f]:2}});}return r}function Qe(e){let n;return Object.entries(e).sort(([t,i],[o,s])=>{if(i[f]!==s[f]){if(i[f]===0)return -1;if(s[f]===0)return 1;if(i[f]===2)return -1;if(s[f]===2)return 1}let a=E(i.role);if(a!==E(s.role))return a?-1:1;let c=B(i.role);return c!==B(s.role)?c?-1:1:(n||(n=O()),i[f]===1&&s[f]===1&&i.lookupTableAddress!==s.lookupTableAddress?n(i.lookupTableAddress,s.lookupTableAddress):n(t,o))}).map(([t,i])=>({address:t,...i}))}function en(e){var r;let n={};for(let t of e){if(!("lookupTableAddress"in t))continue;let i=n[r=t.lookupTableAddress]||(n[r]={readableIndices:[],writableIndices:[]});t.role===C.WRITABLE?i.writableIndices.push(t.addressIndex):i.readableIndices.push(t.addressIndex);}return Object.keys(n).sort(O()).map(t=>({lookupTableAddress:t,...n[t]}))}function nn(e){let n=0,r=0,t=0;for(let i of e){if("lookupTableAddress"in i)break;let o=B(i.role);E(i.role)?(t++,o||r++):o||n++;}return {numReadonlyNonSignerAccounts:n,numReadonlySignerAccounts:r,numSignerAccounts:t}}function rn(e){let n={};for(let[r,t]of e.entries())n[t.address]=r;return n}function tn(e,n){let r=rn(n);return e.map(({accounts:t,data:i,programAddress:o})=>({programAddressIndex:r[o],...t?{accountIndices:t.map(({address:s})=>r[s])}:null,...i?{data:i}:null}))}function on(e){return "nonce"in e?e.nonce:e.blockhash}function sn(e){let n=e.findIndex(t=>"lookupTableAddress"in t);return (n===-1?e:e.slice(0,n)).map(({address:t})=>t)}function an(e){let n=Je(e.feePayer,e.instructions),r=Qe(n);return {...e.version!=="legacy"?{addressTableLookups:en(r)}:null,header:nn(r),instructions:tn(e.instructions,r),lifetimeToken:on(e.lifetimeConstraint),staticAccounts:sn(r),version:e.version}}var cn="lookupTableAddress",dn="writableIndices",un="readableIndices",gn="addressTableLookup",Q;function fn(){return Q||(Q=z([["lookupTableAddress",Z({description:cn})],["writableIndices",T(y(),{description:dn,size:S()})],["readableIndices",T(y(),{description:un,size:S()})]],{description:gn})),Q}var ee;function ln(){return ee||(ee=y()),ee}function ne(e){let n=ln();return {...n,description:e!=null?e:n.description}}var mn=void 0,pn=void 0,Sn=void 0,yn=void 0;function hn(){return z([["numSignerAccounts",ne(mn)],["numReadonlySignerAccounts",ne(pn)],["numReadonlyNonSignerAccounts",ne(Sn)]],{description:yn})}var Tn="programAddressIndex",xn=void 0,An="accountIndices",bn="data",re;function wn(){return re||(re=v(z([["programAddressIndex",y({description:Tn})],["accountIndices",T(y({description:xn}),{description:An,size:S()})],["data",xe({description:bn,size:S()})]]),e=>{var n,r;return e.accountIndices!==void 0&&e.data!==void 0?e:{...e,accountIndices:(n=e.accountIndices)!=null?n:[],data:(r=e.data)!=null?r:new Uint8Array(0)}})),re}var zn=128,En={description:"",fixedSize:null,maxSize:1};function In(e){if(e==="legacy")return new Uint8Array;if(e<0||e>127)throw new Error(`Transaction version must be in the range [0, 127]. \`${e}\` given.`);return new Uint8Array([e|zn])}function vn(){return {...En,encode:In}}var Cn="staticAccounts",Bn="lifetimeToken",Dn="instructions",Mn="addressTableLookups";function kn(){return z(we())}function Pn(){return v(z([...we(),["addressTableLookups",$n()]]),e=>{var n;return e.version==="legacy"?e:{...e,addressTableLookups:(n=e.addressTableLookups)!=null?n:[]}})}function we(){return [["version",vn()],["header",hn()],["staticAccounts",T(Z(),{description:Cn,size:S()})],["lifetimeToken",N({description:Bn,encoding:U(),size:32})],["instructions",T(wn(),{description:Dn,size:S()})]]}function $n(){return T(fn(),{description:Mn,size:S()})}var Un="message";function Nn(){return {description:Un,encode:e=>e.version==="legacy"?kn().encode(e):Pn().encode(e),fixedSize:null,maxSize:null}}async function ze(e,n){let r=an(n),t="signatures"in n?{...n.signatures}:{},i=Nn().encode(r),o=await Promise.all(e.map(a=>Promise.all([R(a.publicKey),L(a.privateKey,i)])));for(let[a,c]of o)t[a]=c;let s={...n,signatures:t};return Object.freeze(s),s}function te(e){let n=e.instructions.flatMap(t=>{var i,o;return (o=(i=t.accounts)==null?void 0:i.filter(s=>E(s.role)))!=null?o:[]}).map(t=>t.address);new Set([e.feePayer,...n]).forEach(t=>{if(!e.signatures[t])throw new Error(`Transaction is missing signature for address \`${t}\``)});}function D(e){return "signMessages"in e&&typeof e.signMessages=="function"}function Ur(e){if(!D(e))throw new Error("The provided value does not implement the MessagePartialSigner interface")}function p(e){return "signTransactions"in e&&typeof e.signTransactions=="function"}function Rr(e){if(!p(e))throw new Error("The provided value does not implement the TransactionPartialSigner interface")}function On(e){return "keyPair"in e&&typeof e.keyPair=="object"&&D(e)&&p(e)}function Xr(e){if(!On(e))throw new Error("The provided value does not implement the KeyPairSigner interface")}async function Rn(e){let n=await R(e.publicKey);return Object.freeze({address:n,keyPair:e,signMessages:t=>Promise.all(t.map(async i=>Object.freeze({[n]:await L(e.privateKey,i.content)}))),signTransactions:t=>Promise.all(t.map(async i=>{let o=await ze([e],i);return Object.freeze({[n]:o.signatures[n]})}))})}async function qr(){return Rn(await he())}function ie(e){return pe(e.address)&&"modifyAndSignMessages"in e&&typeof e.modifyAndSignMessages=="function"}function nt(e){if(!ie(e))throw new Error("The provided value does not implement the MessageModifyingSigner interface")}function Ln(e){return D(e)||ie(e)}function ct(e){if(!Ln(e))throw new Error("The provided value does not implement any of the MessageSigner interfaces")}function gt(e){return Object.freeze({address:e,signMessages:async r=>r.map(()=>Object.freeze({})),signTransactions:async r=>r.map(()=>Object.freeze({}))})}function x(e){return "modifyAndSignTransactions"in e&&typeof e.modifyAndSignTransactions=="function"}function mt(e){if(!x(e))throw new Error("The provided value does not implement the TransactionModifyingSigner interface")}function M(e){return "signAndSendTransactions"in e&&typeof e.signAndSendTransactions=="function"}function yt(e){if(!M(e))throw new Error("The provided value does not implement the TransactionSendingSigner interface")}function F(e){return p(e)||x(e)||M(e)}function It(e){if(!F(e))throw new Error("The provided value does not implement any of the TransactionSigner interfaces")}async function Fn(e,n={}){var o;let r=(o=n.signers)!=null?o:[],{partialSigners:t,modifyingSigners:i}=Ee(A([..._(e).filter(F),...r]),{identifySendingSigner:!1});return Ie(e,i,t,n.abortSignal)}async function Vt(e,n={}){let r=await Fn(e,n);return te(r),r}async function Ht(e,n={}){var c;let r=(c=n.signers)!=null?c:[],t=n.abortSignal,{partialSigners:i,modifyingSigners:o,sendingSigner:s}=Ee(A([..._(e).filter(F),...r]));t==null||t.throwIfAborted();let a=await Ie(e,o,i,t);if(s){t==null||t.throwIfAborted();let[d]=await s.signAndSendTransactions([a],{abortSignal:t});return d}if(n.fallbackSender)return te(a),n.fallbackSender(a);throw new Error("No TransactionSendingSigner was identified and no fallback sender was provided.")}function Ee(e,n={}){var a;let t=((a=n.identifySendingSigner)!=null?a:!0)?_n(e):null,i=e.filter(c=>c!==t&&(x(c)||p(c))),o=Wn(i),s=i.filter(p).filter(c=>!o.includes(c));return Object.freeze({modifyingSigners:o,partialSigners:s,sendingSigner:t})}function _n(e){let n=e.filter(M);if(n.length===0)return null;let r=n.filter(t=>!x(t)&&!p(t));return r.length>0?r[0]:n[0]}function Wn(e){let n=e.filter(x);if(n.length===0)return [];let r=n.filter(t=>!p(t));return r.length>0?r:[n[0]]}async function Ie(e,n=[],r=[],t){var a;let i=await n.reduce(async(c,d)=>{t==null||t.throwIfAborted();let[u]=await d.modifyAndSignTransactions([await c],{abortSignal:t});return Object.freeze(u)},Promise.resolve(e));t==null||t.throwIfAborted();let o=await Promise.all(r.map(async c=>{let[d]=await c.signTransactions([i],{abortSignal:t});return d})),s={...i,signatures:Object.freeze(o.reduce((c,d)=>({...c,...d}),(a=i.signatures)!=null?a:{}))};return Object.freeze(s)}var ve=globalThis.TextEncoder;function Qt(e,n={}){return Object.freeze({content:typeof e=="string"?new ve().encode(e):e,signatures:Object.freeze({...n})})}

@@ -16,14 +16,15 @@ exports.assertIsKeyPairSigner = Xr;

exports.assertIsMessageSigner = ct;
exports.assertIsTransactionModifyingSigner = gt;
exports.assertIsTransactionPartialSigner = Or;
exports.assertIsTransactionSendingSigner = mt;
exports.assertIsTransactionSigner = wt;
exports.createSignableMessage = qt;
exports.createSignerFromKeyPair = On;
exports.assertIsTransactionModifyingSigner = mt;
exports.assertIsTransactionPartialSigner = Rr;
exports.assertIsTransactionSendingSigner = yt;
exports.assertIsTransactionSigner = It;
exports.createNoopSigner = gt;
exports.createSignableMessage = Qt;
exports.createSignerFromKeyPair = Rn;
exports.generateKeyPairSigner = qr;
exports.getSignersFromInstruction = Be;
exports.getSignersFromInstruction = De;
exports.getSignersFromTransaction = _;
exports.isKeyPairSigner = Rn;
exports.isKeyPairSigner = On;
exports.isMessageModifyingSigner = ie;
exports.isMessagePartialSigner = B;
exports.isMessagePartialSigner = D;
exports.isMessageSigner = Ln;

@@ -35,4 +36,4 @@ exports.isTransactionModifyingSigner = x;

exports.partiallySignTransactionWithSigners = Fn;
exports.signAndSendTransactionWithSigners = jt;
exports.signTransactionWithSigners = Wt;
exports.signAndSendTransactionWithSigners = Ht;
exports.signTransactionWithSigners = Vt;

@@ -39,0 +40,0 @@ return exports;

@@ -6,2 +6,3 @@ export * from './account-signer-meta';

export * from './message-signer';
export * from './noop-signer';
export * from './sign-transaction';

@@ -8,0 +9,0 @@ export * from './signable-message';

import { Address } from '@solana/addresses';
import { SignableMessage } from './signable-message';
import { BaseSignerConfig } from './types';
export type MessageModifyingSignerConfig = BaseSignerConfig;
/** Defines a signer capable of signing messages. */
export type MessageModifyingSigner<TAddress extends string = string> = Readonly<{
address: Address<TAddress>;
modifyAndSignMessages(messages: readonly SignableMessage[]): Promise<readonly SignableMessage[]>;
modifyAndSignMessages(messages: readonly SignableMessage[], config?: MessageModifyingSignerConfig): Promise<readonly SignableMessage[]>;
}>;

@@ -8,0 +10,0 @@ /** Checks whether the provided value implements the {@link MessageModifyingSigner} interface. */

import { Address } from '@solana/addresses';
import { SignableMessage } from './signable-message';
import { SignatureDictionary } from './types';
import { BaseSignerConfig, SignatureDictionary } from './types';
export type MessagePartialSignerConfig = BaseSignerConfig;
/** Defines a signer capable of signing messages. */
export type MessagePartialSigner<TAddress extends string = string> = Readonly<{
address: Address<TAddress>;
signMessages(messages: readonly SignableMessage[]): Promise<readonly SignatureDictionary[]>;
signMessages(messages: readonly SignableMessage[], config?: MessagePartialSignerConfig): Promise<readonly SignatureDictionary[]>;
}>;

@@ -9,0 +10,0 @@ /** Checks whether the provided value implements the {@link MessagePartialSigner} interface. */

@@ -11,3 +11,6 @@ import { SignatureBytes } from '@solana/keys';

*/
export declare function partiallySignTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, signers?: readonly TransactionSigner[]): Promise<TTransaction & ITransactionWithSignatures>;
export declare function partiallySignTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, config?: {
abortSignal?: AbortSignal;
signers?: readonly TransactionSigner[];
}): Promise<TTransaction & ITransactionWithSignatures>;
/**

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

*/
export declare function signTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, signers?: readonly TransactionSigner[]): Promise<TTransaction & IFullySignedTransaction>;
export declare function signTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, config?: {
abortSignal?: AbortSignal;
signers?: readonly TransactionSigner[];
}): Promise<TTransaction & IFullySignedTransaction>;
/**

@@ -27,4 +33,8 @@ * Signs and sends a transaction using any signers that may be stored in IAccountSignerMeta

*/
export declare function signAndSendTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, signers?: readonly TransactionSigner[], fallbackSender?: (transaction: TTransaction & IFullySignedTransaction) => Promise<SignatureBytes>): Promise<SignatureBytes>;
export declare function signAndSendTransactionWithSigners<TTransaction extends CompilableTransactionWithSigners = CompilableTransactionWithSigners>(transaction: TTransaction, config?: {
abortSignal?: AbortSignal;
fallbackSender?: (transaction: TTransaction & IFullySignedTransaction) => Promise<SignatureBytes>;
signers?: readonly TransactionSigner[];
}): Promise<SignatureBytes>;
export {};
//# sourceMappingURL=sign-transaction.d.ts.map
import { Address } from '@solana/addresses';
import { CompilableTransaction } from '@solana/transactions';
import { BaseSignerConfig } from './types';
export type TransactionModifyingSignerConfig = BaseSignerConfig;
/** Defines a signer capable of signing transactions. */
export type TransactionModifyingSigner<TAddress extends string = string> = Readonly<{
address: Address<TAddress>;
modifyAndSignTransactions<TTransaction extends CompilableTransaction>(transactions: readonly TTransaction[]): Promise<readonly TTransaction[]>;
modifyAndSignTransactions<TTransaction extends CompilableTransaction>(transactions: readonly TTransaction[], config?: TransactionModifyingSignerConfig): Promise<readonly TTransaction[]>;
}>;

@@ -8,0 +10,0 @@ /** Checks whether the provided value implements the {@link TransactionModifyingSigner} interface. */

import { Address } from '@solana/addresses';
import { CompilableTransaction } from '@solana/transactions';
import { SignatureDictionary } from './types';
import { BaseSignerConfig, SignatureDictionary } from './types';
export type TransactionPartialSignerConfig = BaseSignerConfig;
/** Defines a signer capable of signing transactions. */
export type TransactionPartialSigner<TAddress extends string = string> = Readonly<{
address: Address<TAddress>;
signTransactions(transactions: readonly CompilableTransaction[]): Promise<readonly SignatureDictionary[]>;
signTransactions(transactions: readonly CompilableTransaction[], config?: TransactionPartialSignerConfig): Promise<readonly SignatureDictionary[]>;
}>;

@@ -9,0 +10,0 @@ /** Checks whether the provided value implements the {@link TransactionPartialSigner} interface. */

import { Address } from '@solana/addresses';
import { SignatureBytes } from '@solana/keys';
import { CompilableTransaction } from '@solana/transactions';
import { BaseSignerConfig } from './types';
export type TransactionSendingSignerConfig = BaseSignerConfig;
/** Defines a signer capable of signing and sending transactions simultaneously. */
export type TransactionSendingSigner<TAddress extends string = string> = Readonly<{
address: Address<TAddress>;
signAndSendTransactions(transactions: readonly CompilableTransaction[]): Promise<readonly SignatureBytes[]>;
signAndSendTransactions(transactions: readonly CompilableTransaction[], config?: TransactionSendingSignerConfig): Promise<readonly SignatureBytes[]>;
}>;

@@ -9,0 +11,0 @@ /** Checks whether the provided value implements the {@link TransactionSendingSigner} interface. */

import { Address } from '@solana/addresses';
import { SignatureBytes } from '@solana/keys';
export type SignatureDictionary = Readonly<Record<Address, SignatureBytes>>;
export type BaseSignerConfig = Readonly<{
abortSignal?: AbortSignal;
}>;
//# sourceMappingURL=types.d.ts.map
{
"name": "@solana/signers",
"version": "2.0.0-experimental.4c1874d",
"version": "2.0.0-experimental.65e87b8",
"description": "An abstraction layer over signing messages and transactions in Solana",

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

"dependencies": {
"@solana/addresses": "2.0.0-experimental.4c1874d",
"@solana/instructions": "2.0.0-experimental.4c1874d",
"@solana/keys": "2.0.0-experimental.4c1874d",
"@solana/transactions": "2.0.0-experimental.4c1874d"
"@solana/addresses": "2.0.0-experimental.65e87b8",
"@solana/instructions": "2.0.0-experimental.65e87b8",
"@solana/keys": "2.0.0-experimental.65e87b8",
"@solana/transactions": "2.0.0-experimental.65e87b8"
},

@@ -58,0 +58,0 @@ "devDependencies": {

@@ -339,10 +339,4 @@ [![npm][npm-image]][npm-url]

### Functions
For a given address, a Noop (No-Operation) signer can be created to offer an implementation of both the `MessagePartialSigner` and `TransactionPartialSigner` interfaces such that they do not sign anything. Namely, signing a transaction or a message with a `NoopSigner` will return an empty `SignatureDictionary`.
#### `createNoopSigner()`
_Coming soon..._
Creates a Noop (No-Operation) signer from a given address. It will return an implementation of both the `MessagePartialSigner` and `TransactionPartialSigner` interfaces that do not sign anything. Namely, signing a transaction or a message will return an empty `SignatureDictionary`.
This signer may be useful:

@@ -353,8 +347,26 @@

### Types
#### `NoopSigner<TAddress>`
Defines a Noop (No-Operation) signer.
```ts
const myNoopSigner: NoopSigner;
myNoopSigner satisfies MessagePartialSigner;
myNoopSigner satisfies TransactionPartialSigner;
```
### Functions
#### `createNoopSigner()`
Creates a Noop (No-Operation) signer from a given address.
```ts
import { createNoopSigner } from '@solana/signers';
const myAddress = address('1234..5678');
const myNoopSigner = createNoopSigner(myAddress);
// ^ MessagePartialSigner<'1234..5678'> & TransactionPartialSigner<'1234..5678'>
const myNoopSigner = createNoopSigner(address('1234..5678'));
const [myMessageSignatures] = await myNoopSigner.signMessages([myMessage]); // <- Empty signature dictionary.
const [myTransactionSignatures] = await myNoopSigner.signTransactions([myTransaction]); // <- Empty signature dictionary.
```

@@ -445,6 +457,9 @@

It also accepts an additional array of signers that will be merged with the ones extracted from the transaction, if any.
It also accepts an optional `AbortSignal` and an additional array of signers that will be merged with the ones extracted from the transaction, if any.
```ts
const mySignedTransaction = partiallySignTransactionWithSigners(myTransaction, [myOtherSigner]);
const mySignedTransaction = partiallySignTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,
signers: [myOtherSigner],
});
```

@@ -461,4 +476,7 @@

// With additional signers.
const mySignedTransaction = signTransactionWithSigners(myTransaction, [myOtherSigner]);
// With additional config.
const mySignedTransaction = signTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,
signers: [myOtherSigner],
});

@@ -476,4 +494,7 @@ // We now know the transaction is fully signed.

// With additional signers.
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, [myOtherSigner]);
// With additional config.
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, {
abortSignal: myAbortController.signal,
signers: [myOtherSigner],
});
```

@@ -492,3 +513,3 @@

const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, [], fallbackSender);
const myTransactionSignature = signAndSendTransactionWithSigners(myTransaction, { fallbackSender });
```

@@ -495,0 +516,0 @@

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

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