@solana/web3.js 2.0.0-rc.0 → 2.0.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/dist/index.browser.cjs +15 -3
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.mjs +12 -4
- package/dist/index.browser.mjs.map +1 -1
- package/dist/index.development.js +1361 -812
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.mjs +12 -4
- package/dist/index.native.mjs.map +1 -1
- package/dist/index.node.cjs +15 -3
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +12 -4
- package/dist/index.node.mjs.map +1 -1
- package/dist/index.production.min.js +570 -555
- package/dist/types/airdrop-internal.d.ts +2 -2
- package/dist/types/airdrop-internal.d.ts.map +1 -1
- package/dist/types/compute-limit-internal.d.ts.map +1 -1
- package/dist/types/decompile-transaction-message-fetching-lookup-tables.d.ts +9 -0
- package/dist/types/decompile-transaction-message-fetching-lookup-tables.d.ts.map +1 -0
- package/dist/types/index.d.ts +3 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/send-transaction-internal.d.ts +1 -2
- package/dist/types/send-transaction-internal.d.ts.map +1 -1
- package/package.json +31 -19
- package/dist/types/decode-transaction-message.d.ts +0 -9
- package/dist/types/decode-transaction-message.d.ts.map +0 -1
@@ -60,6 +60,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
60
60
|
var SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED = 3610004;
|
61
61
|
var SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED = 3610005;
|
62
62
|
var SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED = 3610006;
|
63
|
+
var SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY = 3610007;
|
63
64
|
var SOLANA_ERROR__CRYPTO__RANDOM_VALUES_FUNCTION_UNIMPLEMENTED = 3611e3;
|
64
65
|
var SOLANA_ERROR__KEYS__INVALID_KEY_PAIR_BYTE_LENGTH = 3704e3;
|
65
66
|
var SOLANA_ERROR__KEYS__INVALID_PRIVATE_KEY_BYTE_LENGTH = 3704001;
|
@@ -155,6 +156,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
155
156
|
var SOLANA_ERROR__TRANSACTION__CANNOT_ENCODE_WITH_EMPTY_SIGNATURES = 5663016;
|
156
157
|
var SOLANA_ERROR__TRANSACTION__MESSAGE_SIGNATURES_MISMATCH = 5663017;
|
157
158
|
var SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT = 5663018;
|
159
|
+
var SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT = 5663019;
|
158
160
|
var SOLANA_ERROR__TRANSACTION_ERROR__UNKNOWN = 705e4;
|
159
161
|
var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE = 7050001;
|
160
162
|
var SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE = 7050002;
|
@@ -218,15 +220,17 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
218
220
|
var SOLANA_ERROR__RPC__INTEGER_OVERFLOW = 81e5;
|
219
221
|
var SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN = 8100001;
|
220
222
|
var SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR = 8100002;
|
221
|
-
var
|
223
|
+
var SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD = 8100003;
|
224
|
+
var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN = 819e4;
|
222
225
|
var SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID = 8190001;
|
223
|
-
var
|
224
|
-
var
|
225
|
-
var
|
226
|
-
var
|
227
|
-
var
|
226
|
+
var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED = 8190002;
|
227
|
+
var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED = 8190003;
|
228
|
+
var SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT = 8190004;
|
229
|
+
var SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING = 99e5;
|
230
|
+
var SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE = 9900001;
|
228
231
|
var SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING = 9900002;
|
229
232
|
var SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE = 9900003;
|
233
|
+
var SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED = 9900004;
|
230
234
|
var SolanaErrorMessages = {
|
231
235
|
[SOLANA_ERROR__ACCOUNTS__ACCOUNT_NOT_FOUND]: "Account not found at address: $address",
|
232
236
|
[SOLANA_ERROR__ACCOUNTS__EXPECTED_ALL_ACCOUNTS_TO_BE_DECODED]: "Not all accounts were decoded. Encoded accounts found at addresses: $addresses.",
|
@@ -331,9 +335,10 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
331
335
|
[SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH]: "Expected base58 encoded blockhash to decode to a byte array of length 32. Actual length: $actualLength.",
|
332
336
|
[SOLANA_ERROR__INVALID_NONCE]: "The nonce `$expectedNonceValue` is no longer valid. It has advanced to `$actualNonceValue`",
|
333
337
|
[SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING]: "Invariant violation: Found no abortable iterable cache entry for key `$cacheKey`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
338
|
+
[SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED]: "Invariant violation: This data publisher does not publish to the channel named `$channelName`. Supported channels include $supportedChannelNames.",
|
339
|
+
[SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE]: "Invariant violation: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
340
|
+
[SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING]: "Invariant violation: WebSocket message iterator is missing state storage. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
334
341
|
[SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE]: "Invariant violation: Switch statement non-exhaustive. Received unexpected value `$unexpectedValue`. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
335
|
-
[SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE]: "Invariant violation: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
336
|
-
[SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_STATE_MISSING]: "Invariant violation: WebSocket message iterator is missing state storage. It should be impossible to hit this error; please file an issue at https://sola.na/web3invariant",
|
337
342
|
[SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR]: "JSON-RPC error: Internal JSON-RPC error ($__serverMessage)",
|
338
343
|
[SOLANA_ERROR__JSON_RPC__INVALID_PARAMS]: "JSON-RPC error: Invalid method parameter(s) ($__serverMessage)",
|
339
344
|
[SOLANA_ERROR__JSON_RPC__INVALID_REQUEST]: "JSON-RPC error: The JSON sent is not a valid `Request` object ($__serverMessage)",
|
@@ -364,11 +369,12 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
364
369
|
[SOLANA_ERROR__MALFORMED_BIGINT_STRING]: "`$value` cannot be parsed as a `BigInt`",
|
365
370
|
[SOLANA_ERROR__MALFORMED_NUMBER_STRING]: "`$value` cannot be parsed as a `Number`",
|
366
371
|
[SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND]: "No nonce account could be found at address `$nonceAccountAddress`",
|
367
|
-
[
|
372
|
+
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN]: "The notification name must end in 'Notifications' and the API must supply a subscription plan creator function for the notification '$notificationName'.",
|
373
|
+
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED]: "WebSocket was closed before payload could be added to the send buffer",
|
374
|
+
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED]: "WebSocket connection closed",
|
375
|
+
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT]: "WebSocket failed to connect",
|
368
376
|
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID]: "Failed to obtain a subscription id from the server",
|
369
|
-
[
|
370
|
-
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_CONNECTION_CLOSED]: "WebSocket connection closed",
|
371
|
-
[SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_FAILED_TO_CONNECT]: "WebSocket failed to connect",
|
377
|
+
[SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD]: "Could not find an API plan for RPC method: `$method`",
|
372
378
|
[SOLANA_ERROR__RPC__INTEGER_OVERFLOW]: "The $argumentLabel argument to the `$methodName` RPC method$optionalPathLabel was `$value`. This number is unsafe for use with the Solana JSON-RPC because it exceeds `Number.MAX_SAFE_INTEGER`.",
|
373
379
|
[SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR]: "HTTP error ($statusCode): $message",
|
374
380
|
[SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN]: "HTTP header(s) forbidden: $headers. Learn more at https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.",
|
@@ -384,6 +390,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
384
390
|
[SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS]: "More than one `TransactionSendingSigner` was identified.",
|
385
391
|
[SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING]: "No `TransactionSendingSigner` was identified. Please provide a valid `ITransactionWithSingleSendingSigner` transaction.",
|
386
392
|
[SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED]: "Wallet account signers do not support signing multiple messages/transactions in a single operation",
|
393
|
+
[SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY]: "Cannot export a non-extractable key.",
|
387
394
|
[SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED]: "No digest implementation could be found.",
|
388
395
|
[SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT]: "Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts.",
|
389
396
|
[SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED]: "This runtime does not support the generation of Ed25519 key pairs.\n\nInstall @solana/webcrypto-ed25519-polyfill and call its `install` function before generating keys in environments that do not support Ed25519.\n\nFor a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20.",
|
@@ -391,7 +398,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
391
398
|
[SOLANA_ERROR__SUBTLE_CRYPTO__GENERATE_FUNCTION_UNIMPLEMENTED]: "No key generation implementation could be found.",
|
392
399
|
[SOLANA_ERROR__SUBTLE_CRYPTO__SIGN_FUNCTION_UNIMPLEMENTED]: "No signing implementation could be found.",
|
393
400
|
[SOLANA_ERROR__SUBTLE_CRYPTO__VERIFY_FUNCTION_UNIMPLEMENTED]: "No key export implementation could be found.",
|
394
|
-
[SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE]: "Timestamp value must be in the range [-
|
401
|
+
[SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE]: "Timestamp value must be in the range [-(2n ** 63n), (2n ** 63n) - 1]. `$value` given",
|
395
402
|
[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_BORROW_OUTSTANDING]: "Transaction processing left an account with an outstanding borrowed reference",
|
396
403
|
[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_IN_USE]: "Account in use",
|
397
404
|
[SOLANA_ERROR__TRANSACTION_ERROR__ACCOUNT_LOADED_TWICE]: "Account loaded twice",
|
@@ -439,6 +446,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
439
446
|
[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING]: "No fee payer set in CompiledTransaction",
|
440
447
|
[SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND]: "Could not find program address at index $index",
|
441
448
|
[SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT]: "Failed to estimate the compute unit consumption for this transaction message. This is likely because simulating the transaction failed. Inspect the `cause` property of this error to learn more",
|
449
|
+
[SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT]: "Transaction failed when it was simulated in order to estimate the compute unit consumption. The compute unit estimate provided is for a transaction that failed when simulated and may not be representative of the compute units this transaction would consume if successful. Inspect the `cause` property of this error to learn more",
|
442
450
|
[SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING]: "Transaction is missing a fee payer.",
|
443
451
|
[SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING]: "Could not determine this transaction's signature. Make sure that the transaction has been signed by its fee payer.",
|
444
452
|
[SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE]: "Transaction first instruction is not advance nonce account instruction.",
|
@@ -1415,7 +1423,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
1415
1423
|
getSizeFromValue: (value) => {
|
1416
1424
|
try {
|
1417
1425
|
return atob(value).length;
|
1418
|
-
} catch
|
1426
|
+
} catch {
|
1419
1427
|
throw new SolanaError(SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, {
|
1420
1428
|
alphabet: alphabet3,
|
1421
1429
|
base: 64,
|
@@ -1428,7 +1436,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
1428
1436
|
const bytesToAdd = atob(value).split("").map((c) => c.charCodeAt(0));
|
1429
1437
|
bytes.set(bytesToAdd, offset);
|
1430
1438
|
return bytesToAdd.length + offset;
|
1431
|
-
} catch
|
1439
|
+
} catch {
|
1432
1440
|
throw new SolanaError(SOLANA_ERROR__CODECS__INVALID_STRING_FOR_BASE, {
|
1433
1441
|
alphabet: alphabet3,
|
1434
1442
|
base: 64,
|
@@ -1488,7 +1496,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
1488
1496
|
return encodedAccount;
|
1489
1497
|
}
|
1490
1498
|
return Object.freeze({ ...encodedAccount, data: decoder.decode(encodedAccount.data) });
|
1491
|
-
} catch
|
1499
|
+
} catch {
|
1492
1500
|
throw new SolanaError(SOLANA_ERROR__ACCOUNTS__FAILED_TO_DECODE_ACCOUNT, {
|
1493
1501
|
address: encodedAccount.address
|
1494
1502
|
});
|
@@ -1585,10 +1593,10 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
1585
1593
|
/* extractable */
|
1586
1594
|
false,
|
1587
1595
|
["sign", "verify"]
|
1588
|
-
).
|
1589
|
-
resolve(cachedEd25519Decision = false);
|
1590
|
-
}).then(() => {
|
1596
|
+
).then(() => {
|
1591
1597
|
resolve(cachedEd25519Decision = true);
|
1598
|
+
}).catch(() => {
|
1599
|
+
resolve(cachedEd25519Decision = false);
|
1592
1600
|
});
|
1593
1601
|
});
|
1594
1602
|
}
|
@@ -1662,12 +1670,11 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
1662
1670
|
return false;
|
1663
1671
|
}
|
1664
1672
|
const base58Encoder2 = getMemoizedBase58Encoder();
|
1665
|
-
|
1666
|
-
|
1667
|
-
|
1673
|
+
try {
|
1674
|
+
return base58Encoder2.encode(putativeAddress).byteLength === 32;
|
1675
|
+
} catch {
|
1668
1676
|
return false;
|
1669
1677
|
}
|
1670
|
-
return true;
|
1671
1678
|
}
|
1672
1679
|
function assertIsAddress(putativeAddress) {
|
1673
1680
|
if (
|
@@ -2562,9 +2569,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
2562
2569
|
var getDataEnumDecoder = getDiscriminatedUnionDecoder;
|
2563
2570
|
var getDataEnumCodec = getDiscriminatedUnionCodec;
|
2564
2571
|
function getEnumStats(constructor) {
|
2565
|
-
const numericalValues = [
|
2566
|
-
...new Set(Object.values(constructor).filter((v) => typeof v === "number"))
|
2567
|
-
].sort();
|
2572
|
+
const numericalValues = [...new Set(Object.values(constructor).filter((v) => typeof v === "number"))].sort();
|
2568
2573
|
const enumRecord = Object.fromEntries(Object.entries(constructor).slice(numericalValues.length));
|
2569
2574
|
const enumKeys = Object.keys(enumRecord);
|
2570
2575
|
const enumValues = Object.values(enumRecord);
|
@@ -3093,6 +3098,26 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3093
3098
|
const privateKeyBytesPkcs8 = addPkcs8Header(bytes);
|
3094
3099
|
return await crypto.subtle.importKey("pkcs8", privateKeyBytesPkcs8, "Ed25519", extractable != null ? extractable : false, ["sign"]);
|
3095
3100
|
}
|
3101
|
+
async function getPublicKeyFromPrivateKey(privateKey, extractable = false) {
|
3102
|
+
assertKeyExporterIsAvailable();
|
3103
|
+
if (privateKey.extractable === false) {
|
3104
|
+
throw new SolanaError(SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY, { key: privateKey });
|
3105
|
+
}
|
3106
|
+
const jwk = await crypto.subtle.exportKey("jwk", privateKey);
|
3107
|
+
return await crypto.subtle.importKey(
|
3108
|
+
"jwk",
|
3109
|
+
{
|
3110
|
+
crv: "Ed25519",
|
3111
|
+
ext: extractable,
|
3112
|
+
key_ops: ["verify"],
|
3113
|
+
kty: "OKP",
|
3114
|
+
x: jwk.x
|
3115
|
+
},
|
3116
|
+
"Ed25519",
|
3117
|
+
extractable,
|
3118
|
+
["verify"]
|
3119
|
+
);
|
3120
|
+
}
|
3096
3121
|
var base58Encoder;
|
3097
3122
|
function assertIsSignature(putativeSignature) {
|
3098
3123
|
if (!base58Encoder) base58Encoder = getBase58Encoder();
|
@@ -3181,6 +3206,27 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3181
3206
|
}
|
3182
3207
|
return { privateKey, publicKey };
|
3183
3208
|
}
|
3209
|
+
async function createKeyPairFromPrivateKeyBytes(bytes, extractable = false) {
|
3210
|
+
const privateKeyPromise = createPrivateKeyFromBytes(bytes, extractable);
|
3211
|
+
const [publicKey, privateKey] = await Promise.all([
|
3212
|
+
// This nested promise makes things efficient by
|
3213
|
+
// creating the public key in parallel with the
|
3214
|
+
// second private key creation, if it is needed.
|
3215
|
+
(extractable ? privateKeyPromise : createPrivateKeyFromBytes(
|
3216
|
+
bytes,
|
3217
|
+
true
|
3218
|
+
/* extractable */
|
3219
|
+
)).then(
|
3220
|
+
async (privateKey2) => await getPublicKeyFromPrivateKey(
|
3221
|
+
privateKey2,
|
3222
|
+
true
|
3223
|
+
/* extractable */
|
3224
|
+
)
|
3225
|
+
),
|
3226
|
+
privateKeyPromise
|
3227
|
+
]);
|
3228
|
+
return { privateKey, publicKey };
|
3229
|
+
}
|
3184
3230
|
|
3185
3231
|
// ../programs/dist/index.browser.mjs
|
3186
3232
|
function isProgramError(error, transactionMessage, programAddress, code) {
|
@@ -3196,20 +3242,90 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3196
3242
|
}
|
3197
3243
|
|
3198
3244
|
// ../rpc-spec-types/dist/index.browser.mjs
|
3245
|
+
function parseJsonWithBigInts(json) {
|
3246
|
+
return JSON.parse(wrapIntegersInBigIntValueObject(json), (_, value) => {
|
3247
|
+
return isBigIntValueObject(value) ? unwrapBigIntValueObject(value) : value;
|
3248
|
+
});
|
3249
|
+
}
|
3250
|
+
function wrapIntegersInBigIntValueObject(json) {
|
3251
|
+
const out = [];
|
3252
|
+
let inQuote = false;
|
3253
|
+
for (let ii = 0; ii < json.length; ii++) {
|
3254
|
+
let isEscaped = false;
|
3255
|
+
if (json[ii] === "\\") {
|
3256
|
+
out.push(json[ii++]);
|
3257
|
+
isEscaped = !isEscaped;
|
3258
|
+
}
|
3259
|
+
if (json[ii] === '"') {
|
3260
|
+
out.push(json[ii]);
|
3261
|
+
if (!isEscaped) {
|
3262
|
+
inQuote = !inQuote;
|
3263
|
+
}
|
3264
|
+
continue;
|
3265
|
+
}
|
3266
|
+
if (!inQuote) {
|
3267
|
+
const consumedNumber = consumeNumber(json, ii);
|
3268
|
+
if (consumedNumber == null ? void 0 : consumedNumber.length) {
|
3269
|
+
ii += consumedNumber.length - 1;
|
3270
|
+
if (consumedNumber.match(/\.|[eE]-/)) {
|
3271
|
+
out.push(consumedNumber);
|
3272
|
+
} else {
|
3273
|
+
out.push(wrapBigIntValueObject(consumedNumber));
|
3274
|
+
}
|
3275
|
+
continue;
|
3276
|
+
}
|
3277
|
+
}
|
3278
|
+
out.push(json[ii]);
|
3279
|
+
}
|
3280
|
+
return out.join("");
|
3281
|
+
}
|
3282
|
+
function consumeNumber(json, ii) {
|
3283
|
+
var _a;
|
3284
|
+
const JSON_NUMBER_REGEX = /^-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?/;
|
3285
|
+
if (!((_a = json[ii]) == null ? void 0 : _a.match(/[-\d]/))) {
|
3286
|
+
return null;
|
3287
|
+
}
|
3288
|
+
const numberMatch = json.slice(ii).match(JSON_NUMBER_REGEX);
|
3289
|
+
return numberMatch ? numberMatch[0] : null;
|
3290
|
+
}
|
3291
|
+
function wrapBigIntValueObject(value) {
|
3292
|
+
return `{"$n":"${value}"}`;
|
3293
|
+
}
|
3294
|
+
function unwrapBigIntValueObject({ $n }) {
|
3295
|
+
if ($n.match(/[eE]/)) {
|
3296
|
+
const [units, exponent] = $n.split(/[eE]/);
|
3297
|
+
return BigInt(units) * BigInt(10) ** BigInt(exponent);
|
3298
|
+
}
|
3299
|
+
return BigInt($n);
|
3300
|
+
}
|
3301
|
+
function isBigIntValueObject(value) {
|
3302
|
+
return !!value && typeof value === "object" && "$n" in value && typeof value.$n === "string";
|
3303
|
+
}
|
3199
3304
|
var _nextMessageId = 0;
|
3200
3305
|
function getNextMessageId() {
|
3201
3306
|
const id = _nextMessageId;
|
3202
3307
|
_nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;
|
3203
3308
|
return id;
|
3204
3309
|
}
|
3205
|
-
function createRpcMessage(
|
3310
|
+
function createRpcMessage(request) {
|
3206
3311
|
return {
|
3207
3312
|
id: getNextMessageId(),
|
3208
3313
|
jsonrpc: "2.0",
|
3209
|
-
method,
|
3210
|
-
params
|
3314
|
+
method: request.methodName,
|
3315
|
+
params: request.params
|
3211
3316
|
};
|
3212
3317
|
}
|
3318
|
+
function stringifyJsonWithBigints(value, space) {
|
3319
|
+
return unwrapBigIntValueObject2(
|
3320
|
+
JSON.stringify(value, (_, v) => typeof v === "bigint" ? wrapBigIntValueObject2(v) : v, space)
|
3321
|
+
);
|
3322
|
+
}
|
3323
|
+
function wrapBigIntValueObject2(value) {
|
3324
|
+
return { $n: `${value}` };
|
3325
|
+
}
|
3326
|
+
function unwrapBigIntValueObject2(value) {
|
3327
|
+
return value.replace(/\{\s*"\$n"\s*:\s*"(-?\d+)"\s*\}/g, "$1");
|
3328
|
+
}
|
3213
3329
|
|
3214
3330
|
// ../rpc-spec/dist/index.browser.mjs
|
3215
3331
|
function createRpc(rpcConfig) {
|
@@ -3226,27 +3342,27 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3226
3342
|
get(target, p, receiver) {
|
3227
3343
|
return function(...rawParams) {
|
3228
3344
|
const methodName = p.toString();
|
3229
|
-
const
|
3230
|
-
|
3231
|
-
|
3345
|
+
const getApiPlan = Reflect.get(target, methodName, receiver);
|
3346
|
+
if (!getApiPlan) {
|
3347
|
+
throw new SolanaError(SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD, {
|
3348
|
+
method: methodName,
|
3349
|
+
params: rawParams
|
3350
|
+
});
|
3351
|
+
}
|
3352
|
+
const apiPlan = getApiPlan(...rawParams);
|
3353
|
+
return createPendingRpcRequest(rpcConfig, apiPlan);
|
3232
3354
|
};
|
3233
3355
|
}
|
3234
3356
|
});
|
3235
3357
|
}
|
3236
|
-
function createPendingRpcRequest(
|
3358
|
+
function createPendingRpcRequest({ transport }, plan) {
|
3237
3359
|
return {
|
3238
3360
|
async send(options) {
|
3239
|
-
|
3240
|
-
const payload = createRpcMessage(methodName, params);
|
3241
|
-
const response = await rpcConfig.transport({
|
3242
|
-
payload,
|
3243
|
-
signal: options == null ? void 0 : options.abortSignal
|
3244
|
-
});
|
3245
|
-
return responseTransformer ? responseTransformer(response, methodName) : response;
|
3361
|
+
return await plan.execute({ signal: options == null ? void 0 : options.abortSignal, transport });
|
3246
3362
|
}
|
3247
3363
|
};
|
3248
3364
|
}
|
3249
|
-
function
|
3365
|
+
function createJsonRpcApi(config) {
|
3250
3366
|
return new Proxy({}, {
|
3251
3367
|
defineProperty() {
|
3252
3368
|
return false;
|
@@ -3258,19 +3374,106 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3258
3374
|
const [_, p] = args;
|
3259
3375
|
const methodName = p.toString();
|
3260
3376
|
return function(...rawParams) {
|
3261
|
-
const
|
3262
|
-
const
|
3263
|
-
return {
|
3264
|
-
|
3265
|
-
|
3266
|
-
|
3267
|
-
|
3377
|
+
const rawRequest = Object.freeze({ methodName, params: rawParams });
|
3378
|
+
const request = (config == null ? void 0 : config.requestTransformer) ? config == null ? void 0 : config.requestTransformer(rawRequest) : rawRequest;
|
3379
|
+
return Object.freeze({
|
3380
|
+
execute: async ({ signal, transport }) => {
|
3381
|
+
const payload = createRpcMessage(request);
|
3382
|
+
const response = await transport({ payload, signal });
|
3383
|
+
if (!(config == null ? void 0 : config.responseTransformer)) {
|
3384
|
+
return response;
|
3385
|
+
}
|
3386
|
+
return config.responseTransformer(response, request);
|
3387
|
+
}
|
3388
|
+
});
|
3268
3389
|
};
|
3269
3390
|
}
|
3270
3391
|
});
|
3271
3392
|
}
|
3393
|
+
function isJsonRpcPayload(payload) {
|
3394
|
+
if (payload == null || typeof payload !== "object" || Array.isArray(payload)) {
|
3395
|
+
return false;
|
3396
|
+
}
|
3397
|
+
return "jsonrpc" in payload && payload.jsonrpc === "2.0" && "method" in payload && typeof payload.method === "string" && "params" in payload;
|
3398
|
+
}
|
3272
3399
|
|
3273
3400
|
// ../rpc-transformers/dist/index.browser.mjs
|
3401
|
+
var KEYPATH_WILDCARD = {};
|
3402
|
+
function getTreeWalker(visitors) {
|
3403
|
+
return function traverse(node, state) {
|
3404
|
+
if (Array.isArray(node)) {
|
3405
|
+
return node.map((element, ii) => {
|
3406
|
+
const nextState = {
|
3407
|
+
...state,
|
3408
|
+
keyPath: [...state.keyPath, ii]
|
3409
|
+
};
|
3410
|
+
return traverse(element, nextState);
|
3411
|
+
});
|
3412
|
+
} else if (typeof node === "object" && node !== null) {
|
3413
|
+
const out = {};
|
3414
|
+
for (const propName in node) {
|
3415
|
+
if (!Object.prototype.hasOwnProperty.call(node, propName)) {
|
3416
|
+
continue;
|
3417
|
+
}
|
3418
|
+
const nextState = {
|
3419
|
+
...state,
|
3420
|
+
keyPath: [...state.keyPath, propName]
|
3421
|
+
};
|
3422
|
+
out[propName] = traverse(node[propName], nextState);
|
3423
|
+
}
|
3424
|
+
return out;
|
3425
|
+
} else {
|
3426
|
+
return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);
|
3427
|
+
}
|
3428
|
+
};
|
3429
|
+
}
|
3430
|
+
function getTreeWalkerRequestTransformer(visitors, initialState) {
|
3431
|
+
return (request) => {
|
3432
|
+
const traverse = getTreeWalker(visitors);
|
3433
|
+
return Object.freeze({
|
3434
|
+
...request,
|
3435
|
+
params: traverse(request.params, initialState)
|
3436
|
+
});
|
3437
|
+
};
|
3438
|
+
}
|
3439
|
+
function getTreeWalkerResponseTransformer(visitors, initialState) {
|
3440
|
+
return (json) => getTreeWalker(visitors)(json, initialState);
|
3441
|
+
}
|
3442
|
+
function getBigIntDowncastRequestTransformer() {
|
3443
|
+
return getTreeWalkerRequestTransformer([downcastNodeToNumberIfBigint], { keyPath: [] });
|
3444
|
+
}
|
3445
|
+
function downcastNodeToNumberIfBigint(value) {
|
3446
|
+
return typeof value === "bigint" ? (
|
3447
|
+
// FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana
|
3448
|
+
// JSON RPC implementation so that we can throw away this entire patcher instead of unsafely
|
3449
|
+
// downcasting `bigints` to `numbers`.
|
3450
|
+
Number(value)
|
3451
|
+
) : value;
|
3452
|
+
}
|
3453
|
+
function getDefaultCommitmentRequestTransformer({
|
3454
|
+
defaultCommitment,
|
3455
|
+
optionsObjectPositionByMethod
|
3456
|
+
}) {
|
3457
|
+
return (request) => {
|
3458
|
+
const { params, methodName } = request;
|
3459
|
+
if (!Array.isArray(params)) {
|
3460
|
+
return request;
|
3461
|
+
}
|
3462
|
+
const optionsObjectPositionInParams = optionsObjectPositionByMethod[methodName];
|
3463
|
+
if (optionsObjectPositionInParams == null) {
|
3464
|
+
return request;
|
3465
|
+
}
|
3466
|
+
return Object.freeze({
|
3467
|
+
methodName,
|
3468
|
+
params: applyDefaultCommitment({
|
3469
|
+
commitmentPropertyName: methodName === "sendTransaction" ? "preflightCommitment" : "commitment",
|
3470
|
+
optionsObjectPositionInParams,
|
3471
|
+
overrideCommitment: defaultCommitment,
|
3472
|
+
params
|
3473
|
+
})
|
3474
|
+
});
|
3475
|
+
};
|
3476
|
+
}
|
3274
3477
|
function applyDefaultCommitment({
|
3275
3478
|
commitmentPropertyName,
|
3276
3479
|
params,
|
@@ -3316,13 +3519,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3316
3519
|
}
|
3317
3520
|
return params;
|
3318
3521
|
}
|
3319
|
-
function
|
3320
|
-
return
|
3321
|
-
|
3322
|
-
|
3323
|
-
|
3324
|
-
|
3325
|
-
|
3522
|
+
function getIntegerOverflowRequestTransformer(onIntegerOverflow) {
|
3523
|
+
return (request) => {
|
3524
|
+
const transformer = getTreeWalkerRequestTransformer(
|
3525
|
+
[getIntegerOverflowNodeVisitor((...args) => onIntegerOverflow(request, ...args))],
|
3526
|
+
{ keyPath: [] }
|
3527
|
+
);
|
3528
|
+
return transformer(request);
|
3529
|
+
};
|
3326
3530
|
}
|
3327
3531
|
function getIntegerOverflowNodeVisitor(onIntegerOverflow) {
|
3328
3532
|
return (value, { keyPath }) => {
|
@@ -3344,15 +3548,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3344
3548
|
getBlockProduction: 0,
|
3345
3549
|
getBlocks: 2,
|
3346
3550
|
getBlocksWithLimit: 2,
|
3347
|
-
getConfirmedBlock: 1,
|
3348
|
-
getConfirmedBlocks: 1,
|
3349
|
-
getConfirmedBlocksWithLimit: 2,
|
3350
|
-
getConfirmedSignaturesForAddress2: 1,
|
3351
|
-
getConfirmedTransaction: 1,
|
3352
3551
|
getEpochInfo: 0,
|
3353
|
-
getFeeCalculatorForBlockhash: 1,
|
3354
3552
|
getFeeForMessage: 1,
|
3355
|
-
getFees: 1,
|
3356
3553
|
getInflationGovernor: 0,
|
3357
3554
|
getInflationReward: 1,
|
3358
3555
|
getLargestAccounts: 0,
|
@@ -3361,11 +3558,9 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3361
3558
|
getMinimumBalanceForRentExemption: 1,
|
3362
3559
|
getMultipleAccounts: 1,
|
3363
3560
|
getProgramAccounts: 1,
|
3364
|
-
getRecentBlockhash: 1,
|
3365
3561
|
getSignaturesForAddress: 1,
|
3366
3562
|
getSlot: 0,
|
3367
3563
|
getSlotLeader: 0,
|
3368
|
-
getStakeActivation: 1,
|
3369
3564
|
getStakeMinimumDelegation: 0,
|
3370
3565
|
getSupply: 0,
|
3371
3566
|
getTokenAccountBalance: 1,
|
@@ -3384,73 +3579,33 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3384
3579
|
signatureNotifications: 1,
|
3385
3580
|
simulateTransaction: 1
|
3386
3581
|
};
|
3387
|
-
|
3388
|
-
function getTreeWalker(visitors) {
|
3389
|
-
return function traverse(node, state) {
|
3390
|
-
if (Array.isArray(node)) {
|
3391
|
-
return node.map((element, ii) => {
|
3392
|
-
const nextState = {
|
3393
|
-
...state,
|
3394
|
-
keyPath: [...state.keyPath, ii]
|
3395
|
-
};
|
3396
|
-
return traverse(element, nextState);
|
3397
|
-
});
|
3398
|
-
} else if (typeof node === "object" && node !== null) {
|
3399
|
-
const out = {};
|
3400
|
-
for (const propName in node) {
|
3401
|
-
if (!Object.prototype.hasOwnProperty.call(node, propName)) {
|
3402
|
-
continue;
|
3403
|
-
}
|
3404
|
-
const nextState = {
|
3405
|
-
...state,
|
3406
|
-
keyPath: [...state.keyPath, propName]
|
3407
|
-
};
|
3408
|
-
out[propName] = traverse(node[propName], nextState);
|
3409
|
-
}
|
3410
|
-
return out;
|
3411
|
-
} else {
|
3412
|
-
return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);
|
3413
|
-
}
|
3414
|
-
};
|
3415
|
-
}
|
3416
|
-
function getDefaultParamsTransformerForSolanaRpc(config) {
|
3417
|
-
const defaultCommitment = config == null ? void 0 : config.defaultCommitment;
|
3582
|
+
function getDefaultRequestTransformerForSolanaRpc(config) {
|
3418
3583
|
const handleIntegerOverflow = config == null ? void 0 : config.onIntegerOverflow;
|
3419
|
-
return (
|
3420
|
-
const traverse = getTreeWalker([
|
3421
|
-
...handleIntegerOverflow ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))] : [],
|
3422
|
-
downcastNodeToNumberIfBigint
|
3423
|
-
]);
|
3424
|
-
const initialState = {
|
3425
|
-
keyPath: []
|
3426
|
-
};
|
3427
|
-
const patchedParams = traverse(rawParams, initialState);
|
3428
|
-
if (!Array.isArray(patchedParams)) {
|
3429
|
-
return patchedParams;
|
3430
|
-
}
|
3431
|
-
const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];
|
3432
|
-
if (optionsObjectPositionInParams == null) {
|
3433
|
-
return patchedParams;
|
3434
|
-
}
|
3584
|
+
return (request) => {
|
3435
3585
|
return pipe(
|
3436
|
-
|
3437
|
-
(
|
3438
|
-
|
3439
|
-
|
3440
|
-
|
3441
|
-
|
3442
|
-
})
|
3443
|
-
// FIXME Remove when https://github.com/anza-xyz/agave/pull/483 is deployed.
|
3444
|
-
(params) => methodName === "sendTransaction" ? applyFixForIssue479(params) : params
|
3586
|
+
request,
|
3587
|
+
handleIntegerOverflow ? getIntegerOverflowRequestTransformer(handleIntegerOverflow) : (r) => r,
|
3588
|
+
getBigIntDowncastRequestTransformer(),
|
3589
|
+
getDefaultCommitmentRequestTransformer({
|
3590
|
+
defaultCommitment: config == null ? void 0 : config.defaultCommitment,
|
3591
|
+
optionsObjectPositionByMethod: OPTIONS_OBJECT_POSITION_BY_METHOD
|
3592
|
+
})
|
3445
3593
|
);
|
3446
3594
|
};
|
3447
3595
|
}
|
3448
|
-
function
|
3449
|
-
|
3450
|
-
|
3451
|
-
|
3452
|
-
}
|
3453
|
-
|
3596
|
+
function getBigIntUpcastResponseTransformer(allowedNumericKeyPaths) {
|
3597
|
+
return getTreeWalkerResponseTransformer([getBigIntUpcastVisitor(allowedNumericKeyPaths)], { keyPath: [] });
|
3598
|
+
}
|
3599
|
+
function getBigIntUpcastVisitor(allowedNumericKeyPaths) {
|
3600
|
+
return function upcastNodeToBigIntIfNumber(value, { keyPath }) {
|
3601
|
+
const isInteger = typeof value === "number" && Number.isInteger(value) || typeof value === "bigint";
|
3602
|
+
if (!isInteger) return value;
|
3603
|
+
if (keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)) {
|
3604
|
+
return Number(value);
|
3605
|
+
} else {
|
3606
|
+
return BigInt(value);
|
3607
|
+
}
|
3608
|
+
};
|
3454
3609
|
}
|
3455
3610
|
function keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths) {
|
3456
3611
|
return allowedNumericKeyPaths.some((prohibitedKeyPath) => {
|
@@ -3467,26 +3622,35 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3467
3622
|
return true;
|
3468
3623
|
});
|
3469
3624
|
}
|
3470
|
-
function
|
3471
|
-
return
|
3472
|
-
|
3473
|
-
|
3474
|
-
|
3475
|
-
|
3625
|
+
function getResultResponseTransformer() {
|
3626
|
+
return (json) => json.result;
|
3627
|
+
}
|
3628
|
+
function getThrowSolanaErrorResponseTransformer() {
|
3629
|
+
return (json) => {
|
3630
|
+
const jsonRpcResponse = json;
|
3631
|
+
if ("error" in jsonRpcResponse) {
|
3632
|
+
throw getSolanaErrorFromJsonRpcError(jsonRpcResponse.error);
|
3476
3633
|
}
|
3634
|
+
return jsonRpcResponse;
|
3477
3635
|
};
|
3478
3636
|
}
|
3479
3637
|
function getDefaultResponseTransformerForSolanaRpc(config) {
|
3480
|
-
return (
|
3481
|
-
|
3482
|
-
throw getSolanaErrorFromJsonRpcError(rawResponse.error);
|
3483
|
-
}
|
3638
|
+
return (response, request) => {
|
3639
|
+
const methodName = request.methodName;
|
3484
3640
|
const keyPaths = (config == null ? void 0 : config.allowedNumericKeyPaths) && methodName ? config.allowedNumericKeyPaths[methodName] : void 0;
|
3485
|
-
|
3486
|
-
|
3487
|
-
|
3488
|
-
|
3489
|
-
|
3641
|
+
return pipe(
|
3642
|
+
response,
|
3643
|
+
(r) => getThrowSolanaErrorResponseTransformer()(r, request),
|
3644
|
+
(r) => getResultResponseTransformer()(r, request),
|
3645
|
+
(r) => getBigIntUpcastResponseTransformer(keyPaths != null ? keyPaths : [])(r, request)
|
3646
|
+
);
|
3647
|
+
};
|
3648
|
+
}
|
3649
|
+
function getDefaultResponseTransformerForSolanaRpcSubscriptions(config) {
|
3650
|
+
return (response, request) => {
|
3651
|
+
const methodName = request.methodName;
|
3652
|
+
const keyPaths = (config == null ? void 0 : config.allowedNumericKeyPaths) && methodName ? config.allowedNumericKeyPaths[methodName] : void 0;
|
3653
|
+
return pipe(response, (r) => getBigIntUpcastResponseTransformer(keyPaths != null ? keyPaths : [])(r, request));
|
3490
3654
|
};
|
3491
3655
|
}
|
3492
3656
|
var jsonParsedTokenAccountsConfigs = [
|
@@ -3542,8 +3706,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3542
3706
|
|
3543
3707
|
// ../rpc-api/dist/index.browser.mjs
|
3544
3708
|
function createSolanaRpcApi(config) {
|
3545
|
-
return
|
3546
|
-
|
3709
|
+
return createJsonRpcApi({
|
3710
|
+
requestTransformer: getDefaultRequestTransformerForSolanaRpc(config),
|
3547
3711
|
responseTransformer: getDefaultResponseTransformerForSolanaRpc({
|
3548
3712
|
allowedNumericKeyPaths: getAllowedNumericKeypaths()
|
3549
3713
|
})
|
@@ -3555,7 +3719,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3555
3719
|
memoizedKeypaths = {
|
3556
3720
|
getAccountInfo: jsonParsedAccountsConfigs.map((c) => ["value", ...c]),
|
3557
3721
|
getBlock: [
|
3558
|
-
["blockTime"],
|
3559
3722
|
["transactions", KEYPATH_WILDCARD, "meta", "preTokenBalances", KEYPATH_WILDCARD, "accountIndex"],
|
3560
3723
|
[
|
3561
3724
|
"transactions",
|
@@ -3588,7 +3751,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3588
3751
|
...messageConfig.map((c) => ["transactions", KEYPATH_WILDCARD, "transaction", "message", ...c]),
|
3589
3752
|
["rewards", KEYPATH_WILDCARD, "commission"]
|
3590
3753
|
],
|
3591
|
-
getBlockTime: [[]],
|
3592
3754
|
getClusterNodes: [
|
3593
3755
|
[KEYPATH_WILDCARD, "featureSet"],
|
3594
3756
|
[KEYPATH_WILDCARD, "shredVersion"]
|
@@ -3655,31 +3817,33 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3655
3817
|
"content-length": true,
|
3656
3818
|
"content-type": true
|
3657
3819
|
};
|
3658
|
-
var FORBIDDEN_HEADERS =
|
3659
|
-
|
3660
|
-
|
3661
|
-
|
3662
|
-
|
3663
|
-
|
3664
|
-
|
3665
|
-
|
3666
|
-
|
3667
|
-
|
3668
|
-
|
3669
|
-
|
3670
|
-
|
3671
|
-
|
3672
|
-
|
3673
|
-
|
3674
|
-
|
3675
|
-
|
3676
|
-
|
3677
|
-
|
3678
|
-
|
3679
|
-
|
3680
|
-
|
3681
|
-
|
3682
|
-
|
3820
|
+
var FORBIDDEN_HEADERS = /* @__PURE__ */ Object.assign(
|
3821
|
+
{
|
3822
|
+
"accept-charset": true,
|
3823
|
+
"access-control-request-headers": true,
|
3824
|
+
"access-control-request-method": true,
|
3825
|
+
connection: true,
|
3826
|
+
"content-length": true,
|
3827
|
+
cookie: true,
|
3828
|
+
date: true,
|
3829
|
+
dnt: true,
|
3830
|
+
expect: true,
|
3831
|
+
host: true,
|
3832
|
+
"keep-alive": true,
|
3833
|
+
origin: true,
|
3834
|
+
"permissions-policy": true,
|
3835
|
+
// Prefix matching is implemented in code, below.
|
3836
|
+
// 'proxy-': true,
|
3837
|
+
// 'sec-': true,
|
3838
|
+
referer: true,
|
3839
|
+
te: true,
|
3840
|
+
trailer: true,
|
3841
|
+
"transfer-encoding": true,
|
3842
|
+
upgrade: true,
|
3843
|
+
via: true
|
3844
|
+
},
|
3845
|
+
{ "accept-encoding": true }
|
3846
|
+
);
|
3683
3847
|
function assertIsAllowedHttpRequestHeaders(headers) {
|
3684
3848
|
const badHeaders = Object.keys(headers).filter((headerName) => {
|
3685
3849
|
const lowercaseHeaderName = headerName.toLowerCase();
|
@@ -3712,7 +3876,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3712
3876
|
if ("dispatcher_NODE_ONLY" in config) {
|
3713
3877
|
warnDispatcherWasSuppliedInNonNodeEnvironment();
|
3714
3878
|
}
|
3715
|
-
const { headers, url } = config;
|
3879
|
+
const { fromJson, headers, toJson, url } = config;
|
3716
3880
|
if (headers) {
|
3717
3881
|
assertIsAllowedHttpRequestHeaders(headers);
|
3718
3882
|
}
|
@@ -3722,7 +3886,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3722
3886
|
payload,
|
3723
3887
|
signal
|
3724
3888
|
}) {
|
3725
|
-
const body = JSON.stringify(payload);
|
3889
|
+
const body = toJson ? toJson(payload) : JSON.stringify(payload);
|
3726
3890
|
const requestInfo = {
|
3727
3891
|
...dispatcherConfig,
|
3728
3892
|
body,
|
@@ -3743,9 +3907,87 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3743
3907
|
statusCode: response.status
|
3744
3908
|
});
|
3745
3909
|
}
|
3910
|
+
if (fromJson) {
|
3911
|
+
return fromJson(await response.text(), payload);
|
3912
|
+
}
|
3746
3913
|
return await response.json();
|
3747
3914
|
};
|
3748
3915
|
}
|
3916
|
+
var SOLANA_RPC_METHODS = [
|
3917
|
+
"getAccountInfo",
|
3918
|
+
"getBalance",
|
3919
|
+
"getBlock",
|
3920
|
+
"getBlockCommitment",
|
3921
|
+
"getBlockHeight",
|
3922
|
+
"getBlockProduction",
|
3923
|
+
"getBlocks",
|
3924
|
+
"getBlocksWithLimit",
|
3925
|
+
"getBlockTime",
|
3926
|
+
"getClusterNodes",
|
3927
|
+
"getEpochInfo",
|
3928
|
+
"getEpochSchedule",
|
3929
|
+
"getFeeForMessage",
|
3930
|
+
"getFirstAvailableBlock",
|
3931
|
+
"getGenesisHash",
|
3932
|
+
"getHealth",
|
3933
|
+
"getHighestSnapshotSlot",
|
3934
|
+
"getIdentity",
|
3935
|
+
"getInflationGovernor",
|
3936
|
+
"getInflationRate",
|
3937
|
+
"getInflationReward",
|
3938
|
+
"getLargestAccounts",
|
3939
|
+
"getLatestBlockhash",
|
3940
|
+
"getLeaderSchedule",
|
3941
|
+
"getMaxRetransmitSlot",
|
3942
|
+
"getMaxShredInsertSlot",
|
3943
|
+
"getMinimumBalanceForRentExemption",
|
3944
|
+
"getMultipleAccounts",
|
3945
|
+
"getProgramAccounts",
|
3946
|
+
"getRecentPerformanceSamples",
|
3947
|
+
"getRecentPrioritizationFees",
|
3948
|
+
"getSignaturesForAddress",
|
3949
|
+
"getSignatureStatuses",
|
3950
|
+
"getSlot",
|
3951
|
+
"getSlotLeader",
|
3952
|
+
"getSlotLeaders",
|
3953
|
+
"getStakeMinimumDelegation",
|
3954
|
+
"getSupply",
|
3955
|
+
"getTokenAccountBalance",
|
3956
|
+
"getTokenAccountsByDelegate",
|
3957
|
+
"getTokenAccountsByOwner",
|
3958
|
+
"getTokenLargestAccounts",
|
3959
|
+
"getTokenSupply",
|
3960
|
+
"getTransaction",
|
3961
|
+
"getTransactionCount",
|
3962
|
+
"getVersion",
|
3963
|
+
"getVoteAccounts",
|
3964
|
+
"index",
|
3965
|
+
"isBlockhashValid",
|
3966
|
+
"minimumLedgerSlot",
|
3967
|
+
"requestAirdrop",
|
3968
|
+
"sendTransaction",
|
3969
|
+
"simulateTransaction"
|
3970
|
+
];
|
3971
|
+
function isSolanaRequest(payload) {
|
3972
|
+
return isJsonRpcPayload(payload) && SOLANA_RPC_METHODS.includes(payload.method);
|
3973
|
+
}
|
3974
|
+
function createHttpTransportForSolanaRpc(config) {
|
3975
|
+
return createHttpTransport({
|
3976
|
+
...config,
|
3977
|
+
fromJson: (rawResponse, payload) => {
|
3978
|
+
if (!isSolanaRequest(payload)) return JSON.parse(rawResponse);
|
3979
|
+
const response = parseJsonWithBigInts(rawResponse);
|
3980
|
+
if (isErrorResponse(response)) {
|
3981
|
+
return { ...response, error: { ...response.error, code: Number(response.error.code) } };
|
3982
|
+
}
|
3983
|
+
return response;
|
3984
|
+
},
|
3985
|
+
toJson: (payload) => isSolanaRequest(payload) ? stringifyJsonWithBigints(payload) : JSON.stringify(payload)
|
3986
|
+
});
|
3987
|
+
}
|
3988
|
+
function isErrorResponse(value) {
|
3989
|
+
return !!value && typeof value === "object" && "error" in value && !!value.error && typeof value.error === "object" && "code" in value.error;
|
3990
|
+
}
|
3749
3991
|
|
3750
3992
|
// ../fast-stable-stringify/dist/index.browser.mjs
|
3751
3993
|
var objToString = Object.prototype.toString;
|
@@ -3854,8 +4096,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3854
4096
|
}
|
3855
4097
|
var DEFAULT_RPC_CONFIG = {
|
3856
4098
|
defaultCommitment: "confirmed",
|
3857
|
-
onIntegerOverflow(
|
3858
|
-
throw createSolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);
|
4099
|
+
onIntegerOverflow(request, keyPath, value) {
|
4100
|
+
throw createSolanaJsonRpcIntegerOverflowError(request.methodName, keyPath, value);
|
3859
4101
|
}
|
3860
4102
|
};
|
3861
4103
|
var EXPLICIT_ABORT_TOKEN;
|
@@ -3866,14 +4108,14 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3866
4108
|
}
|
3867
4109
|
function getRpcTransportWithRequestCoalescing(transport, getDeduplicationKey) {
|
3868
4110
|
let coalescedRequestsByDeduplicationKey;
|
3869
|
-
return async function makeCoalescedHttpRequest(
|
3870
|
-
const { payload, signal } =
|
4111
|
+
return async function makeCoalescedHttpRequest(request) {
|
4112
|
+
const { payload, signal } = request;
|
3871
4113
|
const deduplicationKey = getDeduplicationKey(payload);
|
3872
4114
|
if (deduplicationKey === void 0) {
|
3873
|
-
return await transport(
|
4115
|
+
return await transport(request);
|
3874
4116
|
}
|
3875
4117
|
if (!coalescedRequestsByDeduplicationKey) {
|
3876
|
-
|
4118
|
+
queueMicrotask(() => {
|
3877
4119
|
coalescedRequestsByDeduplicationKey = void 0;
|
3878
4120
|
});
|
3879
4121
|
coalescedRequestsByDeduplicationKey = {};
|
@@ -3883,7 +4125,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3883
4125
|
const responsePromise = (async () => {
|
3884
4126
|
try {
|
3885
4127
|
return await transport({
|
3886
|
-
...
|
4128
|
+
...request,
|
3887
4129
|
signal: abortController.signal
|
3888
4130
|
});
|
3889
4131
|
} catch (e3) {
|
@@ -3907,7 +4149,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3907
4149
|
const handleAbort = (e3) => {
|
3908
4150
|
signal.removeEventListener("abort", handleAbort);
|
3909
4151
|
coalescedRequest.numConsumers -= 1;
|
3910
|
-
|
4152
|
+
queueMicrotask(() => {
|
3911
4153
|
if (coalescedRequest.numConsumers === 0) {
|
3912
4154
|
const abortController = coalescedRequest.abortController;
|
3913
4155
|
abortController.abort(EXPLICIT_ABORT_TOKEN || (EXPLICIT_ABORT_TOKEN = createExplicitAbortToken()));
|
@@ -3925,12 +4167,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3925
4167
|
}
|
3926
4168
|
};
|
3927
4169
|
}
|
3928
|
-
function isJsonRpcPayload(payload) {
|
3929
|
-
if (payload == null || typeof payload !== "object" || Array.isArray(payload)) {
|
3930
|
-
return false;
|
3931
|
-
}
|
3932
|
-
return "jsonrpc" in payload && payload.jsonrpc === "2.0" && "method" in payload && typeof payload.method === "string" && "params" in payload;
|
3933
|
-
}
|
3934
4170
|
function getSolanaRpcPayloadDeduplicationKey(payload) {
|
3935
4171
|
return isJsonRpcPayload(payload) ? src_default([payload.method, payload.params]) : void 0;
|
3936
4172
|
}
|
@@ -3942,15 +4178,15 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3942
4178
|
return out;
|
3943
4179
|
}
|
3944
4180
|
function createDefaultRpcTransport(config) {
|
3945
|
-
var _a;
|
3946
4181
|
return pipe(
|
3947
|
-
|
4182
|
+
createHttpTransportForSolanaRpc({
|
3948
4183
|
...config,
|
3949
4184
|
headers: {
|
4185
|
+
...false,
|
3950
4186
|
...config.headers ? normalizeHeaders2(config.headers) : void 0,
|
3951
4187
|
...{
|
3952
4188
|
// Keep these headers lowercase so they will override any user-supplied headers above.
|
3953
|
-
"solana-client":
|
4189
|
+
"solana-client": `js/${"2.0.0-rc.2"}`
|
3954
4190
|
}
|
3955
4191
|
}
|
3956
4192
|
}),
|
@@ -3967,98 +4203,285 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
3967
4203
|
});
|
3968
4204
|
}
|
3969
4205
|
|
3970
|
-
// ../
|
3971
|
-
|
3972
|
-
|
4206
|
+
// ../subscribable/dist/index.browser.mjs
|
4207
|
+
var EXPLICIT_ABORT_TOKEN2;
|
4208
|
+
function createExplicitAbortToken2() {
|
4209
|
+
return Symbol(
|
4210
|
+
"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user"
|
4211
|
+
);
|
3973
4212
|
}
|
3974
|
-
|
3975
|
-
|
3976
|
-
|
3977
|
-
|
3978
|
-
|
3979
|
-
|
3980
|
-
|
3981
|
-
|
3982
|
-
|
3983
|
-
|
3984
|
-
|
3985
|
-
|
3986
|
-
|
3987
|
-
|
3988
|
-
|
3989
|
-
|
3990
|
-
|
3991
|
-
|
3992
|
-
|
3993
|
-
subscribeMethodName: notificationName.replace(/Notifications$/, "Subscribe"),
|
3994
|
-
unsubscribeMethodName: notificationName.replace(/Notifications$/, "Unsubscribe")
|
3995
|
-
};
|
3996
|
-
return createPendingRpcSubscription(rpcConfig, newRequest);
|
3997
|
-
};
|
4213
|
+
var UNINITIALIZED = Symbol();
|
4214
|
+
function createAsyncIterableFromDataPublisher({
|
4215
|
+
abortSignal,
|
4216
|
+
dataChannelName,
|
4217
|
+
dataPublisher,
|
4218
|
+
errorChannelName
|
4219
|
+
}) {
|
4220
|
+
const iteratorState = /* @__PURE__ */ new Map();
|
4221
|
+
function publishErrorToAllIterators(reason) {
|
4222
|
+
for (const [iteratorKey, state] of iteratorState.entries()) {
|
4223
|
+
if (state.__hasPolled) {
|
4224
|
+
iteratorState.delete(iteratorKey);
|
4225
|
+
state.onError(reason);
|
4226
|
+
} else {
|
4227
|
+
state.publishQueue.push({
|
4228
|
+
__type: 1,
|
4229
|
+
err: reason
|
4230
|
+
});
|
4231
|
+
}
|
3998
4232
|
}
|
4233
|
+
}
|
4234
|
+
const abortController = new AbortController();
|
4235
|
+
abortSignal.addEventListener("abort", () => {
|
4236
|
+
abortController.abort();
|
4237
|
+
publishErrorToAllIterators(EXPLICIT_ABORT_TOKEN2 || (EXPLICIT_ABORT_TOKEN2 = createExplicitAbortToken2()));
|
3999
4238
|
});
|
4000
|
-
|
4001
|
-
|
4002
|
-
(
|
4003
|
-
|
4004
|
-
|
4005
|
-
|
4006
|
-
|
4007
|
-
|
4008
|
-
|
4009
|
-
|
4010
|
-
|
4011
|
-
|
4012
|
-
|
4013
|
-
|
4014
|
-
|
4015
|
-
|
4016
|
-
|
4017
|
-
if (
|
4018
|
-
const
|
4019
|
-
|
4020
|
-
|
4021
|
-
});
|
4239
|
+
const options = { signal: abortController.signal };
|
4240
|
+
let firstError = UNINITIALIZED;
|
4241
|
+
dataPublisher.on(
|
4242
|
+
errorChannelName,
|
4243
|
+
(err) => {
|
4244
|
+
if (firstError === UNINITIALIZED) {
|
4245
|
+
firstError = err;
|
4246
|
+
abortController.abort();
|
4247
|
+
publishErrorToAllIterators(err);
|
4248
|
+
}
|
4249
|
+
},
|
4250
|
+
options
|
4251
|
+
);
|
4252
|
+
dataPublisher.on(
|
4253
|
+
dataChannelName,
|
4254
|
+
(data) => {
|
4255
|
+
iteratorState.forEach((state, iteratorKey) => {
|
4256
|
+
if (state.__hasPolled) {
|
4257
|
+
const { onData } = state;
|
4258
|
+
iteratorState.set(iteratorKey, { __hasPolled: false, publishQueue: [] });
|
4259
|
+
onData(data);
|
4022
4260
|
} else {
|
4023
|
-
|
4261
|
+
state.publishQueue.push({
|
4262
|
+
__type: 0,
|
4263
|
+
data
|
4264
|
+
});
|
4024
4265
|
}
|
4025
|
-
}
|
4026
|
-
abortSignal.addEventListener("abort", handleCleanup);
|
4027
|
-
const connectionAbortController = new AbortController();
|
4028
|
-
const subscribeMessage = createRpcMessage(subscribeMethodName, params);
|
4029
|
-
const connection = await rpcConfig.transport({
|
4030
|
-
payload: subscribeMessage,
|
4031
|
-
signal: connectionAbortController.signal
|
4032
4266
|
});
|
4033
|
-
|
4034
|
-
|
4035
|
-
|
4036
|
-
|
4037
|
-
|
4038
|
-
|
4039
|
-
|
4040
|
-
|
4041
|
-
|
4042
|
-
|
4043
|
-
|
4267
|
+
},
|
4268
|
+
options
|
4269
|
+
);
|
4270
|
+
return {
|
4271
|
+
async *[Symbol.asyncIterator]() {
|
4272
|
+
if (abortSignal.aborted) {
|
4273
|
+
return;
|
4274
|
+
}
|
4275
|
+
if (firstError !== UNINITIALIZED) {
|
4276
|
+
throw firstError;
|
4277
|
+
}
|
4278
|
+
const iteratorKey = Symbol();
|
4279
|
+
iteratorState.set(iteratorKey, { __hasPolled: false, publishQueue: [] });
|
4280
|
+
try {
|
4281
|
+
while (true) {
|
4282
|
+
const state = iteratorState.get(iteratorKey);
|
4283
|
+
if (!state) {
|
4284
|
+
throw new SolanaError(SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING);
|
4285
|
+
}
|
4286
|
+
if (state.__hasPolled) {
|
4287
|
+
throw new SolanaError(
|
4288
|
+
SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE
|
4289
|
+
);
|
4290
|
+
}
|
4291
|
+
const publishQueue = state.publishQueue;
|
4292
|
+
try {
|
4293
|
+
if (publishQueue.length) {
|
4294
|
+
state.publishQueue = [];
|
4295
|
+
for (const item of publishQueue) {
|
4296
|
+
if (item.__type === 0) {
|
4297
|
+
yield item.data;
|
4298
|
+
} else {
|
4299
|
+
throw item.err;
|
4300
|
+
}
|
4301
|
+
}
|
4302
|
+
} else {
|
4303
|
+
yield await new Promise((resolve, reject) => {
|
4304
|
+
iteratorState.set(iteratorKey, {
|
4305
|
+
__hasPolled: true,
|
4306
|
+
onData: resolve,
|
4307
|
+
onError: reject
|
4308
|
+
});
|
4309
|
+
});
|
4310
|
+
}
|
4311
|
+
} catch (e3) {
|
4312
|
+
if (e3 === (EXPLICIT_ABORT_TOKEN2 || (EXPLICIT_ABORT_TOKEN2 = createExplicitAbortToken2()))) {
|
4313
|
+
return;
|
4314
|
+
} else {
|
4315
|
+
throw e3;
|
4316
|
+
}
|
4044
4317
|
}
|
4045
4318
|
}
|
4319
|
+
} finally {
|
4320
|
+
iteratorState.delete(iteratorKey);
|
4046
4321
|
}
|
4047
|
-
|
4048
|
-
|
4322
|
+
}
|
4323
|
+
};
|
4324
|
+
}
|
4325
|
+
function getDataPublisherFromEventEmitter(eventEmitter) {
|
4326
|
+
return {
|
4327
|
+
on(channelName, subscriber, options) {
|
4328
|
+
function innerListener(ev) {
|
4329
|
+
if (ev instanceof CustomEvent) {
|
4330
|
+
const data = ev.detail;
|
4331
|
+
subscriber(data);
|
4332
|
+
} else {
|
4333
|
+
subscriber();
|
4334
|
+
}
|
4049
4335
|
}
|
4050
|
-
|
4051
|
-
|
4052
|
-
|
4053
|
-
|
4054
|
-
|
4055
|
-
|
4056
|
-
|
4057
|
-
|
4336
|
+
eventEmitter.addEventListener(channelName, innerListener, options);
|
4337
|
+
return () => {
|
4338
|
+
eventEmitter.removeEventListener(channelName, innerListener);
|
4339
|
+
};
|
4340
|
+
}
|
4341
|
+
};
|
4342
|
+
}
|
4343
|
+
function demultiplexDataPublisher(publisher, sourceChannelName, messageTransformer) {
|
4344
|
+
let innerPublisherState;
|
4345
|
+
const eventTarget = new EventTarget();
|
4346
|
+
const demultiplexedDataPublisher = getDataPublisherFromEventEmitter(eventTarget);
|
4347
|
+
return {
|
4348
|
+
...demultiplexedDataPublisher,
|
4349
|
+
on(channelName, subscriber, options) {
|
4350
|
+
if (!innerPublisherState) {
|
4351
|
+
const innerPublisherUnsubscribe = publisher.on(sourceChannelName, (sourceMessage) => {
|
4352
|
+
const transformResult = messageTransformer(sourceMessage);
|
4353
|
+
if (!transformResult) {
|
4354
|
+
return;
|
4058
4355
|
}
|
4356
|
+
const [destinationChannelName, message] = transformResult;
|
4357
|
+
eventTarget.dispatchEvent(
|
4358
|
+
new CustomEvent(destinationChannelName, {
|
4359
|
+
detail: message
|
4360
|
+
})
|
4361
|
+
);
|
4362
|
+
});
|
4363
|
+
innerPublisherState = {
|
4364
|
+
dispose: innerPublisherUnsubscribe,
|
4365
|
+
numSubscribers: 0
|
4366
|
+
};
|
4367
|
+
}
|
4368
|
+
innerPublisherState.numSubscribers++;
|
4369
|
+
const unsubscribe = demultiplexedDataPublisher.on(channelName, subscriber, options);
|
4370
|
+
let isActive = true;
|
4371
|
+
function handleUnsubscribe() {
|
4372
|
+
if (!isActive) {
|
4373
|
+
return;
|
4374
|
+
}
|
4375
|
+
isActive = false;
|
4376
|
+
options == null ? void 0 : options.signal.removeEventListener("abort", handleUnsubscribe);
|
4377
|
+
innerPublisherState.numSubscribers--;
|
4378
|
+
if (innerPublisherState.numSubscribers === 0) {
|
4379
|
+
innerPublisherState.dispose();
|
4380
|
+
innerPublisherState = void 0;
|
4381
|
+
}
|
4382
|
+
unsubscribe();
|
4383
|
+
}
|
4384
|
+
options == null ? void 0 : options.signal.addEventListener("abort", handleUnsubscribe);
|
4385
|
+
return handleUnsubscribe;
|
4386
|
+
}
|
4387
|
+
};
|
4388
|
+
}
|
4389
|
+
|
4390
|
+
// ../promises/dist/index.browser.mjs
|
4391
|
+
function isObject(value) {
|
4392
|
+
return value !== null && (typeof value === "object" || typeof value === "function");
|
4393
|
+
}
|
4394
|
+
function addRaceContender(contender) {
|
4395
|
+
const deferreds = /* @__PURE__ */ new Set();
|
4396
|
+
const record = { deferreds, settled: false };
|
4397
|
+
Promise.resolve(contender).then(
|
4398
|
+
(value) => {
|
4399
|
+
for (const { resolve } of deferreds) {
|
4400
|
+
resolve(value);
|
4401
|
+
}
|
4402
|
+
deferreds.clear();
|
4403
|
+
record.settled = true;
|
4404
|
+
},
|
4405
|
+
(err) => {
|
4406
|
+
for (const { reject } of deferreds) {
|
4407
|
+
reject(err);
|
4408
|
+
}
|
4409
|
+
deferreds.clear();
|
4410
|
+
record.settled = true;
|
4411
|
+
}
|
4412
|
+
);
|
4413
|
+
return record;
|
4414
|
+
}
|
4415
|
+
var wm = /* @__PURE__ */ new WeakMap();
|
4416
|
+
async function safeRace(contenders) {
|
4417
|
+
let deferred;
|
4418
|
+
const result = new Promise((resolve, reject) => {
|
4419
|
+
deferred = { reject, resolve };
|
4420
|
+
for (const contender of contenders) {
|
4421
|
+
if (!isObject(contender)) {
|
4422
|
+
Promise.resolve(contender).then(resolve, reject);
|
4423
|
+
continue;
|
4424
|
+
}
|
4425
|
+
let record = wm.get(contender);
|
4426
|
+
if (record === void 0) {
|
4427
|
+
record = addRaceContender(contender);
|
4428
|
+
record.deferreds.add(deferred);
|
4429
|
+
wm.set(contender, record);
|
4430
|
+
} else if (record.settled) {
|
4431
|
+
Promise.resolve(contender).then(resolve, reject);
|
4432
|
+
} else {
|
4433
|
+
record.deferreds.add(deferred);
|
4434
|
+
}
|
4435
|
+
}
|
4436
|
+
});
|
4437
|
+
return await result.finally(() => {
|
4438
|
+
for (const contender of contenders) {
|
4439
|
+
if (isObject(contender)) {
|
4440
|
+
const record = wm.get(contender);
|
4441
|
+
record.deferreds.delete(deferred);
|
4442
|
+
}
|
4443
|
+
}
|
4444
|
+
});
|
4445
|
+
}
|
4446
|
+
|
4447
|
+
// ../rpc-subscriptions-spec/dist/index.browser.mjs
|
4448
|
+
function createSubscriptionRpc(rpcConfig) {
|
4449
|
+
return new Proxy(rpcConfig.api, {
|
4450
|
+
defineProperty() {
|
4451
|
+
return false;
|
4452
|
+
},
|
4453
|
+
deleteProperty() {
|
4454
|
+
return false;
|
4455
|
+
},
|
4456
|
+
get(target, p, receiver) {
|
4457
|
+
return function(...rawParams) {
|
4458
|
+
const notificationName = p.toString();
|
4459
|
+
const createRpcSubscriptionPlan = Reflect.get(target, notificationName, receiver);
|
4460
|
+
if (!createRpcSubscriptionPlan) {
|
4461
|
+
throw new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN, {
|
4462
|
+
notificationName
|
4463
|
+
});
|
4059
4464
|
}
|
4465
|
+
const subscriptionPlan = createRpcSubscriptionPlan(...rawParams);
|
4466
|
+
return createPendingRpcSubscription(rpcConfig.transport, subscriptionPlan);
|
4060
4467
|
};
|
4061
4468
|
}
|
4469
|
+
});
|
4470
|
+
}
|
4471
|
+
function createPendingRpcSubscription(transport, subscriptionsPlan) {
|
4472
|
+
return {
|
4473
|
+
async subscribe({ abortSignal }) {
|
4474
|
+
const notificationsDataPublisher = await transport({
|
4475
|
+
signal: abortSignal,
|
4476
|
+
...subscriptionsPlan
|
4477
|
+
});
|
4478
|
+
return createAsyncIterableFromDataPublisher({
|
4479
|
+
abortSignal,
|
4480
|
+
dataChannelName: "notification",
|
4481
|
+
dataPublisher: notificationsDataPublisher,
|
4482
|
+
errorChannelName: "error"
|
4483
|
+
});
|
4484
|
+
}
|
4062
4485
|
};
|
4063
4486
|
}
|
4064
4487
|
function createRpcSubscriptionsApi(config) {
|
@@ -4071,32 +4494,206 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4071
4494
|
},
|
4072
4495
|
get(...args) {
|
4073
4496
|
const [_, p] = args;
|
4074
|
-
const
|
4075
|
-
return function(...
|
4076
|
-
const
|
4077
|
-
const
|
4078
|
-
const subscribeMethodName = (config == null ? void 0 : config.subscribeNotificationNameTransformer) ? config == null ? void 0 : config.subscribeNotificationNameTransformer(notificationName) : notificationName;
|
4079
|
-
const unsubscribeMethodName = (config == null ? void 0 : config.unsubscribeNotificationNameTransformer) ? config == null ? void 0 : config.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
|
4497
|
+
const methodName = p.toString();
|
4498
|
+
return function(...params) {
|
4499
|
+
const rawRequest = { methodName, params };
|
4500
|
+
const request = config.requestTransformer ? config.requestTransformer(rawRequest) : rawRequest;
|
4080
4501
|
return {
|
4081
|
-
|
4082
|
-
|
4083
|
-
|
4084
|
-
|
4502
|
+
execute(planConfig) {
|
4503
|
+
return config.planExecutor({ ...planConfig, request });
|
4504
|
+
},
|
4505
|
+
request
|
4085
4506
|
};
|
4086
4507
|
};
|
4087
4508
|
}
|
4088
4509
|
});
|
4089
4510
|
}
|
4511
|
+
function transformChannelInboundMessages(channel, transform) {
|
4512
|
+
return Object.freeze({
|
4513
|
+
...channel,
|
4514
|
+
on(type, subscriber, options) {
|
4515
|
+
if (type !== "message") {
|
4516
|
+
return channel.on(
|
4517
|
+
type,
|
4518
|
+
subscriber,
|
4519
|
+
options
|
4520
|
+
);
|
4521
|
+
}
|
4522
|
+
return channel.on(
|
4523
|
+
"message",
|
4524
|
+
(message) => subscriber(transform(message)),
|
4525
|
+
options
|
4526
|
+
);
|
4527
|
+
}
|
4528
|
+
});
|
4529
|
+
}
|
4530
|
+
function transformChannelOutboundMessages(channel, transform) {
|
4531
|
+
return Object.freeze({
|
4532
|
+
...channel,
|
4533
|
+
send: (message) => channel.send(transform(message))
|
4534
|
+
});
|
4535
|
+
}
|
4536
|
+
var subscriberCountBySubscriptionIdByChannel = /* @__PURE__ */ new WeakMap();
|
4537
|
+
function decrementSubscriberCountAndReturnNewCount(channel, subscriptionId) {
|
4538
|
+
return augmentSubscriberCountAndReturnNewCount(-1, channel, subscriptionId);
|
4539
|
+
}
|
4540
|
+
function incrementSubscriberCount(channel, subscriptionId) {
|
4541
|
+
augmentSubscriberCountAndReturnNewCount(1, channel, subscriptionId);
|
4542
|
+
}
|
4543
|
+
function augmentSubscriberCountAndReturnNewCount(amount, channel, subscriptionId) {
|
4544
|
+
if (subscriptionId === void 0) {
|
4545
|
+
return;
|
4546
|
+
}
|
4547
|
+
let subscriberCountBySubscriptionId = subscriberCountBySubscriptionIdByChannel.get(channel);
|
4548
|
+
if (!subscriberCountBySubscriptionId && amount > 0) {
|
4549
|
+
subscriberCountBySubscriptionIdByChannel.set(
|
4550
|
+
channel,
|
4551
|
+
subscriberCountBySubscriptionId = { [subscriptionId]: 0 }
|
4552
|
+
);
|
4553
|
+
}
|
4554
|
+
if ((subscriberCountBySubscriptionId == null ? void 0 : subscriberCountBySubscriptionId[subscriptionId]) !== void 0) {
|
4555
|
+
return subscriberCountBySubscriptionId[subscriptionId] = amount + subscriberCountBySubscriptionId[subscriptionId];
|
4556
|
+
}
|
4557
|
+
}
|
4558
|
+
var cache = /* @__PURE__ */ new WeakMap();
|
4559
|
+
function getMemoizedDemultiplexedNotificationPublisherFromChannelAndResponseTransformer(channel, subscribeRequest, responseTransformer) {
|
4560
|
+
let publisherByResponseTransformer = cache.get(channel);
|
4561
|
+
if (!publisherByResponseTransformer) {
|
4562
|
+
cache.set(channel, publisherByResponseTransformer = /* @__PURE__ */ new WeakMap());
|
4563
|
+
}
|
4564
|
+
const responseTransformerKey = responseTransformer != null ? responseTransformer : channel;
|
4565
|
+
let publisher = publisherByResponseTransformer.get(responseTransformerKey);
|
4566
|
+
if (!publisher) {
|
4567
|
+
publisherByResponseTransformer.set(
|
4568
|
+
responseTransformerKey,
|
4569
|
+
publisher = demultiplexDataPublisher(channel, "message", (rawMessage) => {
|
4570
|
+
const message = rawMessage;
|
4571
|
+
if (!("method" in message)) {
|
4572
|
+
return;
|
4573
|
+
}
|
4574
|
+
const transformedNotification = responseTransformer ? responseTransformer(message.params.result, subscribeRequest) : message.params.result;
|
4575
|
+
return [`notification:${message.params.subscription}`, transformedNotification];
|
4576
|
+
})
|
4577
|
+
);
|
4578
|
+
}
|
4579
|
+
return publisher;
|
4580
|
+
}
|
4581
|
+
async function executeRpcPubSubSubscriptionPlan({
|
4582
|
+
channel,
|
4583
|
+
responseTransformer,
|
4584
|
+
signal,
|
4585
|
+
subscribeRequest,
|
4586
|
+
unsubscribeMethodName
|
4587
|
+
}) {
|
4588
|
+
let subscriptionId;
|
4589
|
+
channel.on(
|
4590
|
+
"error",
|
4591
|
+
() => {
|
4592
|
+
subscriptionId = void 0;
|
4593
|
+
subscriberCountBySubscriptionIdByChannel.delete(channel);
|
4594
|
+
},
|
4595
|
+
{ signal }
|
4596
|
+
);
|
4597
|
+
const abortPromise = new Promise((_, reject) => {
|
4598
|
+
function handleAbort() {
|
4599
|
+
if (decrementSubscriberCountAndReturnNewCount(channel, subscriptionId) === 0) {
|
4600
|
+
const unsubscribePayload = createRpcMessage({
|
4601
|
+
methodName: unsubscribeMethodName,
|
4602
|
+
params: [subscriptionId]
|
4603
|
+
});
|
4604
|
+
subscriptionId = void 0;
|
4605
|
+
channel.send(unsubscribePayload).catch(() => {
|
4606
|
+
});
|
4607
|
+
}
|
4608
|
+
reject(this.reason);
|
4609
|
+
}
|
4610
|
+
if (signal.aborted) {
|
4611
|
+
handleAbort.call(signal);
|
4612
|
+
} else {
|
4613
|
+
signal.addEventListener("abort", handleAbort);
|
4614
|
+
}
|
4615
|
+
});
|
4616
|
+
const subscribePayload = createRpcMessage(subscribeRequest);
|
4617
|
+
await channel.send(subscribePayload);
|
4618
|
+
const subscriptionIdPromise = new Promise((resolve, reject) => {
|
4619
|
+
const abortController = new AbortController();
|
4620
|
+
signal.addEventListener("abort", abortController.abort.bind(abortController));
|
4621
|
+
const options = { signal: abortController.signal };
|
4622
|
+
channel.on(
|
4623
|
+
"error",
|
4624
|
+
(err) => {
|
4625
|
+
abortController.abort();
|
4626
|
+
reject(err);
|
4627
|
+
},
|
4628
|
+
options
|
4629
|
+
);
|
4630
|
+
channel.on(
|
4631
|
+
"message",
|
4632
|
+
(message) => {
|
4633
|
+
if (message && typeof message === "object" && "id" in message && message.id === subscribePayload.id) {
|
4634
|
+
abortController.abort();
|
4635
|
+
if ("error" in message) {
|
4636
|
+
reject(getSolanaErrorFromJsonRpcError(message.error));
|
4637
|
+
} else {
|
4638
|
+
resolve(message.result);
|
4639
|
+
}
|
4640
|
+
}
|
4641
|
+
},
|
4642
|
+
options
|
4643
|
+
);
|
4644
|
+
});
|
4645
|
+
subscriptionId = await safeRace([abortPromise, subscriptionIdPromise]);
|
4646
|
+
if (subscriptionId == null) {
|
4647
|
+
throw new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID);
|
4648
|
+
}
|
4649
|
+
incrementSubscriberCount(channel, subscriptionId);
|
4650
|
+
const notificationPublisher = getMemoizedDemultiplexedNotificationPublisherFromChannelAndResponseTransformer(
|
4651
|
+
channel,
|
4652
|
+
subscribeRequest,
|
4653
|
+
responseTransformer
|
4654
|
+
);
|
4655
|
+
const notificationKey = `notification:${subscriptionId}`;
|
4656
|
+
return {
|
4657
|
+
on(type, listener, options) {
|
4658
|
+
switch (type) {
|
4659
|
+
case "notification":
|
4660
|
+
return notificationPublisher.on(
|
4661
|
+
notificationKey,
|
4662
|
+
listener,
|
4663
|
+
options
|
4664
|
+
);
|
4665
|
+
case "error":
|
4666
|
+
return channel.on(
|
4667
|
+
"error",
|
4668
|
+
listener,
|
4669
|
+
options
|
4670
|
+
);
|
4671
|
+
default:
|
4672
|
+
throw new SolanaError(SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED, {
|
4673
|
+
channelName: type,
|
4674
|
+
supportedChannelNames: ["notification", "error"]
|
4675
|
+
});
|
4676
|
+
}
|
4677
|
+
}
|
4678
|
+
};
|
4679
|
+
}
|
4090
4680
|
|
4091
4681
|
// ../rpc-subscriptions-api/dist/index.browser.mjs
|
4092
4682
|
function createSolanaRpcSubscriptionsApi_INTERNAL(config) {
|
4683
|
+
const requestTransformer = getDefaultRequestTransformerForSolanaRpc(config);
|
4684
|
+
const responseTransformer = getDefaultResponseTransformerForSolanaRpcSubscriptions({
|
4685
|
+
allowedNumericKeyPaths: getAllowedNumericKeypaths2()
|
4686
|
+
});
|
4093
4687
|
return createRpcSubscriptionsApi({
|
4094
|
-
|
4095
|
-
|
4096
|
-
|
4097
|
-
|
4098
|
-
|
4099
|
-
|
4688
|
+
planExecutor({ request, ...rest }) {
|
4689
|
+
return executeRpcPubSubSubscriptionPlan({
|
4690
|
+
...rest,
|
4691
|
+
responseTransformer,
|
4692
|
+
subscribeRequest: { ...request, methodName: request.methodName.replace(/Notifications$/, "Subscribe") },
|
4693
|
+
unsubscribeMethodName: request.methodName.replace(/Notifications$/, "Unsubscribe")
|
4694
|
+
});
|
4695
|
+
},
|
4696
|
+
requestTransformer
|
4100
4697
|
});
|
4101
4698
|
}
|
4102
4699
|
function createSolanaRpcSubscriptionsApi(config) {
|
@@ -4113,7 +4710,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4113
4710
|
memoizedKeypaths2 = {
|
4114
4711
|
accountNotifications: jsonParsedAccountsConfigs.map((c) => ["value", ...c]),
|
4115
4712
|
blockNotifications: [
|
4116
|
-
["value", "block", "blockTime"],
|
4117
4713
|
[
|
4118
4714
|
"value",
|
4119
4715
|
"block",
|
@@ -4280,184 +4876,133 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4280
4876
|
return memoizedKeypaths2;
|
4281
4877
|
}
|
4282
4878
|
|
4283
|
-
// ../rpc-subscriptions-
|
4879
|
+
// ../rpc-subscriptions-channel-websocket/dist/index.browser.mjs
|
4284
4880
|
var e2 = globalThis.WebSocket;
|
4285
|
-
var
|
4286
|
-
function
|
4287
|
-
return Symbol(
|
4288
|
-
"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user"
|
4289
|
-
);
|
4290
|
-
}
|
4291
|
-
async function createWebSocketConnection({
|
4881
|
+
var NORMAL_CLOSURE_CODE = 1e3;
|
4882
|
+
function createWebSocketChannel({
|
4292
4883
|
sendBufferHighWatermark,
|
4293
4884
|
signal,
|
4294
4885
|
url
|
4295
4886
|
}) {
|
4296
|
-
|
4297
|
-
signal.
|
4298
|
-
|
4299
|
-
|
4300
|
-
|
4301
|
-
|
4302
|
-
|
4303
|
-
|
4304
|
-
|
4305
|
-
|
4306
|
-
|
4307
|
-
|
4887
|
+
if (signal.aborted) {
|
4888
|
+
return Promise.reject(signal.reason);
|
4889
|
+
}
|
4890
|
+
let bufferDrainWatcher;
|
4891
|
+
let hasConnected = false;
|
4892
|
+
const listenerRemovers = /* @__PURE__ */ new Set();
|
4893
|
+
function cleanupListeners() {
|
4894
|
+
listenerRemovers.forEach((r) => {
|
4895
|
+
r();
|
4896
|
+
});
|
4897
|
+
listenerRemovers.clear();
|
4898
|
+
}
|
4899
|
+
function handleAbort() {
|
4900
|
+
cleanupListeners();
|
4901
|
+
if (!hasConnected) {
|
4902
|
+
rejectOpen(signal.reason);
|
4903
|
+
}
|
4904
|
+
if (webSocket.readyState !== e2.CLOSED && webSocket.readyState !== e2.CLOSING) {
|
4905
|
+
webSocket.close(NORMAL_CLOSURE_CODE);
|
4906
|
+
}
|
4907
|
+
}
|
4908
|
+
function handleClose(ev) {
|
4909
|
+
cleanupListeners();
|
4910
|
+
bufferDrainWatcher == null ? void 0 : bufferDrainWatcher.onCancel();
|
4911
|
+
signal.removeEventListener("abort", handleAbort);
|
4912
|
+
webSocket.removeEventListener("close", handleClose);
|
4913
|
+
webSocket.removeEventListener("error", handleError);
|
4914
|
+
webSocket.removeEventListener("message", handleMessage);
|
4915
|
+
webSocket.removeEventListener("open", handleOpen);
|
4916
|
+
if (!signal.aborted && !(ev.wasClean && ev.code === NORMAL_CLOSURE_CODE)) {
|
4917
|
+
eventTarget.dispatchEvent(
|
4918
|
+
new CustomEvent("error", {
|
4919
|
+
detail: new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED, {
|
4920
|
+
cause: ev
|
4921
|
+
})
|
4922
|
+
})
|
4923
|
+
);
|
4308
4924
|
}
|
4309
|
-
|
4310
|
-
|
4311
|
-
|
4312
|
-
|
4313
|
-
}
|
4925
|
+
}
|
4926
|
+
function handleError(ev) {
|
4927
|
+
if (signal.aborted) {
|
4928
|
+
return;
|
4314
4929
|
}
|
4315
|
-
|
4316
|
-
|
4317
|
-
|
4318
|
-
|
4319
|
-
|
4320
|
-
|
4321
|
-
|
4322
|
-
|
4323
|
-
|
4324
|
-
|
4325
|
-
if (!hasConnected) {
|
4326
|
-
reject(
|
4327
|
-
new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_FAILED_TO_CONNECT, {
|
4328
|
-
errorEvent: ev
|
4329
|
-
})
|
4330
|
-
);
|
4331
|
-
}
|
4930
|
+
if (!hasConnected) {
|
4931
|
+
const failedToConnectError = new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT, {
|
4932
|
+
errorEvent: ev
|
4933
|
+
});
|
4934
|
+
rejectOpen(failedToConnectError);
|
4935
|
+
eventTarget.dispatchEvent(
|
4936
|
+
new CustomEvent("error", {
|
4937
|
+
detail: failedToConnectError
|
4938
|
+
})
|
4939
|
+
);
|
4332
4940
|
}
|
4333
|
-
|
4334
|
-
|
4335
|
-
|
4336
|
-
|
4337
|
-
|
4338
|
-
|
4339
|
-
|
4340
|
-
|
4341
|
-
|
4342
|
-
|
4343
|
-
|
4344
|
-
|
4345
|
-
|
4346
|
-
|
4347
|
-
|
4348
|
-
|
4349
|
-
|
4350
|
-
|
4351
|
-
|
4941
|
+
}
|
4942
|
+
function handleMessage(ev) {
|
4943
|
+
if (signal.aborted) {
|
4944
|
+
return;
|
4945
|
+
}
|
4946
|
+
eventTarget.dispatchEvent(new CustomEvent("message", { detail: ev.data }));
|
4947
|
+
}
|
4948
|
+
const eventTarget = new EventTarget();
|
4949
|
+
const dataPublisher = getDataPublisherFromEventEmitter(eventTarget);
|
4950
|
+
function handleOpen() {
|
4951
|
+
hasConnected = true;
|
4952
|
+
resolveOpen({
|
4953
|
+
...dataPublisher,
|
4954
|
+
async send(message) {
|
4955
|
+
if (webSocket.readyState !== e2.OPEN) {
|
4956
|
+
throw new SolanaError(SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED);
|
4957
|
+
}
|
4958
|
+
if (!bufferDrainWatcher && webSocket.bufferedAmount > sendBufferHighWatermark) {
|
4959
|
+
let onCancel;
|
4960
|
+
const promise = new Promise((resolve, reject) => {
|
4961
|
+
const intervalId = setInterval(() => {
|
4962
|
+
if (webSocket.readyState !== e2.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
|
4352
4963
|
clearInterval(intervalId);
|
4353
|
-
|
4354
|
-
|
4355
|
-
SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_CLOSED_BEFORE_MESSAGE_BUFFERED
|
4356
|
-
)
|
4357
|
-
);
|
4358
|
-
};
|
4359
|
-
});
|
4360
|
-
bufferDrainWatcher = {
|
4361
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
4362
|
-
// @ts-ignore
|
4363
|
-
onCancel,
|
4364
|
-
promise
|
4365
|
-
};
|
4366
|
-
}
|
4367
|
-
if (bufferDrainWatcher) {
|
4368
|
-
await bufferDrainWatcher.promise;
|
4369
|
-
}
|
4370
|
-
webSocket.send(message);
|
4371
|
-
},
|
4372
|
-
async *[Symbol.asyncIterator]() {
|
4373
|
-
const iteratorKey = Symbol();
|
4374
|
-
iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });
|
4375
|
-
try {
|
4376
|
-
while (true) {
|
4377
|
-
const state = iteratorState.get(iteratorKey);
|
4378
|
-
if (!state) {
|
4379
|
-
throw new SolanaError(
|
4380
|
-
SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_STATE_MISSING
|
4381
|
-
);
|
4382
|
-
}
|
4383
|
-
if (state.__hasPolled) {
|
4384
|
-
throw new SolanaError(
|
4385
|
-
SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE
|
4386
|
-
);
|
4387
|
-
}
|
4388
|
-
const queuedMessages = state.queuedMessages;
|
4389
|
-
if (queuedMessages.length) {
|
4390
|
-
state.queuedMessages = [];
|
4391
|
-
yield* queuedMessages;
|
4392
|
-
} else {
|
4393
|
-
try {
|
4394
|
-
yield await new Promise((resolve2, reject2) => {
|
4395
|
-
iteratorState.set(iteratorKey, {
|
4396
|
-
__hasPolled: true,
|
4397
|
-
onError: reject2,
|
4398
|
-
onMessage: resolve2
|
4399
|
-
});
|
4400
|
-
});
|
4401
|
-
} catch (e22) {
|
4402
|
-
if (e22 === (EXPLICIT_ABORT_TOKEN2 || (EXPLICIT_ABORT_TOKEN2 = createExplicitAbortToken2()))) {
|
4403
|
-
return;
|
4404
|
-
} else {
|
4405
|
-
throw new SolanaError(
|
4406
|
-
SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_CONNECTION_CLOSED,
|
4407
|
-
{
|
4408
|
-
cause: e22
|
4409
|
-
}
|
4410
|
-
);
|
4411
|
-
}
|
4412
|
-
}
|
4964
|
+
bufferDrainWatcher = void 0;
|
4965
|
+
resolve();
|
4413
4966
|
}
|
4414
|
-
}
|
4415
|
-
|
4416
|
-
|
4417
|
-
|
4967
|
+
}, 16);
|
4968
|
+
onCancel = () => {
|
4969
|
+
bufferDrainWatcher = void 0;
|
4970
|
+
clearInterval(intervalId);
|
4971
|
+
reject(
|
4972
|
+
new SolanaError(
|
4973
|
+
SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED
|
4974
|
+
)
|
4975
|
+
);
|
4976
|
+
};
|
4977
|
+
});
|
4978
|
+
bufferDrainWatcher = {
|
4979
|
+
onCancel,
|
4980
|
+
promise
|
4981
|
+
};
|
4418
4982
|
}
|
4419
|
-
|
4420
|
-
|
4421
|
-
|
4422
|
-
|
4423
|
-
|
4424
|
-
|
4425
|
-
const { onMessage } = state;
|
4426
|
-
iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });
|
4427
|
-
onMessage(message);
|
4428
|
-
} else {
|
4429
|
-
state.queuedMessages.push(message);
|
4983
|
+
if (bufferDrainWatcher) {
|
4984
|
+
if (ArrayBuffer.isView(message) && !(message instanceof DataView)) {
|
4985
|
+
const TypedArrayConstructor = message.constructor;
|
4986
|
+
message = new TypedArrayConstructor(message);
|
4987
|
+
}
|
4988
|
+
await bufferDrainWatcher.promise;
|
4430
4989
|
}
|
4431
|
-
|
4432
|
-
|
4433
|
-
const webSocket = new e2(url);
|
4434
|
-
webSocket.addEventListener("close", handleClose);
|
4435
|
-
webSocket.addEventListener("error", handleError);
|
4436
|
-
webSocket.addEventListener("open", handleOpen);
|
4437
|
-
webSocket.addEventListener("message", handleMessage);
|
4438
|
-
});
|
4439
|
-
}
|
4440
|
-
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
|
4441
|
-
if (/^wss?:/i.test(url) === false) {
|
4442
|
-
const protocolMatch = url.match(/^([^:]+):/);
|
4443
|
-
throw new DOMException(
|
4444
|
-
protocolMatch ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.` : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`
|
4445
|
-
);
|
4446
|
-
}
|
4447
|
-
return async function sendWebSocketMessage({ payload, signal }) {
|
4448
|
-
signal == null ? void 0 : signal.throwIfAborted();
|
4449
|
-
const connection = await createWebSocketConnection({
|
4450
|
-
sendBufferHighWatermark,
|
4451
|
-
signal,
|
4452
|
-
url
|
4990
|
+
webSocket.send(message);
|
4991
|
+
}
|
4453
4992
|
});
|
4454
|
-
|
4455
|
-
|
4456
|
-
|
4457
|
-
|
4458
|
-
|
4459
|
-
|
4460
|
-
|
4993
|
+
}
|
4994
|
+
const webSocket = new e2(url);
|
4995
|
+
signal.addEventListener("abort", handleAbort);
|
4996
|
+
webSocket.addEventListener("close", handleClose);
|
4997
|
+
webSocket.addEventListener("error", handleError);
|
4998
|
+
webSocket.addEventListener("message", handleMessage);
|
4999
|
+
webSocket.addEventListener("open", handleOpen);
|
5000
|
+
let rejectOpen;
|
5001
|
+
let resolveOpen;
|
5002
|
+
return new Promise((resolve, reject) => {
|
5003
|
+
rejectOpen = reject;
|
5004
|
+
resolveOpen = resolve;
|
5005
|
+
});
|
4461
5006
|
}
|
4462
5007
|
|
4463
5008
|
// ../rpc-subscriptions/dist/index.browser.mjs
|
@@ -4493,317 +5038,302 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4493
5038
|
}
|
4494
5039
|
var DEFAULT_RPC_SUBSCRIPTIONS_CONFIG = {
|
4495
5040
|
defaultCommitment: "confirmed",
|
4496
|
-
onIntegerOverflow(
|
4497
|
-
throw createSolanaJsonRpcIntegerOverflowError2(methodName, keyPath, value);
|
5041
|
+
onIntegerOverflow(request, keyPath, value) {
|
5042
|
+
throw createSolanaJsonRpcIntegerOverflowError2(request.methodName, keyPath, value);
|
4498
5043
|
}
|
4499
5044
|
};
|
4500
|
-
|
4501
|
-
|
4502
|
-
|
4503
|
-
|
4504
|
-
|
4505
|
-
|
4506
|
-
|
4507
|
-
|
4508
|
-
})();
|
4509
|
-
}
|
4510
|
-
function getCachedAbortableIterableFactory({
|
4511
|
-
getAbortSignalFromInputArgs,
|
4512
|
-
getCacheKeyFromInputArgs,
|
4513
|
-
onCacheHit,
|
4514
|
-
onCreateIterable
|
5045
|
+
var PING_PAYLOAD = {
|
5046
|
+
jsonrpc: "2.0",
|
5047
|
+
method: "ping"
|
5048
|
+
};
|
5049
|
+
function getRpcSubscriptionsChannelWithAutoping({
|
5050
|
+
abortSignal: callerAbortSignal,
|
5051
|
+
channel,
|
5052
|
+
intervalMs
|
4515
5053
|
}) {
|
4516
|
-
|
4517
|
-
function
|
4518
|
-
|
4519
|
-
|
4520
|
-
|
4521
|
-
|
4522
|
-
|
4523
|
-
}
|
4524
|
-
return currentCacheEntry;
|
5054
|
+
let intervalId;
|
5055
|
+
function sendPing() {
|
5056
|
+
channel.send(PING_PAYLOAD).catch((e3) => {
|
5057
|
+
if (isSolanaError(e3, SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED)) {
|
5058
|
+
pingerAbortController.abort();
|
5059
|
+
}
|
5060
|
+
});
|
4525
5061
|
}
|
4526
|
-
|
4527
|
-
|
4528
|
-
|
4529
|
-
|
4530
|
-
|
4531
|
-
|
4532
|
-
|
4533
|
-
|
4534
|
-
|
4535
|
-
|
4536
|
-
|
4537
|
-
|
4538
|
-
|
4539
|
-
|
4540
|
-
|
4541
|
-
|
4542
|
-
|
4543
|
-
|
4544
|
-
|
4545
|
-
|
4546
|
-
|
5062
|
+
function restartPingTimer() {
|
5063
|
+
clearInterval(intervalId);
|
5064
|
+
intervalId = setInterval(sendPing, intervalMs);
|
5065
|
+
}
|
5066
|
+
const pingerAbortController = new AbortController();
|
5067
|
+
pingerAbortController.signal.addEventListener("abort", () => {
|
5068
|
+
clearInterval(intervalId);
|
5069
|
+
});
|
5070
|
+
callerAbortSignal.addEventListener("abort", () => {
|
5071
|
+
pingerAbortController.abort();
|
5072
|
+
});
|
5073
|
+
channel.on(
|
5074
|
+
"error",
|
5075
|
+
() => {
|
5076
|
+
pingerAbortController.abort();
|
5077
|
+
},
|
5078
|
+
{ signal: pingerAbortController.signal }
|
5079
|
+
);
|
5080
|
+
channel.on("message", restartPingTimer, { signal: pingerAbortController.signal });
|
5081
|
+
if (globalThis.navigator.onLine) {
|
5082
|
+
restartPingTimer();
|
5083
|
+
}
|
5084
|
+
{
|
5085
|
+
globalThis.window.addEventListener(
|
5086
|
+
"offline",
|
5087
|
+
function handleOffline() {
|
5088
|
+
clearInterval(intervalId);
|
5089
|
+
},
|
5090
|
+
{ signal: pingerAbortController.signal }
|
5091
|
+
);
|
5092
|
+
globalThis.window.addEventListener(
|
5093
|
+
"online",
|
5094
|
+
function handleOnline() {
|
5095
|
+
sendPing();
|
5096
|
+
restartPingTimer();
|
5097
|
+
},
|
5098
|
+
{ signal: pingerAbortController.signal }
|
5099
|
+
);
|
5100
|
+
}
|
5101
|
+
return {
|
5102
|
+
...channel,
|
5103
|
+
send(...args) {
|
5104
|
+
if (!pingerAbortController.signal.aborted) {
|
5105
|
+
restartPingTimer();
|
4547
5106
|
}
|
4548
|
-
|
4549
|
-
}
|
4550
|
-
|
4551
|
-
|
4552
|
-
|
4553
|
-
|
4554
|
-
|
4555
|
-
|
4556
|
-
|
4557
|
-
|
4558
|
-
|
4559
|
-
|
4560
|
-
|
5107
|
+
return channel.send(...args);
|
5108
|
+
}
|
5109
|
+
};
|
5110
|
+
}
|
5111
|
+
function createChannelPool() {
|
5112
|
+
return {
|
5113
|
+
entries: [],
|
5114
|
+
freeChannelIndex: -1
|
5115
|
+
};
|
5116
|
+
}
|
5117
|
+
function getChannelPoolingChannelCreator(createChannel, { maxSubscriptionsPerChannel, minChannels }) {
|
5118
|
+
const pool = createChannelPool();
|
5119
|
+
function recomputeFreeChannelIndex() {
|
5120
|
+
var _a;
|
5121
|
+
if (pool.entries.length < minChannels) {
|
5122
|
+
pool.freeChannelIndex = -1;
|
5123
|
+
return;
|
5124
|
+
}
|
5125
|
+
let mostFreeChannel;
|
5126
|
+
for (let ii = 0; ii < pool.entries.length; ii++) {
|
5127
|
+
const nextPoolIndex = (pool.freeChannelIndex + ii + 2) % pool.entries.length;
|
5128
|
+
const nextPoolEntry = (
|
5129
|
+
// Start from the item two positions after the current item. This way, the
|
5130
|
+
// search will finish on the item after the current one. This ensures that, if
|
5131
|
+
// any channels tie for having the most capacity, the one that will be chosen is
|
5132
|
+
// the one immediately to the current one's right (wrapping around).
|
5133
|
+
pool.entries[nextPoolIndex]
|
5134
|
+
);
|
5135
|
+
if (nextPoolEntry.subscriptionCount < maxSubscriptionsPerChannel && (!mostFreeChannel || mostFreeChannel.subscriptionCount >= nextPoolEntry.subscriptionCount)) {
|
5136
|
+
mostFreeChannel = {
|
5137
|
+
poolIndex: nextPoolIndex,
|
5138
|
+
subscriptionCount: nextPoolEntry.subscriptionCount
|
4561
5139
|
};
|
4562
|
-
cache.set(cacheKey, newCacheEntry);
|
4563
|
-
const newIterable = await newIterablePromise;
|
4564
|
-
registerIterableCleanup2(newIterable, cleanup);
|
4565
|
-
newCacheEntry.iterable = newIterable;
|
4566
|
-
return newIterable;
|
4567
|
-
} else {
|
4568
|
-
cacheEntry.referenceCount++;
|
4569
|
-
const iterableOrIterablePromise = cacheEntry.iterable;
|
4570
|
-
const cachedIterable = "then" in iterableOrIterablePromise ? await iterableOrIterablePromise : iterableOrIterablePromise;
|
4571
|
-
await onCacheHit(cachedIterable, ...args);
|
4572
|
-
return cachedIterable;
|
4573
5140
|
}
|
4574
|
-
} catch (e3) {
|
4575
|
-
cleanup();
|
4576
|
-
throw e3;
|
4577
5141
|
}
|
5142
|
+
pool.freeChannelIndex = (_a = mostFreeChannel == null ? void 0 : mostFreeChannel.poolIndex) != null ? _a : -1;
|
5143
|
+
}
|
5144
|
+
return function getExistingChannelWithMostCapacityOrCreateChannel({ abortSignal }) {
|
5145
|
+
let poolEntry;
|
5146
|
+
function destroyPoolEntry() {
|
5147
|
+
const index = pool.entries.findIndex((entry) => entry === poolEntry);
|
5148
|
+
pool.entries.splice(index, 1);
|
5149
|
+
poolEntry.dispose();
|
5150
|
+
recomputeFreeChannelIndex();
|
5151
|
+
}
|
5152
|
+
if (pool.freeChannelIndex === -1) {
|
5153
|
+
const abortController = new AbortController();
|
5154
|
+
const newChannelPromise = createChannel({ abortSignal: abortController.signal });
|
5155
|
+
newChannelPromise.then((newChannel) => {
|
5156
|
+
newChannel.on("error", destroyPoolEntry, { signal: abortController.signal });
|
5157
|
+
}).catch(destroyPoolEntry);
|
5158
|
+
poolEntry = {
|
5159
|
+
channel: newChannelPromise,
|
5160
|
+
dispose() {
|
5161
|
+
abortController.abort();
|
5162
|
+
},
|
5163
|
+
subscriptionCount: 0
|
5164
|
+
};
|
5165
|
+
pool.entries.push(poolEntry);
|
5166
|
+
} else {
|
5167
|
+
poolEntry = pool.entries[pool.freeChannelIndex];
|
5168
|
+
}
|
5169
|
+
poolEntry.subscriptionCount++;
|
5170
|
+
abortSignal.addEventListener("abort", function destroyConsumer() {
|
5171
|
+
poolEntry.subscriptionCount--;
|
5172
|
+
if (poolEntry.subscriptionCount === 0) {
|
5173
|
+
destroyPoolEntry();
|
5174
|
+
} else if (pool.freeChannelIndex !== -1) {
|
5175
|
+
pool.freeChannelIndex--;
|
5176
|
+
recomputeFreeChannelIndex();
|
5177
|
+
}
|
5178
|
+
});
|
5179
|
+
recomputeFreeChannelIndex();
|
5180
|
+
return poolEntry.channel;
|
4578
5181
|
};
|
4579
5182
|
}
|
4580
|
-
|
4581
|
-
|
4582
|
-
|
4583
|
-
|
5183
|
+
function getRpcSubscriptionsChannelWithJSONSerialization(channel) {
|
5184
|
+
return pipe(
|
5185
|
+
channel,
|
5186
|
+
(c) => transformChannelInboundMessages(c, JSON.parse),
|
5187
|
+
(c) => transformChannelOutboundMessages(c, JSON.stringify)
|
4584
5188
|
);
|
4585
5189
|
}
|
4586
|
-
function
|
4587
|
-
|
4588
|
-
|
4589
|
-
|
4590
|
-
|
4591
|
-
|
4592
|
-
cleanupFn();
|
4593
|
-
}
|
4594
|
-
})();
|
5190
|
+
function getRpcSubscriptionsChannelWithBigIntJSONSerialization(channel) {
|
5191
|
+
return pipe(
|
5192
|
+
channel,
|
5193
|
+
(c) => transformChannelInboundMessages(c, parseJsonWithBigInts),
|
5194
|
+
(c) => transformChannelOutboundMessages(c, stringifyJsonWithBigints)
|
5195
|
+
);
|
4595
5196
|
}
|
4596
|
-
function
|
4597
|
-
|
4598
|
-
|
4599
|
-
|
4600
|
-
const cache = /* @__PURE__ */ new Map();
|
4601
|
-
return new Proxy(rpcSubscriptions, {
|
4602
|
-
defineProperty() {
|
4603
|
-
return false;
|
4604
|
-
},
|
4605
|
-
deleteProperty() {
|
4606
|
-
return false;
|
4607
|
-
},
|
4608
|
-
get(target, p, receiver) {
|
4609
|
-
const subscriptionMethod = Reflect.get(target, p, receiver);
|
4610
|
-
if (typeof subscriptionMethod !== "function") {
|
4611
|
-
return subscriptionMethod;
|
4612
|
-
}
|
4613
|
-
return function(...rawParams) {
|
4614
|
-
const deduplicationKey = getDeduplicationKey(p, rawParams);
|
4615
|
-
if (deduplicationKey === void 0) {
|
4616
|
-
return subscriptionMethod(...rawParams);
|
4617
|
-
}
|
4618
|
-
if (cache.has(deduplicationKey)) {
|
4619
|
-
return cache.get(deduplicationKey);
|
4620
|
-
}
|
4621
|
-
const iterableFactory = getCachedAbortableIterableFactory({
|
4622
|
-
getAbortSignalFromInputArgs: ({ abortSignal }) => abortSignal,
|
4623
|
-
getCacheKeyFromInputArgs: () => deduplicationKey,
|
4624
|
-
async onCacheHit(_iterable, _config) {
|
4625
|
-
},
|
4626
|
-
async onCreateIterable(abortSignal, config) {
|
4627
|
-
const pendingSubscription2 = subscriptionMethod(
|
4628
|
-
...rawParams
|
4629
|
-
);
|
4630
|
-
const iterable = await pendingSubscription2.subscribe({
|
4631
|
-
...config,
|
4632
|
-
abortSignal
|
4633
|
-
});
|
4634
|
-
registerIterableCleanup22(iterable, () => {
|
4635
|
-
cache.delete(deduplicationKey);
|
4636
|
-
});
|
4637
|
-
return iterable;
|
4638
|
-
}
|
4639
|
-
});
|
4640
|
-
const pendingSubscription = {
|
4641
|
-
async subscribe(...args) {
|
4642
|
-
const iterable = await iterableFactory(...args);
|
4643
|
-
const { abortSignal } = args[0];
|
4644
|
-
let abortPromise;
|
4645
|
-
return {
|
4646
|
-
...iterable,
|
4647
|
-
async *[Symbol.asyncIterator]() {
|
4648
|
-
abortPromise || (abortPromise = abortSignal.aborted ? Promise.reject(EXPLICIT_ABORT_TOKEN3 || (EXPLICIT_ABORT_TOKEN3 = createExplicitAbortToken3())) : new Promise((_, reject) => {
|
4649
|
-
abortSignal.addEventListener("abort", () => {
|
4650
|
-
reject(EXPLICIT_ABORT_TOKEN3 || (EXPLICIT_ABORT_TOKEN3 = createExplicitAbortToken3()));
|
4651
|
-
});
|
4652
|
-
}));
|
4653
|
-
try {
|
4654
|
-
const iterator = iterable[Symbol.asyncIterator]();
|
4655
|
-
while (true) {
|
4656
|
-
const iteratorResult = await Promise.race([iterator.next(), abortPromise]);
|
4657
|
-
if (iteratorResult.done) {
|
4658
|
-
return;
|
4659
|
-
} else {
|
4660
|
-
yield iteratorResult.value;
|
4661
|
-
}
|
4662
|
-
}
|
4663
|
-
} catch (e3) {
|
4664
|
-
if (e3 === (EXPLICIT_ABORT_TOKEN3 || (EXPLICIT_ABORT_TOKEN3 = createExplicitAbortToken3()))) {
|
4665
|
-
return;
|
4666
|
-
}
|
4667
|
-
cache.delete(deduplicationKey);
|
4668
|
-
throw e3;
|
4669
|
-
}
|
4670
|
-
}
|
4671
|
-
};
|
4672
|
-
}
|
4673
|
-
};
|
4674
|
-
cache.set(deduplicationKey, pendingSubscription);
|
4675
|
-
return pendingSubscription;
|
4676
|
-
};
|
4677
|
-
}
|
5197
|
+
function createDefaultSolanaRpcSubscriptionsChannelCreator(config) {
|
5198
|
+
return createDefaultRpcSubscriptionsChannelCreatorImpl({
|
5199
|
+
...config,
|
5200
|
+
jsonSerializer: getRpcSubscriptionsChannelWithBigIntJSONSerialization
|
4678
5201
|
});
|
4679
5202
|
}
|
4680
|
-
|
4681
|
-
|
4682
|
-
|
4683
|
-
|
4684
|
-
|
4685
|
-
|
4686
|
-
|
4687
|
-
|
4688
|
-
|
4689
|
-
|
4690
|
-
|
4691
|
-
|
4692
|
-
|
4693
|
-
|
4694
|
-
|
4695
|
-
|
4696
|
-
|
4697
|
-
|
4698
|
-
|
4699
|
-
|
4700
|
-
|
4701
|
-
|
4702
|
-
|
4703
|
-
|
4704
|
-
|
4705
|
-
|
5203
|
+
function createDefaultRpcSubscriptionsChannelCreator(config) {
|
5204
|
+
return createDefaultRpcSubscriptionsChannelCreatorImpl({
|
5205
|
+
...config,
|
5206
|
+
jsonSerializer: getRpcSubscriptionsChannelWithJSONSerialization
|
5207
|
+
});
|
5208
|
+
}
|
5209
|
+
function createDefaultRpcSubscriptionsChannelCreatorImpl(config) {
|
5210
|
+
var _a, _b;
|
5211
|
+
if (/^wss?:/i.test(config.url) === false) {
|
5212
|
+
const protocolMatch = config.url.match(/^([^:]+):/);
|
5213
|
+
throw new DOMException(
|
5214
|
+
protocolMatch ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.` : `Failed to construct 'WebSocket': The URL '${config.url}' is invalid.`
|
5215
|
+
);
|
5216
|
+
}
|
5217
|
+
const { intervalMs, ...rest } = config;
|
5218
|
+
const createDefaultRpcSubscriptionsChannel = ({ abortSignal }) => {
|
5219
|
+
var _a2;
|
5220
|
+
return createWebSocketChannel({
|
5221
|
+
...rest,
|
5222
|
+
sendBufferHighWatermark: (_a2 = config.sendBufferHighWatermark) != null ? _a2 : (
|
5223
|
+
// Let 128KB of data into the WebSocket buffer before buffering it in the app.
|
5224
|
+
131072
|
5225
|
+
),
|
5226
|
+
signal: abortSignal
|
5227
|
+
}).then(config.jsonSerializer).then(
|
5228
|
+
(channel) => getRpcSubscriptionsChannelWithAutoping({
|
5229
|
+
abortSignal,
|
5230
|
+
channel,
|
5231
|
+
intervalMs: intervalMs != null ? intervalMs : 5e3
|
5232
|
+
})
|
5233
|
+
);
|
5234
|
+
};
|
5235
|
+
return getChannelPoolingChannelCreator(createDefaultRpcSubscriptionsChannel, {
|
5236
|
+
maxSubscriptionsPerChannel: (_a = config.maxSubscriptionsPerChannel) != null ? _a : (
|
5237
|
+
/**
|
5238
|
+
* A note about this default. The idea here is that, because some RPC providers impose
|
5239
|
+
* an upper limit on the number of subscriptions you can make per channel, we must
|
5240
|
+
* choose a number low enough to avoid hitting that limit. Without knowing what provider
|
5241
|
+
* a given person is using, or what their limit is, we have to choose the lowest of all
|
5242
|
+
* known limits. As of this writing (October 2024) that is the public mainnet RPC node
|
5243
|
+
* (api.mainnet-beta.solana.com) at 100 subscriptions.
|
5244
|
+
*/
|
5245
|
+
100
|
5246
|
+
),
|
5247
|
+
minChannels: (_b = config.minChannels) != null ? _b : 1
|
5248
|
+
});
|
5249
|
+
}
|
5250
|
+
function getRpcSubscriptionsTransportWithSubscriptionCoalescing(transport) {
|
5251
|
+
const cache2 = /* @__PURE__ */ new Map();
|
5252
|
+
return function rpcSubscriptionsTransportWithSubscriptionCoalescing(config) {
|
5253
|
+
const { request, signal } = config;
|
5254
|
+
const subscriptionConfigurationHash = src_default([request.methodName, request.params]);
|
5255
|
+
let cachedDataPublisherPromise = cache2.get(subscriptionConfigurationHash);
|
5256
|
+
if (!cachedDataPublisherPromise) {
|
5257
|
+
const abortController = new AbortController();
|
5258
|
+
const dataPublisherPromise = transport({
|
5259
|
+
...config,
|
5260
|
+
signal: abortController.signal
|
4706
5261
|
});
|
4707
|
-
(
|
4708
|
-
|
4709
|
-
|
4710
|
-
|
4711
|
-
|
4712
|
-
|
4713
|
-
|
4714
|
-
|
4715
|
-
|
4716
|
-
|
4717
|
-
|
4718
|
-
|
4719
|
-
|
4720
|
-
|
4721
|
-
|
5262
|
+
dataPublisherPromise.then((dataPublisher) => {
|
5263
|
+
dataPublisher.on(
|
5264
|
+
"error",
|
5265
|
+
() => {
|
5266
|
+
cache2.delete(subscriptionConfigurationHash);
|
5267
|
+
abortController.abort();
|
5268
|
+
},
|
5269
|
+
{ signal: abortController.signal }
|
5270
|
+
);
|
5271
|
+
}).catch(() => {
|
5272
|
+
});
|
5273
|
+
cache2.set(
|
5274
|
+
subscriptionConfigurationHash,
|
5275
|
+
cachedDataPublisherPromise = {
|
5276
|
+
abortController,
|
5277
|
+
dataPublisherPromise,
|
5278
|
+
numSubscribers: 0
|
4722
5279
|
}
|
4723
|
-
|
4724
|
-
if (globalThis.navigator.onLine) {
|
4725
|
-
restartPingTimer();
|
4726
|
-
}
|
4727
|
-
let handleOffline;
|
4728
|
-
let handleOnline;
|
4729
|
-
{
|
4730
|
-
handleOffline = () => {
|
4731
|
-
clearInterval(intervalId);
|
4732
|
-
};
|
4733
|
-
handleOnline = () => {
|
4734
|
-
sendPing();
|
4735
|
-
restartPingTimer();
|
4736
|
-
};
|
4737
|
-
globalThis.window.addEventListener("offline", handleOffline);
|
4738
|
-
globalThis.window.addEventListener("online", handleOnline);
|
4739
|
-
}
|
5280
|
+
);
|
4740
5281
|
}
|
4741
|
-
|
5282
|
+
cachedDataPublisherPromise.numSubscribers++;
|
5283
|
+
signal.addEventListener(
|
5284
|
+
"abort",
|
5285
|
+
() => {
|
5286
|
+
cachedDataPublisherPromise.numSubscribers--;
|
5287
|
+
if (cachedDataPublisherPromise.numSubscribers === 0) {
|
5288
|
+
queueMicrotask(() => {
|
5289
|
+
if (cachedDataPublisherPromise.numSubscribers === 0) {
|
5290
|
+
cache2.delete(subscriptionConfigurationHash);
|
5291
|
+
cachedDataPublisherPromise.abortController.abort();
|
5292
|
+
}
|
5293
|
+
});
|
5294
|
+
}
|
5295
|
+
},
|
5296
|
+
{ signal: cachedDataPublisherPromise.abortController.signal }
|
5297
|
+
);
|
5298
|
+
return cachedDataPublisherPromise.dataPublisherPromise;
|
4742
5299
|
};
|
4743
5300
|
}
|
4744
|
-
|
4745
|
-
|
4746
|
-
return Symbol("Cache key to use when there is no connection sharding strategy" );
|
4747
|
-
}
|
4748
|
-
function getWebSocketTransportWithConnectionSharding({
|
4749
|
-
getShard,
|
4750
|
-
transport
|
5301
|
+
function createDefaultRpcSubscriptionsTransport({
|
5302
|
+
createChannel
|
4751
5303
|
}) {
|
4752
|
-
return getCachedAbortableIterableFactory({
|
4753
|
-
getAbortSignalFromInputArgs: ({ signal }) => signal,
|
4754
|
-
getCacheKeyFromInputArgs: ({ payload }) => getShard ? getShard(payload) : NULL_SHARD_CACHE_KEY || (NULL_SHARD_CACHE_KEY = createNullShardCacheKey()),
|
4755
|
-
onCacheHit: (connection, { payload }) => connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload),
|
4756
|
-
onCreateIterable: (abortSignal, config) => transport({
|
4757
|
-
...config,
|
4758
|
-
signal: abortSignal
|
4759
|
-
})
|
4760
|
-
});
|
4761
|
-
}
|
4762
|
-
function createDefaultRpcSubscriptionsTransport(config) {
|
4763
|
-
var _a;
|
4764
|
-
const { getShard, intervalMs, ...rest } = config;
|
4765
5304
|
return pipe(
|
4766
|
-
|
4767
|
-
|
4768
|
-
|
4769
|
-
|
4770
|
-
131072
|
4771
|
-
)
|
4772
|
-
}),
|
4773
|
-
(transport) => getWebSocketTransportWithAutoping({
|
4774
|
-
intervalMs: intervalMs != null ? intervalMs : 5e3,
|
4775
|
-
transport
|
4776
|
-
}),
|
4777
|
-
(transport) => getWebSocketTransportWithConnectionSharding({
|
4778
|
-
getShard,
|
4779
|
-
transport
|
4780
|
-
})
|
5305
|
+
createRpcSubscriptionsTransportFromChannelCreator(
|
5306
|
+
createChannel
|
5307
|
+
),
|
5308
|
+
(transport) => getRpcSubscriptionsTransportWithSubscriptionCoalescing(transport)
|
4781
5309
|
);
|
4782
5310
|
}
|
4783
|
-
function
|
4784
|
-
|
5311
|
+
function createRpcSubscriptionsTransportFromChannelCreator(createChannel) {
|
5312
|
+
return async ({ execute, signal }) => {
|
5313
|
+
const channel = await createChannel({ abortSignal: signal });
|
5314
|
+
return await execute({ channel, signal });
|
5315
|
+
};
|
5316
|
+
}
|
5317
|
+
function createSolanaRpcSubscriptionsImpl(clusterUrl, config) {
|
5318
|
+
const transport = createDefaultRpcSubscriptionsTransport({
|
5319
|
+
createChannel: createDefaultSolanaRpcSubscriptionsChannelCreator({ ...config, url: clusterUrl })
|
5320
|
+
});
|
4785
5321
|
return createSolanaRpcSubscriptionsFromTransport(transport);
|
4786
5322
|
}
|
5323
|
+
function createSolanaRpcSubscriptions(clusterUrl, config) {
|
5324
|
+
return createSolanaRpcSubscriptionsImpl(clusterUrl, config);
|
5325
|
+
}
|
4787
5326
|
function createSolanaRpcSubscriptions_UNSTABLE(clusterUrl, config) {
|
4788
|
-
return
|
5327
|
+
return createSolanaRpcSubscriptionsImpl(
|
4789
5328
|
clusterUrl,
|
4790
5329
|
config
|
4791
5330
|
);
|
4792
5331
|
}
|
4793
5332
|
function createSolanaRpcSubscriptionsFromTransport(transport) {
|
4794
|
-
return
|
4795
|
-
|
4796
|
-
|
4797
|
-
|
4798
|
-
}),
|
4799
|
-
(rpcSubscriptions) => getRpcSubscriptionsWithSubscriptionCoalescing({
|
4800
|
-
getDeduplicationKey: (...args) => src_default(args),
|
4801
|
-
rpcSubscriptions
|
4802
|
-
})
|
4803
|
-
);
|
4804
|
-
}
|
4805
|
-
function createSolanaRpcSubscriptionsFromTransport_UNSTABLE(transport) {
|
4806
|
-
return createSolanaRpcSubscriptionsFromTransport(transport);
|
5333
|
+
return createSubscriptionRpc({
|
5334
|
+
api: createSolanaRpcSubscriptionsApi(DEFAULT_RPC_SUBSCRIPTIONS_CONFIG),
|
5335
|
+
transport
|
5336
|
+
});
|
4807
5337
|
}
|
4808
5338
|
|
4809
5339
|
// ../rpc-types/dist/index.browser.mjs
|
@@ -4955,7 +5485,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4955
5485
|
try {
|
4956
5486
|
BigInt(putativeBigInt);
|
4957
5487
|
return true;
|
4958
|
-
} catch
|
5488
|
+
} catch {
|
4959
5489
|
return false;
|
4960
5490
|
}
|
4961
5491
|
}
|
@@ -4986,14 +5516,13 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
4986
5516
|
assertIsStringifiedNumber(putativeNumber);
|
4987
5517
|
return putativeNumber;
|
4988
5518
|
}
|
5519
|
+
var maxI64Value = 9223372036854775807n;
|
5520
|
+
var minI64Value = -9223372036854775808n;
|
4989
5521
|
function isUnixTimestamp(putativeTimestamp) {
|
4990
|
-
|
4991
|
-
return false;
|
4992
|
-
}
|
4993
|
-
return true;
|
5522
|
+
return putativeTimestamp >= minI64Value && putativeTimestamp <= maxI64Value;
|
4994
5523
|
}
|
4995
5524
|
function assertIsUnixTimestamp(putativeTimestamp) {
|
4996
|
-
if (putativeTimestamp
|
5525
|
+
if (putativeTimestamp < minI64Value || putativeTimestamp > maxI64Value) {
|
4997
5526
|
throw new SolanaError(SOLANA_ERROR__TIMESTAMP_OUT_OF_RANGE, {
|
4998
5527
|
value: putativeTimestamp
|
4999
5528
|
});
|
@@ -5578,7 +6107,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
5578
6107
|
return orderedStaticAccounts.map(({ address: address2 }) => address2);
|
5579
6108
|
}
|
5580
6109
|
function compileTransactionMessage(transaction) {
|
5581
|
-
const addressMap = getAddressMapFromInstructions(transaction.feePayer, transaction.instructions);
|
6110
|
+
const addressMap = getAddressMapFromInstructions(transaction.feePayer.address, transaction.instructions);
|
5582
6111
|
const orderedAccounts = getOrderedAccountsFromAddressMap(addressMap);
|
5583
6112
|
return {
|
5584
6113
|
...transaction.version !== "legacy" ? { addressTableLookups: getCompiledAddressTableLookups(orderedAccounts) } : null,
|
@@ -5717,17 +6246,21 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
5717
6246
|
})
|
5718
6247
|
});
|
5719
6248
|
}
|
5720
|
-
function setTransactionMessageFeePayer(feePayer,
|
5721
|
-
|
5722
|
-
|
6249
|
+
function setTransactionMessageFeePayer(feePayer, transactionMessage) {
|
6250
|
+
var _a;
|
6251
|
+
if ("feePayer" in transactionMessage && feePayer === ((_a = transactionMessage.feePayer) == null ? void 0 : _a.address) && isAddressOnlyFeePayer(transactionMessage.feePayer)) {
|
6252
|
+
return transactionMessage;
|
5723
6253
|
}
|
5724
6254
|
const out = {
|
5725
|
-
...
|
5726
|
-
feePayer
|
6255
|
+
...transactionMessage,
|
6256
|
+
feePayer: Object.freeze({ address: feePayer })
|
5727
6257
|
};
|
5728
6258
|
Object.freeze(out);
|
5729
6259
|
return out;
|
5730
6260
|
}
|
6261
|
+
function isAddressOnlyFeePayer(feePayer) {
|
6262
|
+
return !!feePayer && "address" in feePayer && typeof feePayer.address === "string" && Object.keys(feePayer).length === 1;
|
6263
|
+
}
|
5731
6264
|
function appendTransactionMessageInstruction(instruction, transaction) {
|
5732
6265
|
return appendTransactionMessageInstructions([instruction], transaction);
|
5733
6266
|
}
|
@@ -5961,9 +6494,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
5961
6494
|
}
|
5962
6495
|
function compileTransaction(transactionMessage) {
|
5963
6496
|
const compiledMessage = compileTransactionMessage(transactionMessage);
|
5964
|
-
const messageBytes = getCompiledTransactionMessageEncoder().encode(
|
5965
|
-
compiledMessage
|
5966
|
-
);
|
6497
|
+
const messageBytes = getCompiledTransactionMessageEncoder().encode(compiledMessage);
|
5967
6498
|
const transactionSigners = compiledMessage.staticAccounts.slice(0, compiledMessage.header.numSignerAccounts);
|
5968
6499
|
const signatures = {};
|
5969
6500
|
for (const signerAddress of transactionSigners) {
|
@@ -6080,6 +6611,46 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6080
6611
|
});
|
6081
6612
|
return Object.values(deduplicated);
|
6082
6613
|
}
|
6614
|
+
function isTransactionModifyingSigner(value) {
|
6615
|
+
return "modifyAndSignTransactions" in value && typeof value.modifyAndSignTransactions === "function";
|
6616
|
+
}
|
6617
|
+
function assertIsTransactionModifyingSigner(value) {
|
6618
|
+
if (!isTransactionModifyingSigner(value)) {
|
6619
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER, {
|
6620
|
+
address: value.address
|
6621
|
+
});
|
6622
|
+
}
|
6623
|
+
}
|
6624
|
+
function isTransactionPartialSigner(value) {
|
6625
|
+
return "signTransactions" in value && typeof value.signTransactions === "function";
|
6626
|
+
}
|
6627
|
+
function assertIsTransactionPartialSigner(value) {
|
6628
|
+
if (!isTransactionPartialSigner(value)) {
|
6629
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER, {
|
6630
|
+
address: value.address
|
6631
|
+
});
|
6632
|
+
}
|
6633
|
+
}
|
6634
|
+
function isTransactionSendingSigner(value) {
|
6635
|
+
return "signAndSendTransactions" in value && typeof value.signAndSendTransactions === "function";
|
6636
|
+
}
|
6637
|
+
function assertIsTransactionSendingSigner(value) {
|
6638
|
+
if (!isTransactionSendingSigner(value)) {
|
6639
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER, {
|
6640
|
+
address: value.address
|
6641
|
+
});
|
6642
|
+
}
|
6643
|
+
}
|
6644
|
+
function isTransactionSigner(value) {
|
6645
|
+
return isTransactionPartialSigner(value) || isTransactionModifyingSigner(value) || isTransactionSendingSigner(value);
|
6646
|
+
}
|
6647
|
+
function assertIsTransactionSigner(value) {
|
6648
|
+
if (!isTransactionSigner(value)) {
|
6649
|
+
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER, {
|
6650
|
+
address: value.address
|
6651
|
+
});
|
6652
|
+
}
|
6653
|
+
}
|
6083
6654
|
function getSignersFromInstruction(instruction) {
|
6084
6655
|
var _a;
|
6085
6656
|
return deduplicateSigners(
|
@@ -6088,7 +6659,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6088
6659
|
}
|
6089
6660
|
function getSignersFromTransactionMessage(transaction) {
|
6090
6661
|
return deduplicateSigners([
|
6091
|
-
...transaction.
|
6662
|
+
...transaction.feePayer && isTransactionSigner(transaction.feePayer) ? [transaction.feePayer] : [],
|
6092
6663
|
...transaction.instructions.flatMap(getSignersFromInstruction)
|
6093
6664
|
]);
|
6094
6665
|
}
|
@@ -6117,19 +6688,9 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6117
6688
|
instructions: transactionMessage.instructions.map((instruction) => addSignersToInstruction(signers, instruction))
|
6118
6689
|
});
|
6119
6690
|
}
|
6120
|
-
function setTransactionMessageFeePayerSigner(
|
6121
|
-
|
6122
|
-
|
6123
|
-
return transactionMessage;
|
6124
|
-
const out2 = { ...transactionMessage, feePayerSigner };
|
6125
|
-
Object.freeze(out2);
|
6126
|
-
return out2;
|
6127
|
-
}
|
6128
|
-
const out = {
|
6129
|
-
...transactionMessage,
|
6130
|
-
feePayer: feePayerSigner.address,
|
6131
|
-
feePayerSigner
|
6132
|
-
};
|
6691
|
+
function setTransactionMessageFeePayerSigner(feePayer, transactionMessage) {
|
6692
|
+
Object.freeze(feePayer);
|
6693
|
+
const out = { ...transactionMessage, feePayer };
|
6133
6694
|
Object.freeze(out);
|
6134
6695
|
return out;
|
6135
6696
|
}
|
@@ -6143,16 +6704,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6143
6704
|
});
|
6144
6705
|
}
|
6145
6706
|
}
|
6146
|
-
function isTransactionPartialSigner(value) {
|
6147
|
-
return "signTransactions" in value && typeof value.signTransactions === "function";
|
6148
|
-
}
|
6149
|
-
function assertIsTransactionPartialSigner(value) {
|
6150
|
-
if (!isTransactionPartialSigner(value)) {
|
6151
|
-
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_PARTIAL_SIGNER, {
|
6152
|
-
address: value.address
|
6153
|
-
});
|
6154
|
-
}
|
6155
|
-
}
|
6156
6707
|
function isKeyPairSigner(value) {
|
6157
6708
|
return "keyPair" in value && typeof value.keyPair === "object" && isMessagePartialSigner(value) && isTransactionPartialSigner(value);
|
6158
6709
|
}
|
@@ -6188,6 +6739,9 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6188
6739
|
async function createKeyPairSignerFromBytes(bytes, extractable) {
|
6189
6740
|
return await createSignerFromKeyPair(await createKeyPairFromBytes(bytes, extractable));
|
6190
6741
|
}
|
6742
|
+
async function createKeyPairSignerFromPrivateKeyBytes(bytes, extractable) {
|
6743
|
+
return await createSignerFromKeyPair(await createKeyPairFromPrivateKeyBytes(bytes, extractable));
|
6744
|
+
}
|
6191
6745
|
function isMessageModifyingSigner(value) {
|
6192
6746
|
return isAddress(value.address) && "modifyAndSignMessages" in value && typeof value.modifyAndSignMessages === "function";
|
6193
6747
|
}
|
@@ -6216,36 +6770,6 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6216
6770
|
};
|
6217
6771
|
return Object.freeze(out);
|
6218
6772
|
}
|
6219
|
-
function isTransactionModifyingSigner(value) {
|
6220
|
-
return "modifyAndSignTransactions" in value && typeof value.modifyAndSignTransactions === "function";
|
6221
|
-
}
|
6222
|
-
function assertIsTransactionModifyingSigner(value) {
|
6223
|
-
if (!isTransactionModifyingSigner(value)) {
|
6224
|
-
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_MODIFYING_SIGNER, {
|
6225
|
-
address: value.address
|
6226
|
-
});
|
6227
|
-
}
|
6228
|
-
}
|
6229
|
-
function isTransactionSendingSigner(value) {
|
6230
|
-
return "signAndSendTransactions" in value && typeof value.signAndSendTransactions === "function";
|
6231
|
-
}
|
6232
|
-
function assertIsTransactionSendingSigner(value) {
|
6233
|
-
if (!isTransactionSendingSigner(value)) {
|
6234
|
-
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SENDING_SIGNER, {
|
6235
|
-
address: value.address
|
6236
|
-
});
|
6237
|
-
}
|
6238
|
-
}
|
6239
|
-
function isTransactionSigner(value) {
|
6240
|
-
return isTransactionPartialSigner(value) || isTransactionModifyingSigner(value) || isTransactionSendingSigner(value);
|
6241
|
-
}
|
6242
|
-
function assertIsTransactionSigner(value) {
|
6243
|
-
if (!isTransactionSigner(value)) {
|
6244
|
-
throw new SolanaError(SOLANA_ERROR__SIGNER__EXPECTED_TRANSACTION_SIGNER, {
|
6245
|
-
address: value.address
|
6246
|
-
});
|
6247
|
-
}
|
6248
|
-
}
|
6249
6773
|
function isTransactionMessageWithSingleSendingSigner(transaction) {
|
6250
6774
|
try {
|
6251
6775
|
assertIsTransactionMessageWithSingleSendingSigner(transaction);
|
@@ -6381,6 +6905,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6381
6905
|
commitment,
|
6382
6906
|
lastValidBlockHeight
|
6383
6907
|
}) {
|
6908
|
+
callerAbortSignal.throwIfAborted();
|
6384
6909
|
const abortController = new AbortController();
|
6385
6910
|
const handleAbort = () => {
|
6386
6911
|
abortController.abort();
|
@@ -6398,6 +6923,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6398
6923
|
rpcSubscriptions.slotNotifications().subscribe({ abortSignal: abortController.signal }),
|
6399
6924
|
getBlockHeightAndDifferenceBetweenSlotHeightAndBlockHeight()
|
6400
6925
|
]);
|
6926
|
+
callerAbortSignal.throwIfAborted();
|
6401
6927
|
let currentBlockHeight = initialBlockHeight;
|
6402
6928
|
if (currentBlockHeight <= lastValidBlockHeight) {
|
6403
6929
|
let lastKnownDifferenceBetweenSlotHeightAndBlockHeight = differenceBetweenSlotHeightAndBlockHeight;
|
@@ -6417,6 +6943,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6417
6943
|
}
|
6418
6944
|
}
|
6419
6945
|
}
|
6946
|
+
callerAbortSignal.throwIfAborted();
|
6420
6947
|
throw new SolanaError(SOLANA_ERROR__BLOCK_HEIGHT_EXCEEDED, {
|
6421
6948
|
currentBlockHeight,
|
6422
6949
|
lastValidBlockHeight
|
@@ -6490,7 +7017,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6490
7017
|
}
|
6491
7018
|
})();
|
6492
7019
|
try {
|
6493
|
-
return await
|
7020
|
+
return await safeRace([nonceAccountDidAdvancePromise, nonceIsAlreadyInvalidPromise]);
|
6494
7021
|
} finally {
|
6495
7022
|
abortController.abort();
|
6496
7023
|
}
|
@@ -6531,7 +7058,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6531
7058
|
}
|
6532
7059
|
})();
|
6533
7060
|
try {
|
6534
|
-
return await
|
7061
|
+
return await safeRace([signatureDidCommitPromise, signatureStatusLookupPromise]);
|
6535
7062
|
} finally {
|
6536
7063
|
abortController.abort();
|
6537
7064
|
}
|
@@ -6573,7 +7100,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6573
7100
|
...config,
|
6574
7101
|
abortSignal: abortController.signal
|
6575
7102
|
});
|
6576
|
-
return await
|
7103
|
+
return await safeRace([
|
6577
7104
|
getRecentSignatureConfirmationPromise({
|
6578
7105
|
abortSignal: abortController.signal,
|
6579
7106
|
commitment,
|
@@ -6742,7 +7269,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6742
7269
|
const wireTransactionBytes = getBase64EncodedWireTransaction(compiledTransaction);
|
6743
7270
|
try {
|
6744
7271
|
const {
|
6745
|
-
value: { unitsConsumed }
|
7272
|
+
value: { err: transactionError, unitsConsumed }
|
6746
7273
|
} = await rpc.simulateTransaction(wireTransactionBytes, {
|
6747
7274
|
...simulateConfig,
|
6748
7275
|
encoding: "base64",
|
@@ -6753,8 +7280,15 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6753
7280
|
throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT);
|
6754
7281
|
}
|
6755
7282
|
const downcastUnitsConsumed = unitsConsumed > 4294967295n ? 4294967295 : Number(unitsConsumed);
|
7283
|
+
if (transactionError) {
|
7284
|
+
throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT, {
|
7285
|
+
cause: transactionError,
|
7286
|
+
unitsConsumed: downcastUnitsConsumed
|
7287
|
+
});
|
7288
|
+
}
|
6756
7289
|
return downcastUnitsConsumed;
|
6757
7290
|
} catch (e3) {
|
7291
|
+
if (isSolanaError(e3, SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT)) throw e3;
|
6758
7292
|
throw new SolanaError(SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT, {
|
6759
7293
|
cause: e3
|
6760
7294
|
});
|
@@ -6774,7 +7308,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6774
7308
|
};
|
6775
7309
|
}
|
6776
7310
|
|
6777
|
-
// src/
|
7311
|
+
// src/decompile-transaction-message-fetching-lookup-tables.ts
|
6778
7312
|
async function fetchLookupTables(lookupTableAddresses, rpc, config) {
|
6779
7313
|
const fetchedLookupTables = await fetchJsonParsedAccounts(
|
6780
7314
|
rpc,
|
@@ -6790,7 +7324,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
6790
7324
|
};
|
6791
7325
|
}, {});
|
6792
7326
|
}
|
6793
|
-
async function
|
7327
|
+
async function decompileTransactionMessageFetchingLookupTables(compiledTransactionMessage, rpc, config) {
|
6794
7328
|
const lookupTables = "addressTableLookups" in compiledTransactionMessage && compiledTransactionMessage.addressTableLookups !== void 0 && compiledTransactionMessage.addressTableLookups.length > 0 ? compiledTransactionMessage.addressTableLookups : [];
|
6795
7329
|
const lookupTableAddresses = lookupTables.map((l) => l.lookupTableAddress);
|
6796
7330
|
const { lastValidBlockHeight, ...fetchAccountsConfig } = config != null ? config : {};
|
@@ -7059,9 +7593,10 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7059
7593
|
exports.SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH = SOLANA_ERROR__INVALID_BLOCKHASH_BYTE_LENGTH;
|
7060
7594
|
exports.SOLANA_ERROR__INVALID_NONCE = SOLANA_ERROR__INVALID_NONCE;
|
7061
7595
|
exports.SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING = SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING;
|
7596
|
+
exports.SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED = SOLANA_ERROR__INVARIANT_VIOLATION__DATA_PUBLISHER_CHANNEL_UNIMPLEMENTED;
|
7597
|
+
exports.SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE = SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE;
|
7598
|
+
exports.SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING = SOLANA_ERROR__INVARIANT_VIOLATION__SUBSCRIPTION_ITERATOR_STATE_MISSING;
|
7062
7599
|
exports.SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE = SOLANA_ERROR__INVARIANT_VIOLATION__SWITCH_MUST_BE_EXHAUSTIVE;
|
7063
|
-
exports.SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE = SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_MUST_NOT_POLL_BEFORE_RESOLVING_EXISTING_MESSAGE_PROMISE;
|
7064
|
-
exports.SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_STATE_MISSING = SOLANA_ERROR__INVARIANT_VIOLATION__WEBSOCKET_MESSAGE_ITERATOR_STATE_MISSING;
|
7065
7600
|
exports.SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR = SOLANA_ERROR__JSON_RPC__INTERNAL_ERROR;
|
7066
7601
|
exports.SOLANA_ERROR__JSON_RPC__INVALID_PARAMS = SOLANA_ERROR__JSON_RPC__INVALID_PARAMS;
|
7067
7602
|
exports.SOLANA_ERROR__JSON_RPC__INVALID_REQUEST = SOLANA_ERROR__JSON_RPC__INVALID_REQUEST;
|
@@ -7092,11 +7627,12 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7092
7627
|
exports.SOLANA_ERROR__MALFORMED_BIGINT_STRING = SOLANA_ERROR__MALFORMED_BIGINT_STRING;
|
7093
7628
|
exports.SOLANA_ERROR__MALFORMED_NUMBER_STRING = SOLANA_ERROR__MALFORMED_NUMBER_STRING;
|
7094
7629
|
exports.SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND = SOLANA_ERROR__NONCE_ACCOUNT_NOT_FOUND;
|
7095
|
-
exports.
|
7630
|
+
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN = SOLANA_ERROR__RPC_SUBSCRIPTIONS__CANNOT_CREATE_SUBSCRIPTION_PLAN;
|
7631
|
+
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED = SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CLOSED_BEFORE_MESSAGE_BUFFERED;
|
7632
|
+
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED = SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_CONNECTION_CLOSED;
|
7633
|
+
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT = SOLANA_ERROR__RPC_SUBSCRIPTIONS__CHANNEL_FAILED_TO_CONNECT;
|
7096
7634
|
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID = SOLANA_ERROR__RPC_SUBSCRIPTIONS__EXPECTED_SERVER_SUBSCRIPTION_ID;
|
7097
|
-
exports.
|
7098
|
-
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_CONNECTION_CLOSED = SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_CONNECTION_CLOSED;
|
7099
|
-
exports.SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_FAILED_TO_CONNECT = SOLANA_ERROR__RPC_SUBSCRIPTIONS__TRANSPORT_FAILED_TO_CONNECT;
|
7635
|
+
exports.SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD = SOLANA_ERROR__RPC__API_PLAN_MISSING_FOR_RPC_METHOD;
|
7100
7636
|
exports.SOLANA_ERROR__RPC__INTEGER_OVERFLOW = SOLANA_ERROR__RPC__INTEGER_OVERFLOW;
|
7101
7637
|
exports.SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR = SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR;
|
7102
7638
|
exports.SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN = SOLANA_ERROR__RPC__TRANSPORT_HTTP_HEADER_FORBIDDEN;
|
@@ -7112,6 +7648,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7112
7648
|
exports.SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS = SOLANA_ERROR__SIGNER__TRANSACTION_CANNOT_HAVE_MULTIPLE_SENDING_SIGNERS;
|
7113
7649
|
exports.SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING = SOLANA_ERROR__SIGNER__TRANSACTION_SENDING_SIGNER_MISSING;
|
7114
7650
|
exports.SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED = SOLANA_ERROR__SIGNER__WALLET_MULTISIGN_UNIMPLEMENTED;
|
7651
|
+
exports.SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY = SOLANA_ERROR__SUBTLE_CRYPTO__CANNOT_EXPORT_NON_EXTRACTABLE_KEY;
|
7115
7652
|
exports.SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED = SOLANA_ERROR__SUBTLE_CRYPTO__DIGEST_UNIMPLEMENTED;
|
7116
7653
|
exports.SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT = SOLANA_ERROR__SUBTLE_CRYPTO__DISALLOWED_IN_INSECURE_CONTEXT;
|
7117
7654
|
exports.SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED = SOLANA_ERROR__SUBTLE_CRYPTO__ED25519_ALGORITHM_UNIMPLEMENTED;
|
@@ -7167,6 +7704,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7167
7704
|
exports.SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING = SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_FEE_PAYER_MISSING;
|
7168
7705
|
exports.SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND = SOLANA_ERROR__TRANSACTION__FAILED_TO_DECOMPILE_INSTRUCTION_PROGRAM_ADDRESS_NOT_FOUND;
|
7169
7706
|
exports.SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT = SOLANA_ERROR__TRANSACTION__FAILED_TO_ESTIMATE_COMPUTE_LIMIT;
|
7707
|
+
exports.SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT = SOLANA_ERROR__TRANSACTION__FAILED_WHEN_SIMULATING_TO_ESTIMATE_COMPUTE_LIMIT;
|
7170
7708
|
exports.SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING = SOLANA_ERROR__TRANSACTION__FEE_PAYER_MISSING;
|
7171
7709
|
exports.SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING = SOLANA_ERROR__TRANSACTION__FEE_PAYER_SIGNATURE_MISSING;
|
7172
7710
|
exports.SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE = SOLANA_ERROR__TRANSACTION__INVALID_NONCE_TRANSACTION_FIRST_INSTRUCTION_MUST_BE_ADVANCE_NONCE;
|
@@ -7234,16 +7772,22 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7234
7772
|
exports.createAddressWithSeed = createAddressWithSeed;
|
7235
7773
|
exports.createCodec = createCodec;
|
7236
7774
|
exports.createDecoder = createDecoder;
|
7775
|
+
exports.createDefaultRpcSubscriptionsChannelCreator = createDefaultRpcSubscriptionsChannelCreator;
|
7237
7776
|
exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
|
7238
7777
|
exports.createDefaultRpcTransport = createDefaultRpcTransport;
|
7778
|
+
exports.createDefaultSolanaRpcSubscriptionsChannelCreator = createDefaultSolanaRpcSubscriptionsChannelCreator;
|
7239
7779
|
exports.createEncoder = createEncoder;
|
7780
|
+
exports.createJsonRpcApi = createJsonRpcApi;
|
7240
7781
|
exports.createKeyPairFromBytes = createKeyPairFromBytes;
|
7782
|
+
exports.createKeyPairFromPrivateKeyBytes = createKeyPairFromPrivateKeyBytes;
|
7241
7783
|
exports.createKeyPairSignerFromBytes = createKeyPairSignerFromBytes;
|
7784
|
+
exports.createKeyPairSignerFromPrivateKeyBytes = createKeyPairSignerFromPrivateKeyBytes;
|
7242
7785
|
exports.createNoopSigner = createNoopSigner;
|
7243
7786
|
exports.createPrivateKeyFromBytes = createPrivateKeyFromBytes;
|
7244
7787
|
exports.createRpc = createRpc;
|
7245
|
-
exports.
|
7788
|
+
exports.createRpcMessage = createRpcMessage;
|
7246
7789
|
exports.createRpcSubscriptionsApi = createRpcSubscriptionsApi;
|
7790
|
+
exports.createRpcSubscriptionsTransportFromChannelCreator = createRpcSubscriptionsTransportFromChannelCreator;
|
7247
7791
|
exports.createSignableMessage = createSignableMessage;
|
7248
7792
|
exports.createSignerFromKeyPair = createSignerFromKeyPair;
|
7249
7793
|
exports.createSolanaRpc = createSolanaRpc;
|
@@ -7253,16 +7797,16 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7253
7797
|
exports.createSolanaRpcSubscriptionsApi = createSolanaRpcSubscriptionsApi;
|
7254
7798
|
exports.createSolanaRpcSubscriptionsApi_UNSTABLE = createSolanaRpcSubscriptionsApi_UNSTABLE;
|
7255
7799
|
exports.createSolanaRpcSubscriptionsFromTransport = createSolanaRpcSubscriptionsFromTransport;
|
7256
|
-
exports.createSolanaRpcSubscriptionsFromTransport_UNSTABLE = createSolanaRpcSubscriptionsFromTransport_UNSTABLE;
|
7257
7800
|
exports.createSolanaRpcSubscriptions_UNSTABLE = createSolanaRpcSubscriptions_UNSTABLE;
|
7258
7801
|
exports.createSubscriptionRpc = createSubscriptionRpc;
|
7259
7802
|
exports.createTransactionMessage = createTransactionMessage;
|
7260
7803
|
exports.decodeAccount = decodeAccount;
|
7261
|
-
exports.decodeTransactionMessage = decodeTransactionMessage;
|
7262
7804
|
exports.decompileTransactionMessage = decompileTransactionMessage;
|
7805
|
+
exports.decompileTransactionMessageFetchingLookupTables = decompileTransactionMessageFetchingLookupTables;
|
7263
7806
|
exports.devnet = devnet;
|
7264
7807
|
exports.downgradeRoleToNonSigner = downgradeRoleToNonSigner;
|
7265
7808
|
exports.downgradeRoleToReadonly = downgradeRoleToReadonly;
|
7809
|
+
exports.executeRpcPubSubSubscriptionPlan = executeRpcPubSubSubscriptionPlan;
|
7266
7810
|
exports.fetchEncodedAccount = fetchEncodedAccount;
|
7267
7811
|
exports.fetchEncodedAccounts = fetchEncodedAccounts;
|
7268
7812
|
exports.fetchJsonParsedAccount = fetchJsonParsedAccount;
|
@@ -7373,6 +7917,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7373
7917
|
exports.getOptionDecoder = getOptionDecoder;
|
7374
7918
|
exports.getOptionEncoder = getOptionEncoder;
|
7375
7919
|
exports.getProgramDerivedAddress = getProgramDerivedAddress;
|
7920
|
+
exports.getPublicKeyFromPrivateKey = getPublicKeyFromPrivateKey;
|
7921
|
+
exports.getRpcSubscriptionsChannelWithJSONSerialization = getRpcSubscriptionsChannelWithJSONSerialization;
|
7376
7922
|
exports.getScalarEnumCodec = getScalarEnumCodec;
|
7377
7923
|
exports.getScalarEnumDecoder = getScalarEnumDecoder;
|
7378
7924
|
exports.getScalarEnumEncoder = getScalarEnumEncoder;
|
@@ -7432,6 +7978,7 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7432
7978
|
exports.isInstructionForProgram = isInstructionForProgram;
|
7433
7979
|
exports.isInstructionWithAccounts = isInstructionWithAccounts;
|
7434
7980
|
exports.isInstructionWithData = isInstructionWithData;
|
7981
|
+
exports.isJsonRpcPayload = isJsonRpcPayload;
|
7435
7982
|
exports.isKeyPairSigner = isKeyPairSigner;
|
7436
7983
|
exports.isLamports = isLamports;
|
7437
7984
|
exports.isMessageModifyingSigner = isMessageModifyingSigner;
|
@@ -7504,6 +8051,8 @@ this.globalThis.solanaWeb3 = (function (exports) {
|
|
7504
8051
|
exports.stringifiedBigInt = stringifiedBigInt;
|
7505
8052
|
exports.stringifiedNumber = stringifiedNumber;
|
7506
8053
|
exports.testnet = testnet;
|
8054
|
+
exports.transformChannelInboundMessages = transformChannelInboundMessages;
|
8055
|
+
exports.transformChannelOutboundMessages = transformChannelOutboundMessages;
|
7507
8056
|
exports.transformCodec = transformCodec;
|
7508
8057
|
exports.transformDecoder = transformDecoder;
|
7509
8058
|
exports.transformEncoder = transformEncoder;
|