@solana/rpc-subscriptions 2.0.0-canary-20240731173615

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.
Files changed (33) hide show
  1. package/LICENSE +20 -0
  2. package/README.md +17 -0
  3. package/dist/index.browser.cjs +388 -0
  4. package/dist/index.browser.cjs.map +1 -0
  5. package/dist/index.browser.mjs +367 -0
  6. package/dist/index.browser.mjs.map +1 -0
  7. package/dist/index.native.mjs +356 -0
  8. package/dist/index.native.mjs.map +1 -0
  9. package/dist/index.node.cjs +377 -0
  10. package/dist/index.node.cjs.map +1 -0
  11. package/dist/index.node.mjs +356 -0
  12. package/dist/index.node.mjs.map +1 -0
  13. package/dist/types/cached-abortable-iterable.d.ts +10 -0
  14. package/dist/types/cached-abortable-iterable.d.ts.map +1 -0
  15. package/dist/types/index.d.ts +7 -0
  16. package/dist/types/index.d.ts.map +1 -0
  17. package/dist/types/rpc-default-config.d.ts +3 -0
  18. package/dist/types/rpc-default-config.d.ts.map +1 -0
  19. package/dist/types/rpc-integer-overflow-error.d.ts +4 -0
  20. package/dist/types/rpc-integer-overflow-error.d.ts.map +1 -0
  21. package/dist/types/rpc-subscriptions-autopinger.d.ts +8 -0
  22. package/dist/types/rpc-subscriptions-autopinger.d.ts.map +1 -0
  23. package/dist/types/rpc-subscriptions-clusters.d.ts +24 -0
  24. package/dist/types/rpc-subscriptions-clusters.d.ts.map +1 -0
  25. package/dist/types/rpc-subscriptions-coalescer.d.ts +10 -0
  26. package/dist/types/rpc-subscriptions-coalescer.d.ts.map +1 -0
  27. package/dist/types/rpc-subscriptions-connection-sharding.d.ts +13 -0
  28. package/dist/types/rpc-subscriptions-connection-sharding.d.ts.map +1 -0
  29. package/dist/types/rpc-subscriptions-transport.d.ts +15 -0
  30. package/dist/types/rpc-subscriptions-transport.d.ts.map +1 -0
  31. package/dist/types/rpc-subscriptions.d.ts +10 -0
  32. package/dist/types/rpc-subscriptions.d.ts.map +1 -0
  33. package/package.json +85 -0
package/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2023 Solana Labs, Inc
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,17 @@
1
+ [![npm][npm-image]][npm-url]
2
+ [![npm-downloads][npm-downloads-image]][npm-url]
3
+ [![semantic-release][semantic-release-image]][semantic-release-url]
4
+ <br />
5
+ [![code-style-prettier][code-style-prettier-image]][code-style-prettier-url]
6
+
7
+ [code-style-prettier-image]: https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square
8
+ [code-style-prettier-url]: https://github.com/prettier/prettier
9
+ [npm-downloads-image]: https://img.shields.io/npm/dm/@solana/rpc-subscriptions/experimental.svg?style=flat
10
+ [npm-image]: https://img.shields.io/npm/v/@solana/rpc-subscriptions/experimental.svg?style=flat
11
+ [npm-url]: https://www.npmjs.com/package/@solana/rpc-subscriptions/v/experimental
12
+ [semantic-release-image]: https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg
13
+ [semantic-release-url]: https://github.com/semantic-release/semantic-release
14
+
15
+ # @solana/rpc-subscriptions
16
+
17
+ TODO
@@ -0,0 +1,388 @@
1
+ 'use strict';
2
+
3
+ var rpcSubscriptionsApi = require('@solana/rpc-subscriptions-api');
4
+ var rpcSubscriptionsSpec = require('@solana/rpc-subscriptions-spec');
5
+ var errors = require('@solana/errors');
6
+ var fastStableStringify = require('@solana/fast-stable-stringify');
7
+ var functional = require('@solana/functional');
8
+ var rpcSubscriptionsTransportWebsocket = require('@solana/rpc-subscriptions-transport-websocket');
9
+
10
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
+
12
+ var fastStableStringify__default = /*#__PURE__*/_interopDefault(fastStableStringify);
13
+
14
+ // src/index.ts
15
+ function createSolanaJsonRpcIntegerOverflowError(methodName, keyPath, value) {
16
+ let argumentLabel = "";
17
+ if (typeof keyPath[0] === "number") {
18
+ const argPosition = keyPath[0] + 1;
19
+ const lastDigit = argPosition % 10;
20
+ const lastTwoDigits = argPosition % 100;
21
+ if (lastDigit == 1 && lastTwoDigits != 11) {
22
+ argumentLabel = argPosition + "st";
23
+ } else if (lastDigit == 2 && lastTwoDigits != 12) {
24
+ argumentLabel = argPosition + "nd";
25
+ } else if (lastDigit == 3 && lastTwoDigits != 13) {
26
+ argumentLabel = argPosition + "rd";
27
+ } else {
28
+ argumentLabel = argPosition + "th";
29
+ }
30
+ } else {
31
+ argumentLabel = `\`${keyPath[0].toString()}\``;
32
+ }
33
+ const path = keyPath.length > 1 ? keyPath.slice(1).map((pathPart) => typeof pathPart === "number" ? `[${pathPart}]` : pathPart).join(".") : void 0;
34
+ const error = new errors.SolanaError(errors.SOLANA_ERROR__RPC__INTEGER_OVERFLOW, {
35
+ argumentLabel,
36
+ keyPath,
37
+ methodName,
38
+ optionalPathLabel: path ? ` at path \`${path}\`` : "",
39
+ value,
40
+ ...path !== void 0 ? { path } : void 0
41
+ });
42
+ errors.safeCaptureStackTrace(error, createSolanaJsonRpcIntegerOverflowError);
43
+ return error;
44
+ }
45
+
46
+ // src/rpc-default-config.ts
47
+ var DEFAULT_RPC_SUBSCRIPTIONS_CONFIG = {
48
+ defaultCommitment: "confirmed",
49
+ onIntegerOverflow(methodName, keyPath, value) {
50
+ throw createSolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);
51
+ }
52
+ };
53
+ function registerIterableCleanup(iterable, cleanupFn) {
54
+ (async () => {
55
+ try {
56
+ for await (const _ of iterable) ;
57
+ } catch {
58
+ } finally {
59
+ cleanupFn();
60
+ }
61
+ })();
62
+ }
63
+ function getCachedAbortableIterableFactory({
64
+ getAbortSignalFromInputArgs,
65
+ getCacheKeyFromInputArgs,
66
+ onCacheHit,
67
+ onCreateIterable
68
+ }) {
69
+ const cache = /* @__PURE__ */ new Map();
70
+ function getCacheEntryOrThrow(cacheKey) {
71
+ const currentCacheEntry = cache.get(cacheKey);
72
+ if (!currentCacheEntry) {
73
+ throw new errors.SolanaError(errors.SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING, {
74
+ cacheKey: cacheKey.toString()
75
+ });
76
+ }
77
+ return currentCacheEntry;
78
+ }
79
+ return async (...args) => {
80
+ const cacheKey = getCacheKeyFromInputArgs(...args);
81
+ const signal = getAbortSignalFromInputArgs(...args);
82
+ if (cacheKey === void 0) {
83
+ return await onCreateIterable(signal, ...args);
84
+ }
85
+ const cleanup = () => {
86
+ cache.delete(cacheKey);
87
+ signal.removeEventListener("abort", handleAbort);
88
+ };
89
+ const handleAbort = () => {
90
+ const cacheEntry = getCacheEntryOrThrow(cacheKey);
91
+ if (cacheEntry.purgeScheduled !== true) {
92
+ cacheEntry.purgeScheduled = true;
93
+ globalThis.queueMicrotask(() => {
94
+ cacheEntry.purgeScheduled = false;
95
+ if (cacheEntry.referenceCount === 0) {
96
+ cacheEntry.abortController.abort();
97
+ cleanup();
98
+ }
99
+ });
100
+ }
101
+ cacheEntry.referenceCount--;
102
+ };
103
+ signal.addEventListener("abort", handleAbort);
104
+ try {
105
+ const cacheEntry = cache.get(cacheKey);
106
+ if (!cacheEntry) {
107
+ const singletonAbortController = new AbortController();
108
+ const newIterablePromise = onCreateIterable(singletonAbortController.signal, ...args);
109
+ const newCacheEntry = {
110
+ abortController: singletonAbortController,
111
+ iterable: newIterablePromise,
112
+ purgeScheduled: false,
113
+ referenceCount: 1
114
+ };
115
+ cache.set(cacheKey, newCacheEntry);
116
+ const newIterable = await newIterablePromise;
117
+ registerIterableCleanup(newIterable, cleanup);
118
+ newCacheEntry.iterable = newIterable;
119
+ return newIterable;
120
+ } else {
121
+ cacheEntry.referenceCount++;
122
+ const iterableOrIterablePromise = cacheEntry.iterable;
123
+ const cachedIterable = "then" in iterableOrIterablePromise ? await iterableOrIterablePromise : iterableOrIterablePromise;
124
+ await onCacheHit(cachedIterable, ...args);
125
+ return cachedIterable;
126
+ }
127
+ } catch (e) {
128
+ cleanup();
129
+ throw e;
130
+ }
131
+ };
132
+ }
133
+
134
+ // src/rpc-subscriptions-coalescer.ts
135
+ var EXPLICIT_ABORT_TOKEN;
136
+ function createExplicitAbortToken() {
137
+ return Symbol(
138
+ process.env.NODE_ENV !== "production" ? "This symbol is thrown from a subscription's iterator when the subscription is explicitly aborted by the user" : void 0
139
+ );
140
+ }
141
+ function registerIterableCleanup2(iterable, cleanupFn) {
142
+ (async () => {
143
+ try {
144
+ for await (const _ of iterable) ;
145
+ } catch {
146
+ } finally {
147
+ cleanupFn();
148
+ }
149
+ })();
150
+ }
151
+ function getRpcSubscriptionsWithSubscriptionCoalescing({
152
+ getDeduplicationKey,
153
+ rpcSubscriptions
154
+ }) {
155
+ const cache = /* @__PURE__ */ new Map();
156
+ return new Proxy(rpcSubscriptions, {
157
+ defineProperty() {
158
+ return false;
159
+ },
160
+ deleteProperty() {
161
+ return false;
162
+ },
163
+ get(target, p, receiver) {
164
+ const subscriptionMethod = Reflect.get(target, p, receiver);
165
+ if (typeof subscriptionMethod !== "function") {
166
+ return subscriptionMethod;
167
+ }
168
+ return function(...rawParams) {
169
+ const deduplicationKey = getDeduplicationKey(p, rawParams);
170
+ if (deduplicationKey === void 0) {
171
+ return subscriptionMethod(...rawParams);
172
+ }
173
+ if (cache.has(deduplicationKey)) {
174
+ return cache.get(deduplicationKey);
175
+ }
176
+ const iterableFactory = getCachedAbortableIterableFactory({
177
+ getAbortSignalFromInputArgs: ({ abortSignal }) => abortSignal,
178
+ getCacheKeyFromInputArgs: () => deduplicationKey,
179
+ async onCacheHit(_iterable, _config) {
180
+ },
181
+ async onCreateIterable(abortSignal, config) {
182
+ const pendingSubscription2 = subscriptionMethod(
183
+ ...rawParams
184
+ );
185
+ const iterable = await pendingSubscription2.subscribe({
186
+ ...config,
187
+ abortSignal
188
+ });
189
+ registerIterableCleanup2(iterable, () => {
190
+ cache.delete(deduplicationKey);
191
+ });
192
+ return iterable;
193
+ }
194
+ });
195
+ const pendingSubscription = {
196
+ async subscribe(...args) {
197
+ const iterable = await iterableFactory(...args);
198
+ const { abortSignal } = args[0];
199
+ let abortPromise;
200
+ return {
201
+ ...iterable,
202
+ async *[Symbol.asyncIterator]() {
203
+ abortPromise ||= abortSignal.aborted ? Promise.reject(EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken()) : new Promise((_, reject) => {
204
+ abortSignal.addEventListener("abort", () => {
205
+ reject(EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken());
206
+ });
207
+ });
208
+ try {
209
+ const iterator = iterable[Symbol.asyncIterator]();
210
+ while (true) {
211
+ const iteratorResult = await Promise.race([iterator.next(), abortPromise]);
212
+ if (iteratorResult.done) {
213
+ return;
214
+ } else {
215
+ yield iteratorResult.value;
216
+ }
217
+ }
218
+ } catch (e) {
219
+ if (e === (EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken())) {
220
+ return;
221
+ }
222
+ cache.delete(deduplicationKey);
223
+ throw e;
224
+ }
225
+ }
226
+ };
227
+ }
228
+ };
229
+ cache.set(deduplicationKey, pendingSubscription);
230
+ return pendingSubscription;
231
+ };
232
+ }
233
+ });
234
+ }
235
+
236
+ // src/rpc-subscriptions-autopinger.ts
237
+ var PING_PAYLOAD = {
238
+ jsonrpc: "2.0",
239
+ method: "ping"
240
+ };
241
+ function getWebSocketTransportWithAutoping({
242
+ intervalMs,
243
+ transport
244
+ }) {
245
+ const pingableConnections = /* @__PURE__ */ new Map();
246
+ return async (...args) => {
247
+ const connection = await transport(...args);
248
+ let intervalId;
249
+ function sendPing() {
250
+ connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(PING_PAYLOAD);
251
+ }
252
+ function restartPingTimer() {
253
+ clearInterval(intervalId);
254
+ intervalId = setInterval(sendPing, intervalMs);
255
+ }
256
+ if (pingableConnections.has(connection) === false) {
257
+ pingableConnections.set(connection, {
258
+ [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),
259
+ send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: (...args2) => {
260
+ restartPingTimer();
261
+ return connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(...args2);
262
+ }
263
+ });
264
+ (async () => {
265
+ try {
266
+ for await (const _ of connection) {
267
+ restartPingTimer();
268
+ }
269
+ } catch {
270
+ } finally {
271
+ pingableConnections.delete(connection);
272
+ clearInterval(intervalId);
273
+ if (handleOffline) {
274
+ globalThis.window.removeEventListener("offline", handleOffline);
275
+ }
276
+ if (handleOnline) {
277
+ globalThis.window.removeEventListener("online", handleOnline);
278
+ }
279
+ }
280
+ })();
281
+ if (globalThis.navigator.onLine) {
282
+ restartPingTimer();
283
+ }
284
+ let handleOffline;
285
+ let handleOnline;
286
+ {
287
+ handleOffline = () => {
288
+ clearInterval(intervalId);
289
+ };
290
+ handleOnline = () => {
291
+ sendPing();
292
+ restartPingTimer();
293
+ };
294
+ globalThis.window.addEventListener("offline", handleOffline);
295
+ globalThis.window.addEventListener("online", handleOnline);
296
+ }
297
+ }
298
+ return pingableConnections.get(connection);
299
+ };
300
+ }
301
+
302
+ // src/rpc-subscriptions-connection-sharding.ts
303
+ var NULL_SHARD_CACHE_KEY;
304
+ function createNullShardCacheKey() {
305
+ return Symbol(process.env.NODE_ENV !== "production" ? "Cache key to use when there is no connection sharding strategy" : void 0);
306
+ }
307
+ function getWebSocketTransportWithConnectionSharding({
308
+ getShard,
309
+ transport
310
+ }) {
311
+ return getCachedAbortableIterableFactory({
312
+ getAbortSignalFromInputArgs: ({ signal }) => signal,
313
+ getCacheKeyFromInputArgs: ({ payload }) => getShard ? getShard(payload) : NULL_SHARD_CACHE_KEY ||= createNullShardCacheKey(),
314
+ onCacheHit: (connection, { payload }) => connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload),
315
+ onCreateIterable: (abortSignal, config) => transport({
316
+ ...config,
317
+ signal: abortSignal
318
+ })
319
+ });
320
+ }
321
+
322
+ // src/rpc-subscriptions-transport.ts
323
+ function createDefaultRpcSubscriptionsTransport(config) {
324
+ const { getShard, intervalMs, ...rest } = config;
325
+ return functional.pipe(
326
+ rpcSubscriptionsTransportWebsocket.createWebSocketTransport({
327
+ ...rest,
328
+ sendBufferHighWatermark: config.sendBufferHighWatermark ?? // Let 128KB of data into the WebSocket buffer before buffering it in the app.
329
+ 131072
330
+ }),
331
+ (transport) => getWebSocketTransportWithAutoping({
332
+ intervalMs: intervalMs ?? 5e3,
333
+ transport
334
+ }),
335
+ (transport) => getWebSocketTransportWithConnectionSharding({
336
+ getShard,
337
+ transport
338
+ })
339
+ );
340
+ }
341
+
342
+ // src/rpc-subscriptions.ts
343
+ function createSolanaRpcSubscriptions(clusterUrl, config) {
344
+ const transport = createDefaultRpcSubscriptionsTransport({ url: clusterUrl, ...config });
345
+ return createSolanaRpcSubscriptionsFromTransport(transport);
346
+ }
347
+ function createSolanaRpcSubscriptions_UNSTABLE(clusterUrl, config) {
348
+ return createSolanaRpcSubscriptions(
349
+ clusterUrl,
350
+ config
351
+ );
352
+ }
353
+ function createSolanaRpcSubscriptionsFromTransport(transport) {
354
+ return functional.pipe(
355
+ rpcSubscriptionsSpec.createSubscriptionRpc({
356
+ api: rpcSubscriptionsApi.createSolanaRpcSubscriptionsApi(DEFAULT_RPC_SUBSCRIPTIONS_CONFIG),
357
+ transport
358
+ }),
359
+ (rpcSubscriptions) => getRpcSubscriptionsWithSubscriptionCoalescing({
360
+ getDeduplicationKey: (...args) => fastStableStringify__default.default(args),
361
+ rpcSubscriptions
362
+ })
363
+ );
364
+ }
365
+ function createSolanaRpcSubscriptionsFromTransport_UNSTABLE(transport) {
366
+ return createSolanaRpcSubscriptionsFromTransport(transport);
367
+ }
368
+
369
+ exports.DEFAULT_RPC_SUBSCRIPTIONS_CONFIG = DEFAULT_RPC_SUBSCRIPTIONS_CONFIG;
370
+ exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
371
+ exports.createSolanaRpcSubscriptions = createSolanaRpcSubscriptions;
372
+ exports.createSolanaRpcSubscriptionsFromTransport = createSolanaRpcSubscriptionsFromTransport;
373
+ exports.createSolanaRpcSubscriptionsFromTransport_UNSTABLE = createSolanaRpcSubscriptionsFromTransport_UNSTABLE;
374
+ exports.createSolanaRpcSubscriptions_UNSTABLE = createSolanaRpcSubscriptions_UNSTABLE;
375
+ Object.keys(rpcSubscriptionsApi).forEach(function (k) {
376
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
377
+ enumerable: true,
378
+ get: function () { return rpcSubscriptionsApi[k]; }
379
+ });
380
+ });
381
+ Object.keys(rpcSubscriptionsSpec).forEach(function (k) {
382
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
383
+ enumerable: true,
384
+ get: function () { return rpcSubscriptionsSpec[k]; }
385
+ });
386
+ });
387
+ //# sourceMappingURL=index.browser.cjs.map
388
+ //# sourceMappingURL=index.browser.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rpc-integer-overflow-error.ts","../src/rpc-default-config.ts","../src/cached-abortable-iterable.ts","../src/rpc-subscriptions-coalescer.ts","../src/rpc-subscriptions-autopinger.ts","../src/rpc-subscriptions-connection-sharding.ts","../src/rpc-subscriptions-transport.ts","../src/rpc-subscriptions.ts"],"names":["SolanaError","SOLANA_ERROR__RPC__INTEGER_OVERFLOW","safeCaptureStackTrace","SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING","registerIterableCleanup","pendingSubscription","args","pipe","createWebSocketTransport","createSubscriptionRpc","createSolanaRpcSubscriptionsApi","fastStableStringify"],"mappings":";;;;;;;;;;;;;;AAGO,SAAS,uCAAA,CACZ,UACA,EAAA,OAAA,EACA,KACuD,EAAA;AACvD,EAAA,IAAI,aAAgB,GAAA,EAAA,CAAA;AACpB,EAAA,IAAI,OAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,QAAU,EAAA;AAChC,IAAM,MAAA,WAAA,GAAc,OAAQ,CAAA,CAAC,CAAI,GAAA,CAAA,CAAA;AACjC,IAAA,MAAM,YAAY,WAAc,GAAA,EAAA,CAAA;AAChC,IAAA,MAAM,gBAAgB,WAAc,GAAA,GAAA,CAAA;AACpC,IAAI,IAAA,SAAA,IAAa,CAAK,IAAA,aAAA,IAAiB,EAAI,EAAA;AACvC,MAAA,aAAA,GAAgB,WAAc,GAAA,IAAA,CAAA;AAAA,KACvB,MAAA,IAAA,SAAA,IAAa,CAAK,IAAA,aAAA,IAAiB,EAAI,EAAA;AAC9C,MAAA,aAAA,GAAgB,WAAc,GAAA,IAAA,CAAA;AAAA,KACvB,MAAA,IAAA,SAAA,IAAa,CAAK,IAAA,aAAA,IAAiB,EAAI,EAAA;AAC9C,MAAA,aAAA,GAAgB,WAAc,GAAA,IAAA,CAAA;AAAA,KAC3B,MAAA;AACH,MAAA,aAAA,GAAgB,WAAc,GAAA,IAAA,CAAA;AAAA,KAClC;AAAA,GACG,MAAA;AACH,IAAA,aAAA,GAAgB,CAAK,EAAA,EAAA,OAAA,CAAQ,CAAC,CAAA,CAAE,UAAU,CAAA,EAAA,CAAA,CAAA;AAAA,GAC9C;AACA,EAAM,MAAA,IAAA,GACF,QAAQ,MAAS,GAAA,CAAA,GACX,QACK,KAAM,CAAA,CAAC,EACP,GAAI,CAAA,CAAA,QAAA,KAAa,OAAO,QAAa,KAAA,QAAA,GAAW,IAAI,QAAQ,CAAA,CAAA,CAAA,GAAM,QAAS,CAC3E,CAAA,IAAA,CAAK,GAAG,CACb,GAAA,KAAA,CAAA,CAAA;AACV,EAAM,MAAA,KAAA,GAAQ,IAAIA,kBAAA,CAAYC,0CAAqC,EAAA;AAAA,IAC/D,aAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAmB,EAAA,IAAA,GAAO,CAAc,WAAA,EAAA,IAAI,CAAO,EAAA,CAAA,GAAA,EAAA;AAAA,IACnD,KAAA;AAAA,IACA,GAAI,IAAA,KAAS,KAAY,CAAA,GAAA,EAAE,MAAS,GAAA,KAAA,CAAA;AAAA,GACvC,CAAA,CAAA;AACD,EAAAC,4BAAA,CAAsB,OAAO,uCAAuC,CAAA,CAAA;AACpE,EAAO,OAAA,KAAA,CAAA;AACX,CAAA;;;ACtCO,IAAM,gCAET,GAAA;AAAA,EACA,iBAAmB,EAAA,WAAA;AAAA,EACnB,iBAAA,CAAkB,UAAY,EAAA,OAAA,EAAS,KAAO,EAAA;AAC1C,IAAM,MAAA,uCAAA,CAAwC,UAAY,EAAA,OAAA,EAAS,KAAK,CAAA,CAAA;AAAA,GAC5E;AACJ,EAAA;ACWA,SAAS,uBAAA,CAAwB,UAAkC,SAA6B,EAAA;AAC5F,EAAA,CAAC,YAAY;AACT,IAAI,IAAA;AAEA,MAAA,WAAA,MAAiB,KAAK,QAAS,EAAA,CAAA;AAAA,KAC3B,CAAA,MAAA;AAAA,KAEN,SAAA;AAEE,MAAU,SAAA,EAAA,CAAA;AAAA,KACd;AAAA,GACD,GAAA,CAAA;AACP,CAAA;AAEO,SAAS,iCAAsG,CAAA;AAAA,EAClH,2BAAA;AAAA,EACA,wBAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AACJ,CAAuE,EAAA;AACnE,EAAM,MAAA,KAAA,uBAAY,GAAqC,EAAA,CAAA;AACvD,EAAA,SAAS,qBAAqB,QAAoB,EAAA;AAC9C,IAAM,MAAA,iBAAA,GAAoB,KAAM,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AAC5C,IAAA,IAAI,CAAC,iBAAmB,EAAA;AACpB,MAAM,MAAA,IAAIF,mBAAYG,uFAAkF,EAAA;AAAA,QACpG,QAAA,EAAU,SAAS,QAAS,EAAA;AAAA,OAC/B,CAAA,CAAA;AAAA,KACL;AACA,IAAO,OAAA,iBAAA,CAAA;AAAA,GACX;AACA,EAAA,OAAO,UAAU,IAAiB,KAAA;AAC9B,IAAM,MAAA,QAAA,GAAW,wBAAyB,CAAA,GAAG,IAAI,CAAA,CAAA;AACjD,IAAM,MAAA,MAAA,GAAS,2BAA4B,CAAA,GAAG,IAAI,CAAA,CAAA;AAClD,IAAA,IAAI,aAAa,KAAW,CAAA,EAAA;AACxB,MAAA,OAAO,MAAM,gBAAA,CAAiB,MAAQ,EAAA,GAAG,IAAI,CAAA,CAAA;AAAA,KACjD;AACA,IAAA,MAAM,UAAU,MAAM;AAClB,MAAA,KAAA,CAAM,OAAO,QAAQ,CAAA,CAAA;AACrB,MAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,WAAW,CAAA,CAAA;AAAA,KACnD,CAAA;AACA,IAAA,MAAM,cAAc,MAAM;AACtB,MAAM,MAAA,UAAA,GAAa,qBAAqB,QAAQ,CAAA,CAAA;AAChD,MAAI,IAAA,UAAA,CAAW,mBAAmB,IAAM,EAAA;AACpC,QAAA,UAAA,CAAW,cAAiB,GAAA,IAAA,CAAA;AAC5B,QAAA,UAAA,CAAW,eAAe,MAAM;AAC5B,UAAA,UAAA,CAAW,cAAiB,GAAA,KAAA,CAAA;AAC5B,UAAI,IAAA,UAAA,CAAW,mBAAmB,CAAG,EAAA;AACjC,YAAA,UAAA,CAAW,gBAAgB,KAAM,EAAA,CAAA;AACjC,YAAQ,OAAA,EAAA,CAAA;AAAA,WACZ;AAAA,SACH,CAAA,CAAA;AAAA,OACL;AACA,MAAW,UAAA,CAAA,cAAA,EAAA,CAAA;AAAA,KACf,CAAA;AACA,IAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,WAAW,CAAA,CAAA;AAC5C,IAAI,IAAA;AACA,MAAM,MAAA,UAAA,GAAa,KAAM,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACrC,MAAA,IAAI,CAAC,UAAY,EAAA;AACb,QAAM,MAAA,wBAAA,GAA2B,IAAI,eAAgB,EAAA,CAAA;AACrD,QAAA,MAAM,kBAAqB,GAAA,gBAAA,CAAiB,wBAAyB,CAAA,MAAA,EAAQ,GAAG,IAAI,CAAA,CAAA;AACpF,QAAA,MAAM,aAAuC,GAAA;AAAA,UACzC,eAAiB,EAAA,wBAAA;AAAA,UACjB,QAAU,EAAA,kBAAA;AAAA,UACV,cAAgB,EAAA,KAAA;AAAA,UAChB,cAAgB,EAAA,CAAA;AAAA,SACpB,CAAA;AACA,QAAM,KAAA,CAAA,GAAA,CAAI,UAAU,aAAa,CAAA,CAAA;AACjC,QAAA,MAAM,cAAc,MAAM,kBAAA,CAAA;AAC1B,QAAA,uBAAA,CAAwB,aAAa,OAAO,CAAA,CAAA;AAC5C,QAAA,aAAA,CAAc,QAAW,GAAA,WAAA,CAAA;AACzB,QAAO,OAAA,WAAA,CAAA;AAAA,OACJ,MAAA;AACH,QAAW,UAAA,CAAA,cAAA,EAAA,CAAA;AACX,QAAA,MAAM,4BAA4B,UAAW,CAAA,QAAA,CAAA;AAC7C,QAAA,MAAM,cACF,GAAA,MAAA,IAAU,yBAA4B,GAAA,MAAM,yBAA4B,GAAA,yBAAA,CAAA;AAC5E,QAAM,MAAA,UAAA,CAAW,cAAgB,EAAA,GAAG,IAAI,CAAA,CAAA;AACxC,QAAO,OAAA,cAAA,CAAA;AAAA,OACX;AAAA,aACK,CAAG,EAAA;AACR,MAAQ,OAAA,EAAA,CAAA;AACR,MAAM,MAAA,CAAA,CAAA;AAAA,KACV;AAAA,GACJ,CAAA;AACJ,CAAA;;;AC/FA,IAAI,oBAAA,CAAA;AACJ,SAAS,wBAA2B,GAAA;AAGhC,EAAO,OAAA,MAAA;AAAA,IACH,OAAA,CAAA,GAAA,CAAA,QAAA,KAAyB,eACnB,8GAEA,GAAA,KAAA,CAAA;AAAA,GACV,CAAA;AACJ,CAAA;AAEA,SAASC,wBAAAA,CAAwB,UAAkC,SAA6B,EAAA;AAC5F,EAAA,CAAC,YAAY;AACT,IAAI,IAAA;AAEA,MAAA,WAAA,MAAiB,KAAK,QAAS,EAAA,CAAA;AAAA,KAC3B,CAAA,MAAA;AAAA,KAEN,SAAA;AAEE,MAAU,SAAA,EAAA,CAAA;AAAA,KACd;AAAA,GACD,GAAA,CAAA;AACP,CAAA;AAEO,SAAS,6CAAwE,CAAA;AAAA,EACpF,mBAAA;AAAA,EACA,gBAAA;AACJ,CAAiF,EAAA;AAC7E,EAAM,MAAA,KAAA,uBAAY,GAAuD,EAAA,CAAA;AACzE,EAAO,OAAA,IAAI,MAAM,gBAAkB,EAAA;AAAA,IAC/B,cAAiB,GAAA;AACb,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,cAAiB,GAAA;AACb,MAAO,OAAA,KAAA,CAAA;AAAA,KACX;AAAA,IACA,GAAA,CAAI,MAAQ,EAAA,CAAA,EAAG,QAAU,EAAA;AACrB,MAAA,MAAM,kBAAqB,GAAA,OAAA,CAAQ,GAAI,CAAA,MAAA,EAAQ,GAAG,QAAQ,CAAA,CAAA;AAC1D,MAAI,IAAA,OAAO,uBAAuB,UAAY,EAAA;AAC1C,QAAO,OAAA,kBAAA,CAAA;AAAA,OACX;AACA,MAAA,OAAO,YAAa,SAAsB,EAAA;AACtC,QAAM,MAAA,gBAAA,GAAmB,mBAAoB,CAAA,CAAA,EAAG,SAAS,CAAA,CAAA;AACzD,QAAA,IAAI,qBAAqB,KAAW,CAAA,EAAA;AAChC,UAAQ,OAAA,kBAAA,CAAwC,GAAG,SAAS,CAAA,CAAA;AAAA,SAChE;AACA,QAAI,IAAA,KAAA,CAAM,GAAI,CAAA,gBAAgB,CAAG,EAAA;AAC7B,UAAO,OAAA,KAAA,CAAM,IAAI,gBAAgB,CAAA,CAAA;AAAA,SACrC;AACA,QAAA,MAAM,kBAAkB,iCAGtB,CAAA;AAAA,UACE,2BAA6B,EAAA,CAAC,EAAE,WAAA,EAAkB,KAAA,WAAA;AAAA,UAClD,0BAA0B,MAAM,gBAAA;AAAA,UAChC,MAAM,UAAW,CAAA,SAAA,EAAW,OAAS,EAAA;AAAA,WAMrC;AAAA,UACA,MAAM,gBAAiB,CAAA,WAAA,EAAa,MAAQ,EAAA;AACxC,YAAA,MAAMC,oBAAuB,GAAA,kBAAA;AAAA,cACzB,GAAG,SAAA;AAAA,aACP,CAAA;AACA,YAAM,MAAA,QAAA,GAAW,MAAMA,oBAAAA,CAAoB,SAAU,CAAA;AAAA,cACjD,GAAG,MAAA;AAAA,cACH,WAAA;AAAA,aACH,CAAA,CAAA;AACD,YAAAD,wBAAAA,CAAwB,UAAU,MAAM;AACpC,cAAA,KAAA,CAAM,OAAO,gBAAgB,CAAA,CAAA;AAAA,aAChC,CAAA,CAAA;AACD,YAAO,OAAA,QAAA,CAAA;AAAA,WACX;AAAA,SACH,CAAA,CAAA;AACD,QAAA,MAAM,mBAA+D,GAAA;AAAA,UACjE,MAAM,aAAa,IAAM,EAAA;AACrB,YAAA,MAAM,QAAW,GAAA,MAAM,eAAgB,CAAA,GAAG,IAAI,CAAA,CAAA;AAC9C,YAAA,MAAM,EAAE,WAAA,EAAgB,GAAA,IAAA,CAAK,CAAC,CAAA,CAAA;AAC9B,YAAI,IAAA,YAAA,CAAA;AACJ,YAAO,OAAA;AAAA,cACH,GAAG,QAAA;AAAA,cACH,QAAQ,MAAO,CAAA,aAAa,CAAI,GAAA;AAC5B,gBAAA,YAAA,KAAiB,WAAY,CAAA,OAAA,GACvB,OAAQ,CAAA,MAAA,CAAQ,oBAAyB,KAAA,wBAAA,EAA2B,CAAA,GACpE,IAAI,OAAA,CAAe,CAAC,CAAA,EAAG,MAAW,KAAA;AAC9B,kBAAY,WAAA,CAAA,gBAAA,CAAiB,SAAS,MAAM;AACxC,oBAAQ,MAAA,CAAA,oBAAA,KAAyB,0BAA2B,CAAA,CAAA;AAAA,mBAC/D,CAAA,CAAA;AAAA,iBACJ,CAAA,CAAA;AACP,gBAAI,IAAA;AACA,kBAAA,MAAM,QAAW,GAAA,QAAA,CAAS,MAAO,CAAA,aAAa,CAAE,EAAA,CAAA;AAChD,kBAAA,OAAO,IAAM,EAAA;AACT,oBAAM,MAAA,cAAA,GAAiB,MAAM,OAAQ,CAAA,IAAA,CAAK,CAAC,QAAS,CAAA,IAAA,EAAQ,EAAA,YAAY,CAAC,CAAA,CAAA;AACzE,oBAAA,IAAI,eAAe,IAAM,EAAA;AACrB,sBAAA,OAAA;AAAA,qBACG,MAAA;AACH,sBAAA,MAAM,cAAe,CAAA,KAAA,CAAA;AAAA,qBACzB;AAAA,mBACJ;AAAA,yBACK,CAAG,EAAA;AACR,kBAAI,IAAA,CAAA,MAAO,oBAAyB,KAAA,wBAAA,EAA6B,CAAA,EAAA;AAC7D,oBAAA,OAAA;AAAA,mBACJ;AACA,kBAAA,KAAA,CAAM,OAAO,gBAAgB,CAAA,CAAA;AAC7B,kBAAM,MAAA,CAAA,CAAA;AAAA,iBACV;AAAA,eACJ;AAAA,aACJ,CAAA;AAAA,WACJ;AAAA,SACJ,CAAA;AACA,QAAM,KAAA,CAAA,GAAA,CAAI,kBAAkB,mBAAmB,CAAA,CAAA;AAC/C,QAAO,OAAA,mBAAA,CAAA;AAAA,OACX,CAAA;AAAA,KACJ;AAAA,GACH,CAAA,CAAA;AACL,CAAA;;;AC3HA,IAAM,YAAe,GAAA;AAAA,EACjB,OAAS,EAAA,KAAA;AAAA,EACT,MAAQ,EAAA,MAAA;AACZ,CAAA,CAAA;AAEO,SAAS,iCAAgF,CAAA;AAAA,EAC5F,UAAA;AAAA,EACA,SAAA;AACJ,CAAmC,EAAA;AAC/B,EAAM,MAAA,mBAAA,uBAA0B,GAG9B,EAAA,CAAA;AACF,EAAA,OAAQ,UAAU,IAAS,KAAA;AACvB,IAAA,MAAM,UAAa,GAAA,MAAM,SAAU,CAAA,GAAG,IAAI,CAAA,CAAA;AAC1C,IAAI,IAAA,UAAA,CAAA;AACJ,IAAA,SAAS,QAAW,GAAA;AAChB,MAAA,UAAA,CAAW,qCAAqC,YAAY,CAAA,CAAA;AAAA,KAChE;AACA,IAAA,SAAS,gBAAmB,GAAA;AACxB,MAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AACxB,MAAa,UAAA,GAAA,WAAA,CAAY,UAAU,UAAU,CAAA,CAAA;AAAA,KACjD;AACA,IAAA,IAAI,mBAAoB,CAAA,GAAA,CAAI,UAAU,CAAA,KAAM,KAAO,EAAA;AAC/C,MAAA,mBAAA,CAAoB,IAAI,UAAY,EAAA;AAAA,QAChC,CAAC,OAAO,aAAa,GAAG,WAAW,MAAO,CAAA,aAAa,CAAE,CAAA,IAAA,CAAK,UAAU,CAAA;AAAA,QACxE,oCAAA,EAAsC,IAC/BE,KACF,KAAA;AACD,UAAiB,gBAAA,EAAA,CAAA;AACjB,UAAO,OAAA,UAAA,CAAW,oCAAqC,CAAA,GAAGA,KAAI,CAAA,CAAA;AAAA,SAClE;AAAA,OACH,CAAA,CAAA;AACD,MAAA,CAAC,YAAY;AACT,QAAI,IAAA;AAEA,UAAA,WAAA,MAAiB,KAAK,UAAY,EAAA;AAC9B,YAAiB,gBAAA,EAAA,CAAA;AAAA,WACrB;AAAA,SACI,CAAA,MAAA;AAAA,SAEN,SAAA;AACE,UAAA,mBAAA,CAAoB,OAAO,UAAU,CAAA,CAAA;AACrC,UAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AACxB,UAAA,IAAI,aAAe,EAAA;AACf,YAAW,UAAA,CAAA,MAAA,CAAO,mBAAoB,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAAA,WAClE;AACA,UAAA,IAAI,YAAc,EAAA;AACd,YAAW,UAAA,CAAA,MAAA,CAAO,mBAAoB,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,WAChE;AAAA,SACJ;AAAA,OACD,GAAA,CAAA;AACH,MAAoB,IAAA,UAAA,CAAW,UAAU,MAAQ,EAAA;AAC7C,QAAiB,gBAAA,EAAA,CAAA;AAAA,OACrB;AACA,MAAI,IAAA,aAAA,CAAA;AACJ,MAAI,IAAA,YAAA,CAAA;AACJ,MAAiB;AACb,QAAA,aAAA,GAAgB,MAAM;AAClB,UAAA,aAAA,CAAc,UAAU,CAAA,CAAA;AAAA,SAC5B,CAAA;AACA,QAAA,YAAA,GAAe,MAAM;AACjB,UAAS,QAAA,EAAA,CAAA;AACT,UAAiB,gBAAA,EAAA,CAAA;AAAA,SACrB,CAAA;AACA,QAAW,UAAA,CAAA,MAAA,CAAO,gBAAiB,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAC3D,QAAW,UAAA,CAAA,MAAA,CAAO,gBAAiB,CAAA,QAAA,EAAU,YAAY,CAAA,CAAA;AAAA,OAC7D;AAAA,KACJ;AACA,IAAO,OAAA,mBAAA,CAAoB,IAAI,UAAU,CAAA,CAAA;AAAA,GAC7C,CAAA;AACJ,CAAA;;;AChEA,IAAI,oBAAA,CAAA;AACJ,SAAS,uBAA0B,GAAA;AAG/B,EAAA,OAAO,MAAO,CAAA,OAAA,CAAA,GAAA,CAAA,QAAA,KAAyB,YAAe,GAAA,gEAAA,GAAmE,KAAS,CAAA,CAAA,CAAA;AACtI,CAAA;AAEO,SAAS,2CAA0F,CAAA;AAAA,EACtG,QAAA;AAAA,EACA,SAAA;AACJ,CAAmC,EAAA;AAC/B,EAAA,OAAO,iCAAkC,CAAA;AAAA,IACrC,2BAA6B,EAAA,CAAC,EAAE,MAAA,EAAa,KAAA,MAAA;AAAA,IAC7C,wBAAA,EAA0B,CAAC,EAAE,OAAQ,EAAA,KACjC,WAAW,QAAS,CAAA,OAAO,CAAK,GAAA,oBAAA,KAAyB,uBAAwB,EAAA;AAAA,IACrF,UAAA,EAAY,CAAC,UAAY,EAAA,EAAE,SAAc,KAAA,UAAA,CAAW,qCAAqC,OAAO,CAAA;AAAA,IAChG,gBAAkB,EAAA,CAAC,WAAa,EAAA,MAAA,KAC5B,SAAU,CAAA;AAAA,MACN,GAAG,MAAA;AAAA,MACH,MAAQ,EAAA,WAAA;AAAA,KACX,CAAA;AAAA,GACR,CAAA,CAAA;AACL,CAAA;;;AChBO,SAAS,uCACZ,MACoD,EAAA;AACpD,EAAA,MAAM,EAAE,QAAA,EAAU,UAAY,EAAA,GAAG,MAAS,GAAA,MAAA,CAAA;AAC1C,EAAO,OAAAC,eAAA;AAAA,IACHC,2DAAyB,CAAA;AAAA,MACrB,GAAG,IAAA;AAAA,MACH,yBACI,MAAO,CAAA,uBAAA;AAAA,MAEP,MAAA;AAAA,KACP,CAAA;AAAA,IACD,eACI,iCAAkC,CAAA;AAAA,MAC9B,YAAY,UAAc,IAAA,GAAA;AAAA,MAC1B,SAAA;AAAA,KACH,CAAA;AAAA,IACL,eACI,2CAA4C,CAAA;AAAA,MACxC,QAAA;AAAA,MACA,SAAA;AAAA,KACH,CAAA;AAAA,GACT,CAAA;AACJ,CAAA;;;ACxBO,SAAS,4BAAA,CAGd,YAAyB,MAA2E,EAAA;AAClG,EAAA,MAAM,YAAY,sCAAuC,CAAA,EAAE,KAAK,UAAY,EAAA,GAAG,QAAQ,CAAA,CAAA;AACvF,EAAA,OAAO,0CAAkE,SAAS,CAAA,CAAA;AACtF,CAAA;AAEO,SAAS,qCAAA,CACZ,YACA,MACF,EAAA;AACE,EAAO,OAAA,4BAAA;AAAA,IACH,UAAA;AAAA,IACA,MAAA;AAAA,GACJ,CAAA;AACJ,CAAA;AAEO,SAAS,0CAGd,SAAuB,EAAA;AACrB,EAAOD,OAAAA,eAAAA;AAAA,IACHE,0CAAsB,CAAA;AAAA,MAClB,GAAA,EAAKC,oDAAsC,gCAAgC,CAAA;AAAA,MAC3E,SAAA;AAAA,KACH,CAAA;AAAA,IACD,sBACI,6CAA8C,CAAA;AAAA,MAC1C,mBAAqB,EAAA,CAAA,GAAI,IAAS,KAAAC,oCAAA,CAAoB,IAAI,CAAA;AAAA,MAC1D,gBAAA;AAAA,KACH,CAAA;AAAA,GACT,CAAA;AACJ,CAAA;AAEO,SAAS,mDACZ,SACF,EAAA;AACE,EAAA,OAAO,0CAGL,SAAS,CAAA,CAAA;AACf","file":"index.browser.cjs","sourcesContent":["import { safeCaptureStackTrace, SOLANA_ERROR__RPC__INTEGER_OVERFLOW, SolanaError } from '@solana/errors';\nimport type { KeyPath } from '@solana/rpc-transformers';\n\nexport function createSolanaJsonRpcIntegerOverflowError(\n methodName: string,\n keyPath: KeyPath,\n value: bigint,\n): SolanaError<typeof SOLANA_ERROR__RPC__INTEGER_OVERFLOW> {\n let argumentLabel = '';\n if (typeof keyPath[0] === 'number') {\n const argPosition = keyPath[0] + 1;\n const lastDigit = argPosition % 10;\n const lastTwoDigits = argPosition % 100;\n if (lastDigit == 1 && lastTwoDigits != 11) {\n argumentLabel = argPosition + 'st';\n } else if (lastDigit == 2 && lastTwoDigits != 12) {\n argumentLabel = argPosition + 'nd';\n } else if (lastDigit == 3 && lastTwoDigits != 13) {\n argumentLabel = argPosition + 'rd';\n } else {\n argumentLabel = argPosition + 'th';\n }\n } else {\n argumentLabel = `\\`${keyPath[0].toString()}\\``;\n }\n const path =\n keyPath.length > 1\n ? keyPath\n .slice(1)\n .map(pathPart => (typeof pathPart === 'number' ? `[${pathPart}]` : pathPart))\n .join('.')\n : undefined;\n const error = new SolanaError(SOLANA_ERROR__RPC__INTEGER_OVERFLOW, {\n argumentLabel,\n keyPath: keyPath as readonly (number | string | symbol)[],\n methodName,\n optionalPathLabel: path ? ` at path \\`${path}\\`` : '',\n value,\n ...(path !== undefined ? { path } : undefined),\n });\n safeCaptureStackTrace(error, createSolanaJsonRpcIntegerOverflowError);\n return error;\n}\n","import type { createSolanaRpcSubscriptionsApi } from '@solana/rpc-subscriptions-api';\n\nimport { createSolanaJsonRpcIntegerOverflowError } from './rpc-integer-overflow-error';\n\nexport const DEFAULT_RPC_SUBSCRIPTIONS_CONFIG: Partial<\n NonNullable<Parameters<typeof createSolanaRpcSubscriptionsApi>[0]>\n> = {\n defaultCommitment: 'confirmed',\n onIntegerOverflow(methodName, keyPath, value) {\n throw createSolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);\n },\n};\n","import {\n SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING,\n SolanaError,\n} from '@solana/errors';\n\ntype CacheEntry<TIterable extends AsyncIterable<unknown>> = {\n abortController: AbortController;\n iterable: Promise<TIterable> | TIterable;\n purgeScheduled: boolean;\n referenceCount: number;\n};\ntype CacheKey = string | symbol;\ntype Config<TInput extends unknown[], TIterable extends AsyncIterable<unknown>> = Readonly<{\n getAbortSignalFromInputArgs: (...args: TInput) => AbortSignal;\n getCacheKeyFromInputArgs: (...args: TInput) =>\n | CacheKey\n // `undefined` implies 'do not cache'\n | undefined;\n onCacheHit: (iterable: TIterable, ...args: TInput) => Promise<void>;\n onCreateIterable: (abortSignal: AbortSignal, ...args: TInput) => Promise<TIterable>;\n}>;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nexport function getCachedAbortableIterableFactory<TInput extends unknown[], TIterable extends AsyncIterable<unknown>>({\n getAbortSignalFromInputArgs,\n getCacheKeyFromInputArgs,\n onCacheHit,\n onCreateIterable,\n}: Config<TInput, TIterable>): (...args: TInput) => Promise<TIterable> {\n const cache = new Map<CacheKey, CacheEntry<TIterable>>();\n function getCacheEntryOrThrow(cacheKey: CacheKey) {\n const currentCacheEntry = cache.get(cacheKey);\n if (!currentCacheEntry) {\n throw new SolanaError(SOLANA_ERROR__INVARIANT_VIOLATION__CACHED_ABORTABLE_ITERABLE_CACHE_ENTRY_MISSING, {\n cacheKey: cacheKey.toString(),\n });\n }\n return currentCacheEntry;\n }\n return async (...args: TInput) => {\n const cacheKey = getCacheKeyFromInputArgs(...args);\n const signal = getAbortSignalFromInputArgs(...args);\n if (cacheKey === undefined) {\n return await onCreateIterable(signal, ...args);\n }\n const cleanup = () => {\n cache.delete(cacheKey);\n signal.removeEventListener('abort', handleAbort);\n };\n const handleAbort = () => {\n const cacheEntry = getCacheEntryOrThrow(cacheKey);\n if (cacheEntry.purgeScheduled !== true) {\n cacheEntry.purgeScheduled = true;\n globalThis.queueMicrotask(() => {\n cacheEntry.purgeScheduled = false;\n if (cacheEntry.referenceCount === 0) {\n cacheEntry.abortController.abort();\n cleanup();\n }\n });\n }\n cacheEntry.referenceCount--;\n };\n signal.addEventListener('abort', handleAbort);\n try {\n const cacheEntry = cache.get(cacheKey);\n if (!cacheEntry) {\n const singletonAbortController = new AbortController();\n const newIterablePromise = onCreateIterable(singletonAbortController.signal, ...args);\n const newCacheEntry: CacheEntry<TIterable> = {\n abortController: singletonAbortController,\n iterable: newIterablePromise,\n purgeScheduled: false,\n referenceCount: 1,\n };\n cache.set(cacheKey, newCacheEntry);\n const newIterable = await newIterablePromise;\n registerIterableCleanup(newIterable, cleanup);\n newCacheEntry.iterable = newIterable;\n return newIterable;\n } else {\n cacheEntry.referenceCount++;\n const iterableOrIterablePromise = cacheEntry.iterable;\n const cachedIterable =\n 'then' in iterableOrIterablePromise ? await iterableOrIterablePromise : iterableOrIterablePromise;\n await onCacheHit(cachedIterable, ...args);\n return cachedIterable;\n }\n } catch (e) {\n cleanup();\n throw e;\n }\n };\n}\n","import { PendingRpcSubscriptionsRequest, RpcSubscriptions } from '@solana/rpc-subscriptions-spec';\n\nimport { getCachedAbortableIterableFactory } from './cached-abortable-iterable';\n\ntype CacheKey = string | undefined;\ntype Config<TRpcSubscriptionsMethods> = Readonly<{\n getDeduplicationKey: GetDeduplicationKeyFn;\n rpcSubscriptions: RpcSubscriptions<TRpcSubscriptionsMethods>;\n}>;\ntype GetDeduplicationKeyFn = (subscriptionMethod: string | symbol, payload: unknown) => CacheKey;\n\nlet EXPLICIT_ABORT_TOKEN: symbol;\nfunction createExplicitAbortToken() {\n // This function is an annoying workaround to prevent `process.env.NODE_ENV` from appearing at\n // the top level of this module and thwarting an optimizing compiler's attempt to tree-shake.\n return Symbol(\n process.env.NODE_ENV !== \"production\"\n ? \"This symbol is thrown from a subscription's iterator when the subscription is \" +\n 'explicitly aborted by the user'\n : undefined,\n );\n}\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nexport function getRpcSubscriptionsWithSubscriptionCoalescing<TRpcSubscriptionsMethods>({\n getDeduplicationKey,\n rpcSubscriptions,\n}: Config<TRpcSubscriptionsMethods>): RpcSubscriptions<TRpcSubscriptionsMethods> {\n const cache = new Map<CacheKey, PendingRpcSubscriptionsRequest<unknown>>();\n return new Proxy(rpcSubscriptions, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n const subscriptionMethod = Reflect.get(target, p, receiver);\n if (typeof subscriptionMethod !== 'function') {\n return subscriptionMethod;\n }\n return function (...rawParams: unknown[]) {\n const deduplicationKey = getDeduplicationKey(p, rawParams);\n if (deduplicationKey === undefined) {\n return (subscriptionMethod as CallableFunction)(...rawParams);\n }\n if (cache.has(deduplicationKey)) {\n return cache.get(deduplicationKey)!;\n }\n const iterableFactory = getCachedAbortableIterableFactory<\n Parameters<PendingRpcSubscriptionsRequest<unknown>['subscribe']>,\n AsyncIterable<unknown>\n >({\n getAbortSignalFromInputArgs: ({ abortSignal }) => abortSignal,\n getCacheKeyFromInputArgs: () => deduplicationKey,\n async onCacheHit(_iterable, _config) {\n /**\n * This transport's goal is to prevent duplicate subscriptions from\n * being made. If a cached iterable] is found, do not send the subscribe\n * message again.\n */\n },\n async onCreateIterable(abortSignal, config) {\n const pendingSubscription = (subscriptionMethod as CallableFunction)(\n ...rawParams,\n ) as PendingRpcSubscriptionsRequest<unknown>;\n const iterable = await pendingSubscription.subscribe({\n ...config,\n abortSignal,\n });\n registerIterableCleanup(iterable, () => {\n cache.delete(deduplicationKey);\n });\n return iterable;\n },\n });\n const pendingSubscription: PendingRpcSubscriptionsRequest<unknown> = {\n async subscribe(...args) {\n const iterable = await iterableFactory(...args);\n const { abortSignal } = args[0];\n let abortPromise;\n return {\n ...iterable,\n async *[Symbol.asyncIterator]() {\n abortPromise ||= abortSignal.aborted\n ? Promise.reject((EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken()))\n : new Promise<never>((_, reject) => {\n abortSignal.addEventListener('abort', () => {\n reject((EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken()));\n });\n });\n try {\n const iterator = iterable[Symbol.asyncIterator]();\n while (true) {\n const iteratorResult = await Promise.race([iterator.next(), abortPromise]);\n if (iteratorResult.done) {\n return;\n } else {\n yield iteratorResult.value;\n }\n }\n } catch (e) {\n if (e === (EXPLICIT_ABORT_TOKEN ||= createExplicitAbortToken())) {\n return;\n }\n cache.delete(deduplicationKey);\n throw e;\n }\n },\n };\n },\n };\n cache.set(deduplicationKey, pendingSubscription);\n return pendingSubscription;\n };\n },\n });\n}\n","import type { RpcSubscriptionsTransport } from '@solana/rpc-subscriptions-spec';\n\ntype Config<TTransport extends RpcSubscriptionsTransport> = Readonly<{\n intervalMs: number;\n transport: TTransport;\n}>;\n\nconst PING_PAYLOAD = {\n jsonrpc: '2.0',\n method: 'ping',\n} as const;\n\nexport function getWebSocketTransportWithAutoping<TTransport extends RpcSubscriptionsTransport>({\n intervalMs,\n transport,\n}: Config<TTransport>): TTransport {\n const pingableConnections = new Map<\n Awaited<ReturnType<RpcSubscriptionsTransport>>,\n Awaited<ReturnType<RpcSubscriptionsTransport>>\n >();\n return (async (...args) => {\n const connection = await transport(...args);\n let intervalId: ReturnType<typeof setInterval> | undefined;\n function sendPing() {\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(PING_PAYLOAD);\n }\n function restartPingTimer() {\n clearInterval(intervalId);\n intervalId = setInterval(sendPing, intervalMs);\n }\n if (pingableConnections.has(connection) === false) {\n pingableConnections.set(connection, {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: (\n ...args: Parameters<typeof connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED>\n ) => {\n restartPingTimer();\n return connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(...args);\n },\n });\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of connection) {\n restartPingTimer();\n }\n } catch {\n /* empty */\n } finally {\n pingableConnections.delete(connection);\n clearInterval(intervalId);\n if (handleOffline) {\n globalThis.window.removeEventListener('offline', handleOffline);\n }\n if (handleOnline) {\n globalThis.window.removeEventListener('online', handleOnline);\n }\n }\n })();\n if (!__BROWSER__ || globalThis.navigator.onLine) {\n restartPingTimer();\n }\n let handleOffline;\n let handleOnline;\n if (__BROWSER__) {\n handleOffline = () => {\n clearInterval(intervalId);\n };\n handleOnline = () => {\n sendPing();\n restartPingTimer();\n };\n globalThis.window.addEventListener('offline', handleOffline);\n globalThis.window.addEventListener('online', handleOnline);\n }\n }\n return pingableConnections.get(connection)!;\n }) as TTransport;\n}\n","import type { RpcSubscriptionsTransport } from '@solana/rpc-subscriptions-spec';\n\nimport { getCachedAbortableIterableFactory } from './cached-abortable-iterable';\n\ntype Config<TTransport extends RpcSubscriptionsTransport> = Readonly<{\n /**\n * You might like to open more subscriptions per connection than your RPC provider allows for.\n * Using the initial payload as input, return a shard key from this method to assign\n * subscriptions to separate connections. One socket will be opened per shard key.\n */\n getShard?: (payload: unknown) => string | symbol;\n transport: TTransport;\n}>;\n\nlet NULL_SHARD_CACHE_KEY: symbol;\nfunction createNullShardCacheKey() {\n // This function is an annoying workaround to prevent `process.env.NODE_ENV` from appearing at\n // the top level of this module and thwarting an optimizing compiler's attempt to tree-shake.\n return Symbol(process.env.NODE_ENV !== \"production\" ? 'Cache key to use when there is no connection sharding strategy' : undefined);\n}\n\nexport function getWebSocketTransportWithConnectionSharding<TTransport extends RpcSubscriptionsTransport>({\n getShard,\n transport,\n}: Config<TTransport>): TTransport {\n return getCachedAbortableIterableFactory({\n getAbortSignalFromInputArgs: ({ signal }) => signal,\n getCacheKeyFromInputArgs: ({ payload }) =>\n getShard ? getShard(payload) : (NULL_SHARD_CACHE_KEY ||= createNullShardCacheKey()),\n onCacheHit: (connection, { payload }) => connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload),\n onCreateIterable: (abortSignal, config) =>\n transport({\n ...config,\n signal: abortSignal,\n }),\n }) as TTransport;\n}\n","import { pipe } from '@solana/functional';\nimport { createWebSocketTransport } from '@solana/rpc-subscriptions-transport-websocket';\nimport type { ClusterUrl } from '@solana/rpc-types';\n\nimport { getWebSocketTransportWithAutoping } from './rpc-subscriptions-autopinger';\nimport { RpcSubscriptionsTransportFromClusterUrl } from './rpc-subscriptions-clusters';\nimport { getWebSocketTransportWithConnectionSharding } from './rpc-subscriptions-connection-sharding';\n\nexport type DefaultRpcSubscriptionsTransportConfig<TClusterUrl extends ClusterUrl> = Readonly<{\n /**\n * You might like to open more subscriptions per connection than your RPC provider allows\n * for. Using the initial payload as input, return a shard key from this method to assign\n * subscriptions to separate connections. One socket will be opened per shard key.\n */\n getShard?: (payload: unknown) => string;\n intervalMs?: number;\n sendBufferHighWatermark?: number;\n url: TClusterUrl;\n}>;\n\nexport function createDefaultRpcSubscriptionsTransport<TClusterUrl extends ClusterUrl>(\n config: DefaultRpcSubscriptionsTransportConfig<TClusterUrl>,\n): RpcSubscriptionsTransportFromClusterUrl<TClusterUrl> {\n const { getShard, intervalMs, ...rest } = config;\n return pipe(\n createWebSocketTransport({\n ...rest,\n sendBufferHighWatermark:\n config.sendBufferHighWatermark ??\n // Let 128KB of data into the WebSocket buffer before buffering it in the app.\n 131_072,\n }) as RpcSubscriptionsTransportFromClusterUrl<TClusterUrl>,\n transport =>\n getWebSocketTransportWithAutoping({\n intervalMs: intervalMs ?? 5_000,\n transport,\n }),\n transport =>\n getWebSocketTransportWithConnectionSharding({\n getShard,\n transport,\n }),\n );\n}\n","import fastStableStringify from '@solana/fast-stable-stringify';\nimport { pipe } from '@solana/functional';\nimport type { SolanaRpcSubscriptionsApi, SolanaRpcSubscriptionsApiUnstable } from '@solana/rpc-subscriptions-api';\nimport { createSolanaRpcSubscriptionsApi } from '@solana/rpc-subscriptions-api';\nimport {\n createSubscriptionRpc,\n RpcSubscriptionsApiMethods,\n type RpcSubscriptionsTransport,\n} from '@solana/rpc-subscriptions-spec';\nimport { ClusterUrl } from '@solana/rpc-types';\n\nimport { DEFAULT_RPC_SUBSCRIPTIONS_CONFIG } from './rpc-default-config';\nimport type { RpcSubscriptionsFromTransport } from './rpc-subscriptions-clusters';\nimport { getRpcSubscriptionsWithSubscriptionCoalescing } from './rpc-subscriptions-coalescer';\nimport {\n createDefaultRpcSubscriptionsTransport,\n DefaultRpcSubscriptionsTransportConfig,\n} from './rpc-subscriptions-transport';\n\nexport function createSolanaRpcSubscriptions<\n TClusterUrl extends ClusterUrl,\n TApi extends RpcSubscriptionsApiMethods = SolanaRpcSubscriptionsApi,\n>(clusterUrl: TClusterUrl, config?: Omit<DefaultRpcSubscriptionsTransportConfig<TClusterUrl>, 'url'>) {\n const transport = createDefaultRpcSubscriptionsTransport({ url: clusterUrl, ...config });\n return createSolanaRpcSubscriptionsFromTransport<typeof transport, TApi>(transport);\n}\n\nexport function createSolanaRpcSubscriptions_UNSTABLE<TClusterUrl extends ClusterUrl>(\n clusterUrl: TClusterUrl,\n config?: Omit<DefaultRpcSubscriptionsTransportConfig<TClusterUrl>, 'url'>,\n) {\n return createSolanaRpcSubscriptions<TClusterUrl, SolanaRpcSubscriptionsApi & SolanaRpcSubscriptionsApiUnstable>(\n clusterUrl,\n config,\n );\n}\n\nexport function createSolanaRpcSubscriptionsFromTransport<\n TTransport extends RpcSubscriptionsTransport,\n TApi extends RpcSubscriptionsApiMethods = SolanaRpcSubscriptionsApi,\n>(transport: TTransport) {\n return pipe(\n createSubscriptionRpc({\n api: createSolanaRpcSubscriptionsApi<TApi>(DEFAULT_RPC_SUBSCRIPTIONS_CONFIG),\n transport,\n }),\n rpcSubscriptions =>\n getRpcSubscriptionsWithSubscriptionCoalescing({\n getDeduplicationKey: (...args) => fastStableStringify(args),\n rpcSubscriptions,\n }),\n ) as RpcSubscriptionsFromTransport<TApi, TTransport>;\n}\n\nexport function createSolanaRpcSubscriptionsFromTransport_UNSTABLE<TTransport extends RpcSubscriptionsTransport>(\n transport: TTransport,\n) {\n return createSolanaRpcSubscriptionsFromTransport<\n TTransport,\n SolanaRpcSubscriptionsApi & SolanaRpcSubscriptionsApiUnstable\n >(transport);\n}\n"]}