@streamflow/common 8.0.1 → 8.0.2-alpha.p287.a3616ff

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,8 @@
1
1
  import { getAssociatedTokenAddress, NATIVE_MINT, createAssociatedTokenAccountInstruction, createSyncNativeInstruction, TOKEN_PROGRAM_ID, TOKEN_2022_PROGRAM_ID, unpackMint } from '@solana/spl-token';
2
- import { SystemProgram, PublicKey, Keypair, TransactionMessage, VersionedTransaction, SendTransactionError, ComputeBudgetProgram } from '@solana/web3.js';
2
+ import { SystemProgram, Keypair, TransactionMessage, VersionedTransaction, SendTransactionError, ComputeBudgetProgram, Transaction, PublicKey } from '@solana/web3.js';
3
3
  import bs58 from 'bs58';
4
4
  import 'bn.js';
5
+ import { Buffer } from 'buffer';
5
6
 
6
7
  var __create = Object.create;
7
8
  var __defProp = Object.defineProperty;
@@ -51,12 +52,12 @@ var __privateWrapper = (obj, member, setter, getter) => ({
51
52
  var require_eventemitter3 = __commonJS({
52
53
  "../../node_modules/.pnpm/eventemitter3@5.0.1/node_modules/eventemitter3/index.js"(exports, module) {
53
54
  var has = Object.prototype.hasOwnProperty;
54
- var prefix = "~";
55
+ var prefix2 = "~";
55
56
  function Events() {
56
57
  }
57
58
  if (Object.create) {
58
59
  Events.prototype = /* @__PURE__ */ Object.create(null);
59
- if (!new Events().__proto__) prefix = false;
60
+ if (!new Events().__proto__) prefix2 = false;
60
61
  }
61
62
  function EE(fn, context, once) {
62
63
  this.fn = fn;
@@ -67,7 +68,7 @@ var require_eventemitter3 = __commonJS({
67
68
  if (typeof fn !== "function") {
68
69
  throw new TypeError("The listener must be a function");
69
70
  }
70
- var listener = new EE(fn, context || emitter, once), evt = prefix ? prefix + event : event;
71
+ var listener = new EE(fn, context || emitter, once), evt = prefix2 ? prefix2 + event : event;
71
72
  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
72
73
  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
73
74
  else emitter._events[evt] = [emitter._events[evt], listener];
@@ -85,7 +86,7 @@ var require_eventemitter3 = __commonJS({
85
86
  var names = [], events, name;
86
87
  if (this._eventsCount === 0) return names;
87
88
  for (name in events = this._events) {
88
- if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
89
+ if (has.call(events, name)) names.push(prefix2 ? name.slice(1) : name);
89
90
  }
90
91
  if (Object.getOwnPropertySymbols) {
91
92
  return names.concat(Object.getOwnPropertySymbols(events));
@@ -93,7 +94,7 @@ var require_eventemitter3 = __commonJS({
93
94
  return names;
94
95
  };
95
96
  EventEmitter2.prototype.listeners = function listeners(event) {
96
- var evt = prefix ? prefix + event : event, handlers = this._events[evt];
97
+ var evt = prefix2 ? prefix2 + event : event, handlers = this._events[evt];
97
98
  if (!handlers) return [];
98
99
  if (handlers.fn) return [handlers.fn];
99
100
  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
@@ -102,13 +103,13 @@ var require_eventemitter3 = __commonJS({
102
103
  return ee;
103
104
  };
104
105
  EventEmitter2.prototype.listenerCount = function listenerCount(event) {
105
- var evt = prefix ? prefix + event : event, listeners = this._events[evt];
106
+ var evt = prefix2 ? prefix2 + event : event, listeners = this._events[evt];
106
107
  if (!listeners) return 0;
107
108
  if (listeners.fn) return 1;
108
109
  return listeners.length;
109
110
  };
110
111
  EventEmitter2.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
111
- var evt = prefix ? prefix + event : event;
112
+ var evt = prefix2 ? prefix2 + event : event;
112
113
  if (!this._events[evt]) return false;
113
114
  var listeners = this._events[evt], len = arguments.length, args, i;
114
115
  if (listeners.fn) {
@@ -165,7 +166,7 @@ var require_eventemitter3 = __commonJS({
165
166
  return addListener(this, event, fn, context, true);
166
167
  };
167
168
  EventEmitter2.prototype.removeListener = function removeListener(event, fn, context, once) {
168
- var evt = prefix ? prefix + event : event;
169
+ var evt = prefix2 ? prefix2 + event : event;
169
170
  if (!this._events[evt]) return this;
170
171
  if (!fn) {
171
172
  clearEvent(this, evt);
@@ -190,7 +191,7 @@ var require_eventemitter3 = __commonJS({
190
191
  EventEmitter2.prototype.removeAllListeners = function removeAllListeners(event) {
191
192
  var evt;
192
193
  if (event) {
193
- evt = prefix ? prefix + event : event;
194
+ evt = prefix2 ? prefix2 + event : event;
194
195
  if (this._events[evt]) clearEvent(this, evt);
195
196
  } else {
196
197
  this._events = new Events();
@@ -200,7 +201,7 @@ var require_eventemitter3 = __commonJS({
200
201
  };
201
202
  EventEmitter2.prototype.off = EventEmitter2.prototype.removeListener;
202
203
  EventEmitter2.prototype.addListener = EventEmitter2.prototype.on;
203
- EventEmitter2.prefixed = prefix;
204
+ EventEmitter2.prefixed = prefix2;
204
205
  EventEmitter2.EventEmitter = EventEmitter2;
205
206
  if ("undefined" !== typeof module) {
206
207
  module.exports = EventEmitter2;
@@ -238,9 +239,6 @@ var prepareWrappedAccount = async (connection, senderAddress, amount) => {
238
239
  createSyncNativeInstruction(tokenAccount)
239
240
  ];
240
241
  };
241
- var pk = (address) => {
242
- return typeof address === "string" ? new PublicKey(address) : address;
243
- };
244
242
 
245
243
  // solana/types.ts
246
244
  var TransactionFailedError = class _TransactionFailedError extends Error {
@@ -705,6 +703,17 @@ function sleep(ms) {
705
703
  return new Promise((resolve) => setTimeout(resolve, ms));
706
704
  }
707
705
 
706
+ // lib/assertions.ts
707
+ var prefix = "Assertion failed";
708
+ var invariant = (condition, message) => {
709
+ if (condition) {
710
+ return;
711
+ }
712
+ const provided = typeof message === "function" ? message() : message;
713
+ const value = provided ? `${prefix}: ${provided}` : prefix;
714
+ throw new Error(value);
715
+ };
716
+
708
717
  // solana/utils.ts
709
718
  var SIMULATE_TRIES = 3;
710
719
  var buildSendThrottler = (sendRate, sendInterval = 1e3) => {
@@ -732,20 +741,30 @@ function isSignerKeypair(walletOrKeypair) {
732
741
  function isTransactionVersioned(tx) {
733
742
  return "message" in tx;
734
743
  }
735
- async function prepareTransaction(connection, ixs, payer, commitment, ...partialSigners) {
744
+ async function prepareTransaction(connection, ixs, payer, commitment, partialSigners) {
736
745
  if (!payer) {
737
746
  throw new Error("Payer public key is not provided!");
738
747
  }
739
748
  const { value: hash, context } = await connection.getLatestBlockhashAndContext(commitment);
749
+ return {
750
+ tx: createVersionedTransaction(ixs, payer, hash.blockhash, partialSigners),
751
+ hash,
752
+ context
753
+ };
754
+ }
755
+ function createVersionedTransaction(ixs, payer, recentBlockhash, partialSigners) {
756
+ invariant(payer, "Payer public key is not provided!");
740
757
  const messageV0 = new TransactionMessage({
741
758
  payerKey: payer,
742
- recentBlockhash: hash.blockhash,
759
+ recentBlockhash,
743
760
  instructions: ixs
744
761
  }).compileToV0Message();
745
762
  const tx = new VersionedTransaction(messageV0);
746
- const signers = partialSigners.filter((item) => !!item);
747
- tx.sign(signers);
748
- return { tx, context, hash };
763
+ const signers = partialSigners?.filter((item) => !!item) ?? void 0;
764
+ if (signers) {
765
+ tx.sign(signers);
766
+ }
767
+ return tx;
749
768
  }
750
769
  async function signTransaction(invoker, tx) {
751
770
  let signedTx;
@@ -761,16 +780,18 @@ async function signTransaction(invoker, tx) {
761
780
  }
762
781
  return signedTx;
763
782
  }
764
- async function signAndExecuteTransaction(connection, invoker, tx, confirmationParams, throttleParams) {
783
+ async function signAndExecuteTransaction(connection, invoker, tx, confirmationParams, transactionExecutionParams) {
765
784
  const signedTx = await signTransaction(invoker, tx);
766
- return executeTransaction(connection, signedTx, confirmationParams, throttleParams);
785
+ return executeTransaction(connection, signedTx, confirmationParams, transactionExecutionParams);
767
786
  }
768
- async function executeTransaction(connection, tx, confirmationParams, throttleParams) {
787
+ async function executeTransaction(connection, tx, confirmationParams, transactionExecutionParams) {
769
788
  if (tx.signatures.length === 0) {
770
789
  throw Error("Error with transaction parameters.");
771
790
  }
772
- await simulateTransaction(connection, tx);
773
- return sendAndConfirmTransaction(connection, tx, confirmationParams, throttleParams);
791
+ if (!transactionExecutionParams.skipSimulation) {
792
+ await simulateTransaction(connection, tx);
793
+ }
794
+ return sendAndConfirmTransaction(connection, tx, confirmationParams, transactionExecutionParams);
774
795
  }
775
796
  async function executeMultipleTransactions(connection, txs, confirmationParams, { sendRate = 1, sendThrottler, ...throttlingParams }) {
776
797
  if (!sendThrottler) {
@@ -937,13 +958,7 @@ async function generateCreateAtaBatchTx(connection, payer, paramsBatch, commitme
937
958
  })
938
959
  );
939
960
  const { value: hash, context } = await connection.getLatestBlockhashAndContext({ commitment });
940
- const messageV0 = new TransactionMessage({
941
- payerKey: payer,
942
- recentBlockhash: hash.blockhash,
943
- instructions: ixs
944
- }).compileToV0Message();
945
- const tx = new VersionedTransaction(messageV0);
946
- return { tx, hash, context };
961
+ return { tx: createVersionedTransaction(ixs, payer, hash.blockhash), hash, context };
947
962
  }
948
963
  async function createAtaBatch(connection, invoker, paramsBatch, commitment, rate) {
949
964
  const { tx, hash, context } = await generateCreateAtaBatchTx(
@@ -973,10 +988,10 @@ async function checkOrCreateAtaBatch(connection, owners, mint, invoker, programI
973
988
  }
974
989
  function prepareBaseInstructions(connection, { computePrice, computeLimit }) {
975
990
  const ixs = [];
976
- if (computePrice) {
991
+ if (computePrice && typeof computePrice !== "function") {
977
992
  ixs.push(ComputeBudgetProgram.setComputeUnitPrice({ microLamports: computePrice }));
978
993
  }
979
- if (computeLimit) {
994
+ if (computeLimit && typeof computeLimit === "number") {
980
995
  ixs.push(ComputeBudgetProgram.setComputeUnitLimit({ units: computeLimit }));
981
996
  }
982
997
  return ixs;
@@ -1002,7 +1017,103 @@ async function getMultipleAccountsInfoBatched(connection, pubKeys, commitment) {
1002
1017
  const results = await Promise.all(batches);
1003
1018
  return results.flat();
1004
1019
  }
1020
+ function deserializeRawTransaction(serializedTx) {
1021
+ const txBuffer = Buffer.from(serializedTx, "base64");
1022
+ try {
1023
+ const tx = Transaction.from(txBuffer);
1024
+ return resolveTransactionAccounts(tx);
1025
+ } catch (error) {
1026
+ try {
1027
+ const vtx = VersionedTransaction.deserialize(txBuffer);
1028
+ return resolveTransactionAccounts(vtx);
1029
+ } catch (vError) {
1030
+ throw new Error("Failed to deserialize transaction: " + (vError instanceof Error ? vError.message : vError), {
1031
+ cause: vError
1032
+ });
1033
+ }
1034
+ }
1035
+ }
1036
+ var resolveTransactionAccounts = (tx) => {
1037
+ if (tx instanceof Transaction) {
1038
+ const message2 = tx.compileMessage();
1039
+ const accounts2 = message2.accountKeys;
1040
+ const writableAccounts2 = accounts2.filter((_, idx) => message2.isAccountWritable(idx));
1041
+ return {
1042
+ type: "legacy",
1043
+ transaction: tx,
1044
+ accounts: accounts2,
1045
+ writableAccounts: writableAccounts2
1046
+ };
1047
+ }
1048
+ const message = tx.message;
1049
+ const accounts = "staticAccountKeys" in message ? message.staticAccountKeys : message.accountKeys;
1050
+ const writableAccounts = accounts.filter((_, idx) => message.isAccountWritable(idx));
1051
+ return {
1052
+ type: "versioned",
1053
+ transaction: tx,
1054
+ accounts,
1055
+ writableAccounts
1056
+ };
1057
+ };
1058
+ var pk = (address) => {
1059
+ return typeof address === "string" ? new PublicKey(address) : address;
1060
+ };
1061
+
1062
+ // solana/lib/estimate.ts
1063
+ var createTestTransaction = (ixs, payer, recentBlockhash, partialSigners) => {
1064
+ return createVersionedTransaction(ixs, payer, "11111111111111111111111111111111", partialSigners);
1065
+ };
1066
+ async function estimateComputeUnitPrice(estimate, testTx) {
1067
+ return estimate(resolveTransactionAccounts(testTx).writableAccounts);
1068
+ }
1069
+ async function createAndEstimateTransaction(createFn, extParams, select) {
1070
+ select = select ?? ((value) => value);
1071
+ const createResult = await createFn(extParams);
1072
+ const prepareIxs = select(createResult);
1073
+ const { computePrice, computeLimit } = extParams;
1074
+ const invoker = extParams.invoker.publicKey;
1075
+ invariant(invoker, "Invoker's PublicKey is not available, check passed wallet adapter!");
1076
+ const testTx = createTestTransaction(prepareIxs, pk(invoker), void 0, void 0);
1077
+ const estimatedComputeLimit = typeof computeLimit === "function" ? await computeLimit(testTx) : computeLimit;
1078
+ if (typeof computePrice !== "function") {
1079
+ if (typeof computeLimit !== "function") {
1080
+ return createResult;
1081
+ }
1082
+ return createFn({
1083
+ ...extParams,
1084
+ computeLimit: estimatedComputeLimit
1085
+ });
1086
+ }
1087
+ const estimatedComputeUnitPrice = typeof computePrice === "function" ? await estimateComputeUnitPrice(computePrice, testTx) : (
1088
+ // unachievable because we don't execute estimation for constant or undefined priority fee
1089
+ computePrice
1090
+ );
1091
+ return createFn({
1092
+ ...extParams,
1093
+ computePrice: estimatedComputeUnitPrice,
1094
+ computeLimit: estimatedComputeLimit
1095
+ });
1096
+ }
1097
+
1098
+ // solana/rpc/consume-limit-estimate/estimate.ts
1099
+ var estimateConsumeLimit = async (connection, tx, options = {}) => {
1100
+ const { increaseFactor = 0.05 } = options;
1101
+ const simulationResults = await connection.simulateTransaction(tx, {
1102
+ sigVerify: false,
1103
+ replaceRecentBlockhash: true
1104
+ });
1105
+ return {
1106
+ unitsConsumed: simulationResults.value.unitsConsumed ? Math.ceil(simulationResults.value.unitsConsumed * (1 + increaseFactor)) : simulationResults.value.unitsConsumed,
1107
+ data: simulationResults
1108
+ };
1109
+ };
1110
+
1111
+ // solana/lib/unwrap-auto-simulate-ext.ts
1112
+ var unwrapExecutionParams = ({ computeLimit, ...rest }, connection) => {
1113
+ const consumeLimitFn = computeLimit === "autoSimulate" ? (tx) => estimateConsumeLimit(connection, tx).then((limit) => limit.unitsConsumed ?? 0) : computeLimit;
1114
+ return { ...rest, computeLimit: consumeLimitFn, skipSimulation: computeLimit === "autoSimulate" };
1115
+ };
1005
1116
 
1006
- export { TransactionFailedError, ata, ataBatchExist, buildSendThrottler, checkOrCreateAtaBatch, confirmAndEnsureTransaction, createAtaBatch, enrichAtaParams, executeMultipleTransactions, executeTransaction, generateCreateAtaBatchTx, getFilters, getMintAndProgram, getMultipleAccountsInfoBatched, getProgramAccounts, isSignerKeypair, isSignerWallet, isTransactionVersioned, pk, prepareBaseInstructions, prepareTransaction, prepareWrappedAccount, sendAndConfirmTransaction, signAndExecuteTransaction, signTransaction, simulateTransaction };
1117
+ export { TransactionFailedError, ata, ataBatchExist, buildSendThrottler, checkOrCreateAtaBatch, confirmAndEnsureTransaction, createAndEstimateTransaction, createAtaBatch, createVersionedTransaction, deserializeRawTransaction, enrichAtaParams, estimateComputeUnitPrice, executeMultipleTransactions, executeTransaction, generateCreateAtaBatchTx, getFilters, getMintAndProgram, getMultipleAccountsInfoBatched, getProgramAccounts, isSignerKeypair, isSignerWallet, isTransactionVersioned, pk, prepareBaseInstructions, prepareTransaction, prepareWrappedAccount, resolveTransactionAccounts, sendAndConfirmTransaction, signAndExecuteTransaction, signTransaction, simulateTransaction, unwrapExecutionParams };
1007
1118
  //# sourceMappingURL=index.js.map
1008
1119
  //# sourceMappingURL=index.js.map