@solana/web3.js 2.0.0-experimental.d6c5c0e → 2.0.0-experimental.da22638
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 +14 -13
- package/dist/index.browser.cjs +297 -9
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +277 -11
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +2567 -195
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +264 -11
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +288 -9
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +266 -11
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +38 -4
- package/dist/types/cached-abortable-iterable.d.ts +11 -0
- package/dist/types/cached-abortable-iterable.d.ts.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/rpc-default-config.d.ts.map +1 -1
- package/dist/types/rpc-request-coalescer.d.ts +5 -0
- package/dist/types/rpc-request-coalescer.d.ts.map +1 -0
- package/dist/types/rpc-request-deduplication.d.ts +3 -0
- package/dist/types/rpc-request-deduplication.d.ts.map +1 -0
- package/dist/types/rpc-transport.d.ts.map +1 -1
- package/dist/types/rpc-websocket-autopinger.d.ts +8 -0
- package/dist/types/rpc-websocket-autopinger.d.ts.map +1 -0
- package/dist/types/rpc-websocket-connection-sharding.d.ts +13 -0
- package/dist/types/rpc-websocket-connection-sharding.d.ts.map +1 -0
- package/dist/types/rpc-websocket-transport.d.ts +13 -0
- package/dist/types/rpc-websocket-transport.d.ts.map +1 -0
- package/dist/types/rpc.d.ts +4 -3
- package/dist/types/rpc.d.ts.map +1 -1
- package/package.json +23 -21
package/dist/index.node.js
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
+
export * from '@solana/addresses';
|
|
2
|
+
export * from '@solana/instructions';
|
|
1
3
|
export * from '@solana/keys';
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
+
export * from '@solana/transactions';
|
|
5
|
+
import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/rpc-core';
|
|
6
|
+
import { createJsonRpc, createJsonSubscriptionRpc, createHttpTransport, createWebSocketTransport } from '@solana/rpc-transport';
|
|
7
|
+
import { pipe } from '@solana/functional';
|
|
8
|
+
import fastStableStringify from 'fast-stable-stringify';
|
|
4
9
|
|
|
5
|
-
//
|
|
10
|
+
// ../build-scripts/env-shim.ts
|
|
11
|
+
var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
|
|
6
12
|
|
|
7
13
|
// src/rpc-integer-overflow-error.ts
|
|
8
14
|
var SolanaJsonRpcIntegerOverflowError = class extends Error {
|
|
@@ -39,12 +45,83 @@ var DEFAULT_RPC_CONFIG = {
|
|
|
39
45
|
throw new SolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);
|
|
40
46
|
}
|
|
41
47
|
};
|
|
48
|
+
|
|
49
|
+
// src/rpc.ts
|
|
42
50
|
function createSolanaRpc(config) {
|
|
43
51
|
return createJsonRpc({
|
|
44
52
|
...config,
|
|
45
53
|
api: createSolanaRpcApi(DEFAULT_RPC_CONFIG)
|
|
46
54
|
});
|
|
47
55
|
}
|
|
56
|
+
function createSolanaRpcSubscriptions(config) {
|
|
57
|
+
return createJsonSubscriptionRpc({
|
|
58
|
+
...config,
|
|
59
|
+
api: createSolanaRpcSubscriptionsApi(DEFAULT_RPC_CONFIG)
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// src/rpc-request-coalescer.ts
|
|
64
|
+
function getRpcTransportWithRequestCoalescing(transport, getDeduplicationKey) {
|
|
65
|
+
let coalescedRequestsByDeduplicationKey;
|
|
66
|
+
return async function makeCoalescedHttpRequest(config) {
|
|
67
|
+
const { payload, signal } = config;
|
|
68
|
+
const deduplicationKey = getDeduplicationKey(payload);
|
|
69
|
+
if (deduplicationKey === void 0) {
|
|
70
|
+
return await transport(config);
|
|
71
|
+
}
|
|
72
|
+
if (!coalescedRequestsByDeduplicationKey) {
|
|
73
|
+
Promise.resolve().then(() => {
|
|
74
|
+
coalescedRequestsByDeduplicationKey = void 0;
|
|
75
|
+
});
|
|
76
|
+
coalescedRequestsByDeduplicationKey = {};
|
|
77
|
+
}
|
|
78
|
+
if (coalescedRequestsByDeduplicationKey[deduplicationKey] == null) {
|
|
79
|
+
const abortController = new AbortController();
|
|
80
|
+
coalescedRequestsByDeduplicationKey[deduplicationKey] = {
|
|
81
|
+
abortController,
|
|
82
|
+
numConsumers: 0,
|
|
83
|
+
responsePromise: transport({
|
|
84
|
+
...config,
|
|
85
|
+
signal: abortController.signal
|
|
86
|
+
})
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
const coalescedRequest = coalescedRequestsByDeduplicationKey[deduplicationKey];
|
|
90
|
+
coalescedRequest.numConsumers++;
|
|
91
|
+
if (signal) {
|
|
92
|
+
const responsePromise = coalescedRequest.responsePromise;
|
|
93
|
+
return await new Promise((resolve, reject) => {
|
|
94
|
+
const handleAbort = (e) => {
|
|
95
|
+
signal.removeEventListener("abort", handleAbort);
|
|
96
|
+
coalescedRequest.numConsumers -= 1;
|
|
97
|
+
if (coalescedRequest.numConsumers === 0) {
|
|
98
|
+
const abortController = coalescedRequest.abortController;
|
|
99
|
+
abortController.abort();
|
|
100
|
+
}
|
|
101
|
+
const abortError = new DOMException(e.target.reason, "AbortError");
|
|
102
|
+
reject(abortError);
|
|
103
|
+
};
|
|
104
|
+
signal.addEventListener("abort", handleAbort);
|
|
105
|
+
responsePromise.then(resolve).finally(() => {
|
|
106
|
+
signal.removeEventListener("abort", handleAbort);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
} else {
|
|
110
|
+
return await coalescedRequest.responsePromise;
|
|
111
|
+
}
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function isJsonRpcPayload(payload) {
|
|
115
|
+
if (payload == null || typeof payload !== "object" || Array.isArray(payload)) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
return "jsonrpc" in payload && payload.jsonrpc === "2.0" && "method" in payload && typeof payload.method === "string" && "params" in payload;
|
|
119
|
+
}
|
|
120
|
+
function getSolanaRpcPayloadDeduplicationKey(payload) {
|
|
121
|
+
return isJsonRpcPayload(payload) ? fastStableStringify([payload.method, payload.params]) : void 0;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// src/rpc-transport.ts
|
|
48
125
|
function normalizeHeaders(headers) {
|
|
49
126
|
const out = {};
|
|
50
127
|
for (const headerName in headers) {
|
|
@@ -53,16 +130,194 @@ function normalizeHeaders(headers) {
|
|
|
53
130
|
return out;
|
|
54
131
|
}
|
|
55
132
|
function createDefaultRpcTransport(config) {
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
133
|
+
return pipe(
|
|
134
|
+
createHttpTransport({
|
|
135
|
+
...config,
|
|
136
|
+
headers: {
|
|
137
|
+
...config.headers ? normalizeHeaders(config.headers) : void 0,
|
|
138
|
+
...{
|
|
139
|
+
// Keep these headers lowercase so they will override any user-supplied headers above.
|
|
140
|
+
"solana-client": `js/${"2.0.0-development"}` ?? "UNKNOWN"
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}),
|
|
144
|
+
(transport) => getRpcTransportWithRequestCoalescing(transport, getSolanaRpcPayloadDeduplicationKey)
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// src/rpc-websocket-autopinger.ts
|
|
149
|
+
var PING_PAYLOAD = {
|
|
150
|
+
jsonrpc: "2.0",
|
|
151
|
+
method: "ping"
|
|
152
|
+
};
|
|
153
|
+
function getWebSocketTransportWithAutoping({ intervalMs, transport }) {
|
|
154
|
+
const pingableConnections = /* @__PURE__ */ new Map();
|
|
155
|
+
return async (...args) => {
|
|
156
|
+
const connection = await transport(...args);
|
|
157
|
+
let intervalId;
|
|
158
|
+
function sendPing() {
|
|
159
|
+
connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(PING_PAYLOAD);
|
|
160
|
+
}
|
|
161
|
+
function restartPingTimer() {
|
|
162
|
+
clearInterval(intervalId);
|
|
163
|
+
intervalId = setInterval(sendPing, intervalMs);
|
|
164
|
+
}
|
|
165
|
+
if (pingableConnections.has(connection) === false) {
|
|
166
|
+
pingableConnections.set(connection, {
|
|
167
|
+
[Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),
|
|
168
|
+
send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: (...args2) => {
|
|
169
|
+
restartPingTimer();
|
|
170
|
+
return connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(...args2);
|
|
171
|
+
}
|
|
172
|
+
});
|
|
173
|
+
(async () => {
|
|
174
|
+
try {
|
|
175
|
+
for await (const _ of connection) {
|
|
176
|
+
restartPingTimer();
|
|
177
|
+
}
|
|
178
|
+
} catch {
|
|
179
|
+
} finally {
|
|
180
|
+
pingableConnections.delete(connection);
|
|
181
|
+
clearInterval(intervalId);
|
|
182
|
+
if (handleOffline) {
|
|
183
|
+
globalThis.window.removeEventListener("offline", handleOffline);
|
|
184
|
+
}
|
|
185
|
+
if (handleOnline) {
|
|
186
|
+
globalThis.window.removeEventListener("online", handleOnline);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
})();
|
|
190
|
+
{
|
|
191
|
+
restartPingTimer();
|
|
192
|
+
}
|
|
193
|
+
let handleOffline;
|
|
194
|
+
let handleOnline;
|
|
195
|
+
}
|
|
196
|
+
return pingableConnections.get(connection);
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// src/cached-abortable-iterable.ts
|
|
201
|
+
function registerIterableCleanup(iterable, cleanupFn) {
|
|
202
|
+
(async () => {
|
|
203
|
+
try {
|
|
204
|
+
for await (const _ of iterable)
|
|
205
|
+
;
|
|
206
|
+
} catch {
|
|
207
|
+
} finally {
|
|
208
|
+
cleanupFn();
|
|
209
|
+
}
|
|
210
|
+
})();
|
|
211
|
+
}
|
|
212
|
+
function getCachedAbortableIterableFactory({
|
|
213
|
+
getAbortSignalFromInputArgs,
|
|
214
|
+
getCacheEntryMissingError,
|
|
215
|
+
getCacheKeyFromInputArgs,
|
|
216
|
+
onCacheHit,
|
|
217
|
+
onCreateIterable
|
|
218
|
+
}) {
|
|
219
|
+
const cache = /* @__PURE__ */ new Map();
|
|
220
|
+
function getCacheEntryOrThrow(cacheKey) {
|
|
221
|
+
const currentCacheEntry = cache.get(cacheKey);
|
|
222
|
+
if (!currentCacheEntry) {
|
|
223
|
+
throw getCacheEntryMissingError(cacheKey);
|
|
224
|
+
}
|
|
225
|
+
return currentCacheEntry;
|
|
226
|
+
}
|
|
227
|
+
return async (...args) => {
|
|
228
|
+
const cacheKey = getCacheKeyFromInputArgs(...args);
|
|
229
|
+
const signal = getAbortSignalFromInputArgs(...args);
|
|
230
|
+
if (cacheKey === void 0) {
|
|
231
|
+
return await onCreateIterable(signal, ...args);
|
|
232
|
+
}
|
|
233
|
+
const cleanup = () => {
|
|
234
|
+
cache.delete(cacheKey);
|
|
235
|
+
signal.removeEventListener("abort", handleAbort);
|
|
236
|
+
};
|
|
237
|
+
const handleAbort = () => {
|
|
238
|
+
const cacheEntry = getCacheEntryOrThrow(cacheKey);
|
|
239
|
+
if (cacheEntry.purgeScheduled !== true) {
|
|
240
|
+
cacheEntry.purgeScheduled = true;
|
|
241
|
+
globalThis.queueMicrotask(() => {
|
|
242
|
+
cacheEntry.purgeScheduled = false;
|
|
243
|
+
if (cacheEntry.referenceCount === 0) {
|
|
244
|
+
cacheEntry.abortController.abort();
|
|
245
|
+
cleanup();
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
cacheEntry.referenceCount--;
|
|
250
|
+
};
|
|
251
|
+
signal.addEventListener("abort", handleAbort);
|
|
252
|
+
try {
|
|
253
|
+
const cacheEntry = cache.get(cacheKey);
|
|
254
|
+
if (!cacheEntry) {
|
|
255
|
+
const singletonAbortController = new AbortController();
|
|
256
|
+
const newIterablePromise = onCreateIterable(singletonAbortController.signal, ...args);
|
|
257
|
+
const newCacheEntry = {
|
|
258
|
+
abortController: singletonAbortController,
|
|
259
|
+
iterable: newIterablePromise,
|
|
260
|
+
purgeScheduled: false,
|
|
261
|
+
referenceCount: 1
|
|
262
|
+
};
|
|
263
|
+
cache.set(cacheKey, newCacheEntry);
|
|
264
|
+
const newIterable = await newIterablePromise;
|
|
265
|
+
registerIterableCleanup(newIterable, cleanup);
|
|
266
|
+
newCacheEntry.iterable = newIterable;
|
|
267
|
+
return newIterable;
|
|
268
|
+
} else {
|
|
269
|
+
cacheEntry.referenceCount++;
|
|
270
|
+
const iterableOrIterablePromise = cacheEntry.iterable;
|
|
271
|
+
const cachedIterable = "then" in iterableOrIterablePromise ? await iterableOrIterablePromise : iterableOrIterablePromise;
|
|
272
|
+
await onCacheHit(cachedIterable, ...args);
|
|
273
|
+
return cachedIterable;
|
|
63
274
|
}
|
|
275
|
+
} catch (e) {
|
|
276
|
+
cleanup();
|
|
277
|
+
throw e;
|
|
64
278
|
}
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
// src/rpc-websocket-connection-sharding.ts
|
|
283
|
+
var NULL_SHARD_CACHE_KEY = Symbol(
|
|
284
|
+
__DEV__ ? "Cache key to use when there is no connection sharding strategy" : void 0
|
|
285
|
+
);
|
|
286
|
+
function getWebSocketTransportWithConnectionSharding({ getShard, transport }) {
|
|
287
|
+
return getCachedAbortableIterableFactory({
|
|
288
|
+
getAbortSignalFromInputArgs: ({ signal }) => signal,
|
|
289
|
+
getCacheEntryMissingError(shardKey) {
|
|
290
|
+
return new Error(`Found no cache entry for connection with shard key \`${shardKey?.toString()}\``);
|
|
291
|
+
},
|
|
292
|
+
getCacheKeyFromInputArgs: ({ payload }) => getShard ? getShard(payload) : NULL_SHARD_CACHE_KEY,
|
|
293
|
+
onCacheHit: (connection, { payload }) => connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload),
|
|
294
|
+
onCreateIterable: (abortSignal, config) => transport({
|
|
295
|
+
...config,
|
|
296
|
+
signal: abortSignal
|
|
297
|
+
})
|
|
65
298
|
});
|
|
66
299
|
}
|
|
67
300
|
|
|
68
|
-
|
|
301
|
+
// src/rpc-websocket-transport.ts
|
|
302
|
+
function createDefaultRpcSubscriptionsTransport(config) {
|
|
303
|
+
const { getShard, intervalMs, ...rest } = config;
|
|
304
|
+
return pipe(
|
|
305
|
+
createWebSocketTransport({
|
|
306
|
+
...rest,
|
|
307
|
+
sendBufferHighWatermark: config.sendBufferHighWatermark ?? // Let 128KB of data into the WebSocket buffer before buffering it in the app.
|
|
308
|
+
131072
|
|
309
|
+
}),
|
|
310
|
+
(transport) => getWebSocketTransportWithAutoping({
|
|
311
|
+
intervalMs: intervalMs ?? 5e3,
|
|
312
|
+
transport
|
|
313
|
+
}),
|
|
314
|
+
(transport) => getWebSocketTransportWithConnectionSharding({
|
|
315
|
+
getShard,
|
|
316
|
+
transport
|
|
317
|
+
})
|
|
318
|
+
);
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
export { createDefaultRpcSubscriptionsTransport, createDefaultRpcTransport, createSolanaRpc, createSolanaRpcSubscriptions };
|
|
322
|
+
//# sourceMappingURL=out.js.map
|
|
323
|
+
//# sourceMappingURL=index.node.js.map
|
package/dist/index.node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/rpc.ts","../src/rpc-integer-overflow-error.ts","../src/rpc-default-config.ts","../src/rpc-transport.ts"],"names":[],"mappings":";AAAA,cAAc;;;ACAd,SAA2B,0BAA0B;;;ACA9C,IAAM,oCAAN,cAAgD,MAAM;AAAA,EAIzD,YAAY,YAAoB,SAA8B,OAAe;AACzE,UAAM,eAAe,OAAO,QAAQ,CAAC,MAAM,WAAW,QAAQ,CAAC,IAAI,SAAS,QAAQ,CAAC,GAAG,EAAE,KAAK;AAC/F,QAAI,UAAU;AACd,UAAM,YAAY,cAAc;AAChC,UAAM,gBAAgB,cAAc;AACpC,QAAI,aAAa,KAAK,iBAAiB,IAAI;AACvC,gBAAU,cAAc;AAAA,IAC5B,WAAW,aAAa,KAAK,iBAAiB,IAAI;AAC9C,gBAAU,cAAc;AAAA,IAC5B,WAAW,aAAa,KAAK,iBAAiB,IAAI;AAC9C,gBAAU,cAAc;AAAA,IAC5B,OAAO;AACH,gBAAU,cAAc;AAAA,IAC5B;AACA,UAAM,OACF,QAAQ,SAAS,IACX,QACK,MAAM,CAAC,EACP,IAAI,cAAa,OAAO,aAAa,WAAW,IAAI,cAAc,QAAS,EAC3E,KAAK,GAAG,IACb;AACV;AAAA,MACI,OAAO,6BAA6B,0BAC7B,OAAO,cAAc,WAAW,YAAY;AAAA,IAGvD;AACA,SAAK,UAAU;AACf,SAAK,aAAa;AAClB,SAAK,QAAQ;AAAA,EACjB;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AACJ;;;ACnCO,IAAM,qBAAwE;AAAA,EACjF,kBAAkB,YAAY,SAAS,OAAO;AAC1C,UAAM,IAAI,kCAAkC,YAAY,SAAS,KAAK;AAAA,EAC1E;AACJ;;;AFJA,SAAS,qBAAqB;AAGvB,SAAS,gBAAgB,QAAiF;AAC7G,SAAO,cAAgC;AAAA,IACnC,GAAG;AAAA,IACH,KAAK,mBAAmB,kBAAkB;AAAA,EAC9C,CAAC;AACL;;;AGXA,SAAS,2BAA2B;AAMpC,SAAS,iBACL,SACiD;AACjD,QAAM,MAA8B,CAAC;AACrC,aAAW,cAAc,SAAS;AAC9B,QAAI,WAAW,YAAY,CAAC,IAAI,QAAQ,UAAU;AAAA,EACtD;AACA,SAAO;AACX;AAEO,SAAS,0BAA0B,QAAkE;AACxG,SAAO,oBAAoB;AAAA,IACvB,GAAG;AAAA,IACH,SAAS;AAAA,MACL,GAAI,OAAO,UAAU,iBAAiB,OAAO,OAAO,IAAI;AAAA,MACxD,GAAI;AAAA;AAAA,QAEA,iBAAiB,MAAM,yBAAiB;AAAA,MAC5C;AAAA,IACJ;AAAA,EACJ,CAAC;AACL","sourcesContent":["export * from '@solana/keys';\nexport * from './rpc';\nexport * from './rpc-transport';\n","import { SolanaRpcMethods, createSolanaRpcApi } from '@solana/rpc-core';\nimport { DEFAULT_RPC_CONFIG } from './rpc-default-config';\n\nimport { createJsonRpc } from '@solana/rpc-transport';\nimport type { Rpc } from '@solana/rpc-transport/dist/types/json-rpc-types';\n\nexport function createSolanaRpc(config: Omit<Parameters<typeof createJsonRpc>[0], 'api'>): Rpc<SolanaRpcMethods> {\n return createJsonRpc<SolanaRpcMethods>({\n ...config,\n api: createSolanaRpcApi(DEFAULT_RPC_CONFIG),\n });\n}\n","export class SolanaJsonRpcIntegerOverflowError extends Error {\n readonly methodName: string;\n readonly keyPath: (number | string)[];\n readonly value: bigint;\n constructor(methodName: string, keyPath: (number | string)[], value: bigint) {\n const argPosition = (typeof keyPath[0] === 'number' ? keyPath[0] : parseInt(keyPath[0], 10)) + 1;\n let ordinal = '';\n const lastDigit = argPosition % 10;\n const lastTwoDigits = argPosition % 100;\n if (lastDigit == 1 && lastTwoDigits != 11) {\n ordinal = argPosition + 'st';\n } else if (lastDigit == 2 && lastTwoDigits != 12) {\n ordinal = argPosition + 'nd';\n } else if (lastDigit == 3 && lastTwoDigits != 13) {\n ordinal = argPosition + 'rd';\n } else {\n ordinal = argPosition + 'th';\n }\n const path =\n keyPath.length > 1\n ? keyPath\n .slice(1)\n .map(pathPart => (typeof pathPart === 'number' ? `[${pathPart}]` : pathPart))\n .join('.')\n : null;\n super(\n `The ${ordinal} argument to the \\`${methodName}\\` RPC method` +\n `${path ? ` at path \\`${path}\\`` : ''} was \\`${value}\\`. This number is ` +\n 'unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`.'\n );\n this.keyPath = keyPath;\n this.methodName = methodName;\n this.value = value;\n }\n get name() {\n return 'SolanaJsonRpcIntegerOverflowError';\n }\n}\n","import { createSolanaRpcApi } from '@solana/rpc-core';\nimport { SolanaJsonRpcIntegerOverflowError } from './rpc-integer-overflow-error';\n\nexport const DEFAULT_RPC_CONFIG: Partial<Parameters<typeof createSolanaRpcApi>[0]> = {\n onIntegerOverflow(methodName, keyPath, value) {\n throw new SolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);\n },\n};\n","import { createHttpTransport } from '@solana/rpc-transport';\nimport { IRpcTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers.\n */\nfunction normalizeHeaders<T extends Record<string, string>>(\n headers: T\n): { [K in keyof T & string as Lowercase<K>]: T[K] } {\n const out: Record<string, string> = {};\n for (const headerName in headers) {\n out[headerName.toLowerCase()] = headers[headerName];\n }\n return out as { [K in keyof T & string as Lowercase<K>]: T[K] };\n}\n\nexport function createDefaultRpcTransport(config: Parameters<typeof createHttpTransport>[0]): IRpcTransport {\n return createHttpTransport({\n ...config,\n headers: {\n ...(config.headers ? normalizeHeaders(config.headers) : undefined),\n ...({\n // Keep these headers lowercase so they will override any user-supplied headers above.\n 'solana-client': `js/${__VERSION__}` ?? 'UNKNOWN',\n } as { [overrideHeader: string]: string }),\n },\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/index.ts","../src/rpc.ts","../src/rpc-integer-overflow-error.ts","../src/rpc-default-config.ts","../src/rpc-transport.ts","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts","../src/rpc-websocket-transport.ts","../src/rpc-websocket-autopinger.ts","../src/cached-abortable-iterable.ts","../src/rpc-websocket-connection-sharding.ts"],"names":["pipe","args"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","export * from '@solana/addresses';\nexport * from '@solana/instructions';\nexport * from '@solana/keys';\nexport * from '@solana/transactions';\nexport * from './rpc';\nexport * from './rpc-transport';\nexport * from './rpc-websocket-transport';\n","import {\n createSolanaRpcApi,\n createSolanaRpcSubscriptionsApi,\n SolanaRpcMethods,\n SolanaRpcSubscriptions,\n} from '@solana/rpc-core';\nimport { createJsonRpc, createJsonSubscriptionRpc } from '@solana/rpc-transport';\nimport type { Rpc, RpcSubscriptions } from '@solana/rpc-transport/dist/types/json-rpc-types';\n\nimport { DEFAULT_RPC_CONFIG } from './rpc-default-config';\n\nexport function createSolanaRpc(config: Omit<Parameters<typeof createJsonRpc>[0], 'api'>): Rpc<SolanaRpcMethods> {\n return createJsonRpc({\n ...config,\n api: createSolanaRpcApi(DEFAULT_RPC_CONFIG),\n });\n}\n\nexport function createSolanaRpcSubscriptions(\n config: Omit<Parameters<typeof createJsonSubscriptionRpc>[0], 'api'>\n): RpcSubscriptions<SolanaRpcSubscriptions> {\n return createJsonSubscriptionRpc({\n ...config,\n api: createSolanaRpcSubscriptionsApi(DEFAULT_RPC_CONFIG),\n });\n}\n","export class SolanaJsonRpcIntegerOverflowError extends Error {\n readonly methodName: string;\n readonly keyPath: (number | string)[];\n readonly value: bigint;\n constructor(methodName: string, keyPath: (number | string)[], value: bigint) {\n const argPosition = (typeof keyPath[0] === 'number' ? keyPath[0] : parseInt(keyPath[0], 10)) + 1;\n let ordinal = '';\n const lastDigit = argPosition % 10;\n const lastTwoDigits = argPosition % 100;\n if (lastDigit == 1 && lastTwoDigits != 11) {\n ordinal = argPosition + 'st';\n } else if (lastDigit == 2 && lastTwoDigits != 12) {\n ordinal = argPosition + 'nd';\n } else if (lastDigit == 3 && lastTwoDigits != 13) {\n ordinal = argPosition + 'rd';\n } else {\n ordinal = argPosition + 'th';\n }\n const path =\n keyPath.length > 1\n ? keyPath\n .slice(1)\n .map(pathPart => (typeof pathPart === 'number' ? `[${pathPart}]` : pathPart))\n .join('.')\n : null;\n super(\n `The ${ordinal} argument to the \\`${methodName}\\` RPC method` +\n `${path ? ` at path \\`${path}\\`` : ''} was \\`${value}\\`. This number is ` +\n 'unsafe for use with the Solana JSON-RPC because it exceeds ' +\n '`Number.MAX_SAFE_INTEGER`.'\n );\n this.keyPath = keyPath;\n this.methodName = methodName;\n this.value = value;\n }\n get name() {\n return 'SolanaJsonRpcIntegerOverflowError';\n }\n}\n","import { createSolanaRpcApi } from '@solana/rpc-core';\n\nimport { SolanaJsonRpcIntegerOverflowError } from './rpc-integer-overflow-error';\n\nexport const DEFAULT_RPC_CONFIG: Partial<Parameters<typeof createSolanaRpcApi>[0]> = {\n onIntegerOverflow(methodName, keyPath, value) {\n throw new SolanaJsonRpcIntegerOverflowError(methodName, keyPath, value);\n },\n};\n","import { pipe } from '@solana/functional';\nimport { createHttpTransport } from '@solana/rpc-transport';\nimport { IRpcTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nimport { getRpcTransportWithRequestCoalescing } from './rpc-request-coalescer';\nimport { getSolanaRpcPayloadDeduplicationKey } from './rpc-request-deduplication';\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers.\n */\nfunction normalizeHeaders<T extends Record<string, string>>(\n headers: T\n): { [K in keyof T & string as Lowercase<K>]: T[K] } {\n const out: Record<string, string> = {};\n for (const headerName in headers) {\n out[headerName.toLowerCase()] = headers[headerName];\n }\n return out as { [K in keyof T & string as Lowercase<K>]: T[K] };\n}\n\nexport function createDefaultRpcTransport(config: Parameters<typeof createHttpTransport>[0]): IRpcTransport {\n return pipe(\n createHttpTransport({\n ...config,\n headers: {\n ...(config.headers ? normalizeHeaders(config.headers) : undefined),\n ...({\n // Keep these headers lowercase so they will override any user-supplied headers above.\n 'solana-client': `js/${__VERSION__}` ?? 'UNKNOWN',\n } as { [overrideHeader: string]: string }),\n },\n }),\n transport => getRpcTransportWithRequestCoalescing(transport, getSolanaRpcPayloadDeduplicationKey)\n );\n}\n","import { IRpcTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\ntype CoalescedRequest = {\n readonly abortController: AbortController;\n numConsumers: number;\n readonly responsePromise: Promise<unknown>;\n};\n\ntype GetDeduplicationKeyFn = (payload: unknown) => string | undefined;\n\nexport function getRpcTransportWithRequestCoalescing(\n transport: IRpcTransport,\n getDeduplicationKey: GetDeduplicationKeyFn\n): IRpcTransport {\n let coalescedRequestsByDeduplicationKey: Record<string, CoalescedRequest> | undefined;\n return async function makeCoalescedHttpRequest<TResponse>(\n config: Parameters<IRpcTransport>[0]\n ): Promise<TResponse> {\n const { payload, signal } = config;\n const deduplicationKey = getDeduplicationKey(payload);\n if (deduplicationKey === undefined) {\n return await transport(config);\n }\n if (!coalescedRequestsByDeduplicationKey) {\n Promise.resolve().then(() => {\n coalescedRequestsByDeduplicationKey = undefined;\n });\n coalescedRequestsByDeduplicationKey = {};\n }\n if (coalescedRequestsByDeduplicationKey[deduplicationKey] == null) {\n const abortController = new AbortController();\n coalescedRequestsByDeduplicationKey[deduplicationKey] = {\n abortController,\n numConsumers: 0,\n responsePromise: transport<TResponse>({\n ...config,\n signal: abortController.signal,\n }),\n };\n }\n const coalescedRequest = coalescedRequestsByDeduplicationKey[deduplicationKey];\n coalescedRequest.numConsumers++;\n if (signal) {\n const responsePromise = coalescedRequest.responsePromise as Promise<TResponse>;\n return await new Promise<TResponse>((resolve, reject) => {\n const handleAbort = (e: AbortSignalEventMap['abort']) => {\n signal.removeEventListener('abort', handleAbort);\n coalescedRequest.numConsumers -= 1;\n if (coalescedRequest.numConsumers === 0) {\n const abortController = coalescedRequest.abortController;\n abortController.abort();\n }\n const abortError = new DOMException((e.target as AbortSignal).reason, 'AbortError');\n reject(abortError);\n };\n signal.addEventListener('abort', handleAbort);\n responsePromise.then(resolve).finally(() => {\n signal.removeEventListener('abort', handleAbort);\n });\n });\n } else {\n return (await coalescedRequest.responsePromise) as TResponse;\n }\n };\n}\n","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport fastStableStringify from 'fast-stable-stringify';\n\nfunction isJsonRpcPayload(payload: unknown): payload is Readonly<{ method: string; params: unknown }> {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return false;\n }\n return (\n 'jsonrpc' in payload &&\n payload.jsonrpc === '2.0' &&\n 'method' in payload &&\n typeof payload.method === 'string' &&\n 'params' in payload\n );\n}\n\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n return isJsonRpcPayload(payload) ? fastStableStringify([payload.method, payload.params]) : undefined;\n}\n\nexport function getSolanaRpcSubscriptionPayloadDeduplicationKey(payload: unknown): string | undefined {\n return isJsonRpcPayload(payload) && payload.method.endsWith('Subscribe')\n ? fastStableStringify([payload.method, payload.params])\n : undefined;\n}\n","import { pipe } from '@solana/functional';\nimport { createWebSocketTransport } from '@solana/rpc-transport';\nimport { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nimport { getWebSocketTransportWithAutoping } from './rpc-websocket-autopinger';\nimport { getWebSocketTransportWithConnectionSharding } from './rpc-websocket-connection-sharding';\n\nexport function createDefaultRpcSubscriptionsTransport(\n config: Omit<Parameters<typeof createWebSocketTransport>[0], 'sendBufferHighWatermark'> & {\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 }\n): IRpcWebSocketTransport {\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 }),\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 { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\ntype Config = Readonly<{\n intervalMs: number;\n transport: IRpcWebSocketTransport;\n}>;\n\nconst PING_PAYLOAD = {\n jsonrpc: '2.0',\n method: 'ping',\n} as const;\n\nexport function getWebSocketTransportWithAutoping({ intervalMs, transport }: Config): IRpcWebSocketTransport {\n const pingableConnections = new Map<\n Awaited<ReturnType<IRpcWebSocketTransport>>,\n Awaited<ReturnType<IRpcWebSocketTransport>>\n >();\n return async (...args) => {\n const connection = await transport(...args);\n let intervalId: string | number | NodeJS.Timeout | 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 };\n}\n","type 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 getCacheEntryMissingError: (cacheKey: CacheKey) => Error;\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 getCacheEntryMissingError,\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 getCacheEntryMissingError(cacheKey);\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 { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nimport { getCachedAbortableIterableFactory } from './cached-abortable-iterable';\n\ntype Config = 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: IRpcWebSocketTransport;\n}>;\n\nconst NULL_SHARD_CACHE_KEY = Symbol(\n __DEV__ ? 'Cache key to use when there is no connection sharding strategy' : undefined\n);\n\nexport function getWebSocketTransportWithConnectionSharding({ getShard, transport }: Config): IRpcWebSocketTransport {\n return getCachedAbortableIterableFactory({\n getAbortSignalFromInputArgs: ({ signal }) => signal,\n getCacheEntryMissingError(shardKey) {\n // TODO: Coded error.\n return new Error(`Found no cache entry for connection with shard key \\`${shardKey?.toString()}\\``);\n },\n getCacheKeyFromInputArgs: ({ payload }) => (getShard ? getShard(payload) : NULL_SHARD_CACHE_KEY),\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 });\n}\n"]}
|
|
@@ -2,11 +2,45 @@ this.globalThis = this.globalThis || {};
|
|
|
2
2
|
this.globalThis.solanaWeb3 = (function (exports) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var bt=Object.create;var fe=Object.defineProperty;var ht=Object.getOwnPropertyDescriptor;var yt=Object.getOwnPropertyNames;var wt=Object.getPrototypeOf,St=Object.prototype.hasOwnProperty;var Et=(e,t,r)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var xt=(e,t)=>()=>(e&&(t=e(e=0)),t);var It=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var At=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of yt(t))!St.call(e,o)&&o!==r&&fe(e,o,{get:()=>t[o],enumerable:!(n=ht(t,o))||n.enumerable});return e};var Tt=(e,t,r)=>(r=e!=null?bt(wt(e)):{},At(t||!e||!e.__esModule?fe(r,"default",{value:e,enumerable:!0}):r,e));var A=(e,t,r)=>(Et(e,typeof t!="symbol"?t+"":t,r),r);var c=xt(()=>{});var ut=It((Ks,ct)=>{c();var kr=Object.prototype.toString,Or=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};function J(e,t){var r,n,o,s,i,a,u;if(e===!0)return "true";if(e===!1)return "false";switch(typeof e){case"object":if(e===null)return null;if(e.toJSON&&typeof e.toJSON=="function")return J(e.toJSON(),t);if(u=kr.call(e),u==="[object Array]"){for(o="[",n=e.length-1,r=0;r<n;r++)o+=J(e[r],!0)+",";return n>-1&&(o+=J(e[r],!0)),o+"]"}else if(u==="[object Object]"){for(s=Or(e).sort(),n=s.length,o="",r=0;r<n;)i=s[r],a=J(e[i],!1),a!==void 0&&(o&&(o+=","),o+=JSON.stringify(i)+":"+a),r++;return "{"+o+"}"}else return JSON.stringify(e);case"function":case"undefined":return t?null:void 0;case"string":return JSON.stringify(e);default:return isFinite(e)?e:null}}ct.exports=function(e){var t=J(e,!1);if(t!==void 0)return ""+t};});c();c();c();c();c();var v=e=>{let t=e.reduce((o,s)=>o+s.length,0),r=new Uint8Array(t),n=0;return e.forEach(o=>{r.set(o,n),n+=o.length;}),r},Te=(e,t)=>{if(e.length>=t)return e;let r=new Uint8Array(t).fill(0);return r.set(e),r},X=(e,t)=>Te(e.slice(0,t),t);c();var N=class extends Error{constructor(r){super(`Serializer [${r}] cannot deserialize empty buffers.`);A(this,"name","DeserializingEmptyBufferError");}},R=class extends Error{constructor(r,n,o){super(`Serializer [${r}] expected ${n} bytes, got ${o}.`);A(this,"name","NotEnoughBytesError");}},P=class extends Error{constructor(r){r??(r="Expected a fixed-size serializer, got a variable-size one.");super(r);A(this,"name","ExpectedFixedSizeSerializerError");}};c();function F(e,t,r){return {description:r??`fixed(${t}, ${e.description})`,fixedSize:t,maxSize:t,serialize:n=>X(e.serialize(n),t),deserialize:(n,o=0)=>{if(n=n.slice(o,o+t),n.length<t)throw new R("fixSerializer",t,n.length);e.fixedSize!==null&&(n=X(n,e.fixedSize));let[s]=e.deserialize(n,0);return [s,o+t]}}}c();function Z(e,t,r){return {description:e.description,fixedSize:e.fixedSize,maxSize:e.maxSize,serialize:n=>e.serialize(t(n)),deserialize:(n,o=0)=>{let[s,i]=e.deserialize(n,o);return r?[r(s,n,o),i]:[s,i]}}}c();c();c();var Q=class extends Error{constructor(r,n,o){let s=`Expected a string of base ${n}, got [${r}].`;super(s);A(this,"name","InvalidBaseStringError");this.cause=o;}};var Re=e=>{let t=e.length,r=BigInt(t);return {description:`base${t}`,fixedSize:null,maxSize:null,serialize(n){if(!n.match(new RegExp(`^[${e}]*$`)))throw new Q(n,t);if(n==="")return new Uint8Array;let o=[...n],s=o.findIndex(g=>g!==e[0]);s=s===-1?o.length:s;let i=Array(s).fill(0);if(s===o.length)return Uint8Array.from(i);let a=o.slice(s),u=0n,d=1n;for(let g=a.length-1;g>=0;g-=1)u+=d*BigInt(e.indexOf(a[g])),d*=r;let f=[];for(;u>0n;)f.unshift(Number(u%256n)),u/=256n;return Uint8Array.from(i.concat(f))},deserialize(n,o=0){if(n.length===0)return ["",0];let s=n.slice(o),i=s.findIndex(f=>f!==0);i=i===-1?s.length:i;let a=e[0].repeat(i);if(i===s.length)return [a,n.length];let u=s.slice(i).reduce((f,g)=>f*256n+BigInt(g),0n),d=[];for(;u>0n;)d.unshift(e[Number(u%r)]),u/=r;return [a+d.join(""),n.length]}}};c();var L=Re("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");c();var ze=e=>e.replace(/\u0000/g,"");c();var pe={description:"utf8",fixedSize:null,maxSize:null,serialize(e){return new TextEncoder().encode(e)},deserialize(e,t=0){let r=new TextDecoder().decode(e.slice(t));return [ze(r),e.length]}};c();c();var ee;(function(e){e.Little="le",e.Big="be";})(ee||(ee={}));c();var te=class extends RangeError{constructor(r,n,o,s){super(`Serializer [${r}] expected number to be between ${n} and ${o}, got ${s}.`);A(this,"name","NumberOutOfRangeError");}};c();function re(e){let t,r=e.name;return e.size>1&&(t=!("endian"in e.options)||e.options.endian===ee.Little,r+=t?"(le)":"(be)"),{description:e.options.description??r,fixedSize:e.size,maxSize:e.size,serialize(n){e.range&&me(e.name,e.range[0],e.range[1],n);let o=new ArrayBuffer(e.size);return e.set(new DataView(o),n,t),new Uint8Array(o)},deserialize(n,o=0){let s=n.slice(o,o+e.size);_t("i8",s,e.size);let i=zt(s);return [e.get(i,t),o+e.size]}}}var Rt=e=>e.buffer.slice(e.byteOffset,e.byteLength+e.byteOffset),zt=e=>new DataView(Rt(e)),me=(e,t,r,n)=>{if(n<t||n>r)throw new te(e,t,r,n)},_t=(e,t,r)=>{if(t.length===0)throw new N(e);if(t.length<r)throw new R(e,r,t.length)};c();var k=(e={})=>re({name:"u8",size:1,range:[0,+"0xff"],set:(t,r)=>t.setUint8(0,Number(r)),get:t=>t.getUint8(0),options:e});c();var K=(e={})=>re({name:"u32",size:4,range:[0,+"0xffffffff"],set:(t,r,n)=>t.setUint32(0,Number(r),n),get:(t,r)=>t.getUint32(0,r),options:e});c();var _=(e={})=>({description:e.description??"shortU16",fixedSize:null,maxSize:3,serialize:t=>{me("shortU16",0,65535,t);let r=[0];for(let n=0;;n+=1){let o=t>>n*7;if(o===0)break;let s=127&o;r[n]=s,n>0&&(r[n-1]|=128);}return new Uint8Array(r)},deserialize:(t,r=0)=>{let n=0,o=0;for(;++o;){let s=o-1,i=t[r+s],a=127&i;if(n|=a<<s*7,!(i&128))break}return [n,r+o]}});c();c();var ne=class extends Error{constructor(r,n,o){super(`Expected [${r}] to have ${n} items, got ${o}.`);A(this,"name","InvalidNumberOfItemsError");}},oe=class extends Error{constructor(r,n){super(`The remainder of the buffer (${r} bytes) cannot be split into chunks of ${n} bytes. Serializers of "remainder" size must have a remainder that is a multiple of its item size. In other words, ${r} modulo ${n} should be equal to zero.`);A(this,"name","InvalidArrayLikeRemainderSizeError");}},se=class extends Error{constructor(r){super(`Unrecognized array-like serializer size: ${JSON.stringify(r)}`);A(this,"name","UnrecognizedArrayLikeSerializerSizeError");}};c();c();function $(e){return e.reduce((t,r)=>t===null||r===null?null:t+r,0)}function _e(e,t,r,n){if(typeof e=="number")return [e,n];if(typeof e=="object")return e.deserialize(r,n);if(e==="remainder"){let o=$(t);if(o===null)throw new P('Serializers of "remainder" size must have fixed-size items.');let s=r.slice(n).length;if(s%o!==0)throw new oe(s,o);return [s/o,n]}throw new se(e)}function W(e){return typeof e=="object"?e.description:`${e}`}function ge(e,t){if(typeof e!="number")return null;if(e===0)return 0;let r=$(t);return r===null?null:r*e}function Ce(e,t){return typeof e=="object"?e.serialize(t):new Uint8Array}function O(e,t={}){let r=t.size??K();if(r==="remainder"&&e.fixedSize===null)throw new P('Serializers of "remainder" size must have fixed-size items.');return {description:t.description??`array(${e.description}; ${W(r)})`,fixedSize:ge(r,[e.fixedSize]),maxSize:ge(r,[e.maxSize]),serialize:n=>{if(typeof r=="number"&&n.length!==r)throw new ne("array",r,n.length);return v([Ce(r,n.length),...n.map(o=>e.serialize(o))])},deserialize:(n,o=0)=>{if(typeof r=="object"&&n.slice(o).length===0)return [[],o];let[s,i]=_e(r,[e.fixedSize],n,o);o=i;let a=[];for(let u=0;u<s;u+=1){let[d,f]=e.deserialize(n,o);a.push(d),o=f;}return [a,o]}}}c();function ie(e={}){let t=e.size??"variable",r=e.description??`bytes(${W(t)})`,n={description:r,fixedSize:null,maxSize:null,serialize:o=>new Uint8Array(o),deserialize:(o,s=0)=>{let i=o.slice(s);return [i,s+i.length]}};return t==="variable"?n:typeof t=="number"?F(n,t,r):{description:r,fixedSize:null,maxSize:null,serialize:o=>{let s=n.serialize(o),i=t.serialize(s.length);return v([i,s])},deserialize:(o,s=0)=>{if(o.slice(s).length===0)throw new N("bytes");let[i,a]=t.deserialize(o,s),u=Number(i);s=a;let d=o.slice(s,s+u);if(d.length<u)throw new R("bytes",u,d.length);let[f,g]=n.deserialize(d);return s+=g,[f,s]}}}c();function j(e={}){let t=e.size??K(),r=e.encoding??pe,n=e.description??`string(${r.description}; ${W(t)})`;return t==="variable"?{...r,description:n}:typeof t=="number"?F(r,t,n):{description:n,fixedSize:null,maxSize:null,serialize:o=>{let s=r.serialize(o),i=t.serialize(s.length);return v([i,s])},deserialize:(o,s=0)=>{if(o.slice(s).length===0)throw new N("string");let[i,a]=t.deserialize(o,s),u=Number(i);s=a;let d=o.slice(s,s+u);if(d.length<u)throw new R("string",u,d.length);let[f,g]=r.deserialize(d);return s+=g,[f,s]}}}c();function B(e,t={}){let r=e.map(([n,o])=>`${String(n)}: ${o.description}`).join(", ");return {description:t.description??`struct(${r})`,fixedSize:$(e.map(([,n])=>n.fixedSize)),maxSize:$(e.map(([,n])=>n.maxSize)),serialize:n=>{let o=e.map(([s,i])=>i.serialize(n[s]));return v(o)},deserialize:(n,o=0)=>{let s={};return e.forEach(([i,a])=>{let[u,d]=a.deserialize(n,o);o=d,s[i]=u;}),[s,o]}}}c();function H(){if(!globalThis.isSecureContext)throw new Error("Cryptographic operations are only allowed in secure browser contexts. Read more here: https://developer.mozilla.org/en-US/docs/Web/Security/Secure_Contexts")}var D;async function Ct(e){return D===void 0&&(D=new Promise(t=>{e.generateKey("Ed25519",!1,["sign","verify"]).catch(()=>{t(D=!1);}).then(()=>{t(D=!0);});})),typeof D=="boolean"?D:await D}async function ve(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.digest!="function")throw new Error("No digest implementation could be found")}async function Ne(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.generateKey!="function")throw new Error("No key generation implementation could be found");if(!await Ct(globalThis.crypto.subtle))throw new Error(`This runtime does not support the generation of Ed25519 key pairs.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
exports.createSolanaRpc = Ke;
|
|
7
|
+
Install and import \`@solana/webcrypto-ed25519-polyfill\` before generating keys in environments that do not support Ed25519.
|
|
8
|
+
|
|
9
|
+
For a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20`)}async function ke(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.exportKey!="function")throw new Error("No key export implementation could be found")}async function Oe(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.sign!="function")throw new Error("No signing implementation could be found")}async function Le(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.verify!="function")throw new Error("No signature verification implementation could be found")}function Do(e){return !(e.length<32||e.length>44||L.serialize(e).byteLength!==32)}function Nt(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let r=L.serialize(e).byteLength;if(r!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${r}`)}catch(t){throw new Error(`\`${e}\` is not a base-58 encoded address`,{cause:t})}}function $o(e){return Nt(e),e}function U(e){return j({description:e?.description??(""),encoding:L,size:32})}function ce(){return new Intl.Collator("en",{caseFirst:"lower",ignorePunctuation:!1,localeMatcher:"best fit",numeric:!1,sensitivity:"variant",usage:"sort"}).compare}var kt=37095705934669439343138083508754565189542113879843219016388785533085940283555n,I=57896044618658097711785492504343953926634992332820282019728792003956564819949n,Be=19681161376707505956807079304988542015446066515923890162744021073123829784752n;function T(e){let t=e%I;return t>=0n?t:I+t}function C(e,t){let r=e;for(;t-- >0n;)r*=r,r%=I;return r}function Ot(e){let r=e*e%I*e%I,n=C(r,2n)*r%I,o=C(n,1n)*e%I,s=C(o,5n)*o%I,i=C(s,10n)*s%I,a=C(i,20n)*i%I,u=C(a,40n)*a%I,d=C(u,80n)*u%I,f=C(d,80n)*u%I,g=C(f,10n)*s%I;return C(g,2n)*e%I}function Lt(e,t){let r=T(t*t*t),n=T(r*r*t),o=Ot(e*n),s=T(e*r*o),i=T(t*s*s),a=s,u=T(s*Be),d=i===e,f=i===T(-e),g=i===T(-e*Be);return d&&(s=a),(f||g)&&(s=u),(T(s)&1n)===1n&&(s=T(-s)),!d&&!f?null:s}function Bt(e,t){let r=T(e*e),n=T(r-1n),o=T(kt*r+1n),s=Lt(n,o);if(s===null)return !1;let i=(t&128)!==0;return !(s===0n&&i)}function Pt(e){let t=e.toString(16);return t.length===1?`0${t}`:t}function Dt(e){let r=`0x${e.reduce((n,o,s)=>`${Pt(s===31?o&-129:o)}${n}`,"")}`;return BigInt(r)}async function $t(e){if(e.byteLength!==32)return !1;let t=Dt(e);return Bt(t,e[31])}var De=32,Pe=16,ae=[80,114,111,103,114,97,109,68,101,114,105,118,101,100,65,100,100,114,101,115,115],$e=class extends Error{};async function Wt({programAddress:e,seeds:t}){if(await ve(),t.length>Pe)throw new Error(`A maximum of ${Pe} seeds may be supplied when creating an address`);let r,n=t.reduce((u,d,f)=>{let g=typeof d=="string"?(r||(r=new TextEncoder)).encode(d):d;if(g.byteLength>De)throw new Error(`The seed at index ${f} exceeds the maximum length of 32 bytes`);return u.push(...g),u},[]),o=U(),s=o.serialize(e),i=await crypto.subtle.digest("SHA-256",new Uint8Array([...n,...s,...ae])),a=new Uint8Array(i);if(await $t(a))throw new $e("Invalid seeds; point must fall off the Ed25519 curve");return o.deserialize(a)[0]}async function Wo({programAddress:e,seeds:t}){let r=255;for(;r>0;)try{return {bumpSeed:r,pda:await Wt({programAddress:e,seeds:[...t,new Uint8Array([r])]})}}catch(n){if(n instanceof $e)r--;else throw n}throw new Error("Unable to find a viable program address bump seed")}async function Uo({baseAddress:e,programAddress:t,seed:r}){let{serialize:n,deserialize:o}=U(),s=typeof r=="string"?new TextEncoder().encode(r):r;if(s.byteLength>De)throw new Error("The seed exceeds the maximum length of 32 bytes");let i=n(t);if(i.length>=ae.length&&i.slice(-ae.length).every((d,f)=>d===ae[f]))throw new Error("programAddress cannot end with the PDA marker");let a=await crypto.subtle.digest("SHA-256",new Uint8Array([...n(e),...s,...i])),u=new Uint8Array(a);return o(u)[0]}async function We(e){if(await ke(),e.type!=="public"||e.algorithm.name!=="Ed25519")throw new Error("The `CryptoKey` must be an `Ed25519` public key");let t=await crypto.subtle.exportKey("raw",e),[r]=U().deserialize(new Uint8Array(t));return r}c();var Ut=(e=>(e[e.WRITABLE_SIGNER=3]="WRITABLE_SIGNER",e[e.READONLY_SIGNER=2]="READONLY_SIGNER",e[e.WRITABLE=1]="WRITABLE",e[e.READONLY=0]="READONLY",e))(Ut||{}),Ue=2,be=1;function jo(e){return e&~Ue}function Ho(e){return e&~be}function Go(e){return e>=2}function Vo(e){return (e&be)!==0}function qo(e,t){return e|t}function Yo(e){return e|Ue}function Jo(e){return e|be}c();async function es(){return await Ne(),await crypto.subtle.generateKey("Ed25519",!1,["sign","verify"])}async function Me(e,t){await Oe();let r=await crypto.subtle.sign("Ed25519",e,t);return new Uint8Array(r)}async function ts(e,t,r){return await Le(),await crypto.subtle.verify("Ed25519",e,t,r)}c();function q(e){if("signatures"in e){let{signatures:t,...r}=e;return r}else return e}function as(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let r=L.serialize(e).byteLength;if(r!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${r}`)}catch(t){throw new Error(`\`${e}\` is not a blockhash`,{cause:t})}}function cs(e,t){if("lifetimeConstraint"in t&&t.lifetimeConstraint.blockhash===e.blockhash&&t.lifetimeConstraint.lastValidBlockHeight===e.lastValidBlockHeight)return t;let r={...q(t),lifetimeConstraint:e};return Object.freeze(r),r}function us({version:e}){let t={instructions:[],version:e};return Object.freeze(t),t}var z=(e=>(e[e.WRITABLE_SIGNER=3]="WRITABLE_SIGNER",e[e.READONLY_SIGNER=2]="READONLY_SIGNER",e[e.WRITABLE=1]="WRITABLE",e[e.READONLY=0]="READONLY",e))(z||{}),Mt=1;function G(e){return e>=2}function V(e){return (e&Mt)!==0}function Fe(e,t){return e|t}var He="SysvarRecentB1ockHashes11111111111111111111",Ge="11111111111111111111111111111111";function ls(e){if(!Ve(e))throw new Error("Transaction is not a durable nonce transaction")}function Ft(e,t){return {accounts:[{address:e,role:z.WRITABLE},{address:He,role:z.READONLY},{address:t,role:z.READONLY_SIGNER}],data:new Uint8Array([4,0,0,0]),programAddress:Ge}}function Kt(e){return e.programAddress===Ge&&e.data!=null&&jt(e.data)&&e.accounts?.length===3&&e.accounts[0].address!=null&&e.accounts[0].role===z.WRITABLE&&e.accounts[1].address===He&&e.accounts[1].role===z.READONLY&&e.accounts[2].address!=null&&e.accounts[2].role===z.READONLY_SIGNER}function jt(e){return e.byteLength===4&&e[0]===4&&e[1]===0&&e[2]===0&&e[3]===0}function Ve(e){return "lifetimeConstraint"in e&&typeof e.lifetimeConstraint.nonce=="string"&&e.instructions[0]!=null&&Kt(e.instructions[0])}function ds({nonce:e,nonceAccountAddress:t,nonceAuthorityAddress:r},n){let o=Ve(n);if(o&&n.lifetimeConstraint.nonce===e&&n.instructions[0].accounts[0].address===t&&n.instructions[0].accounts[2].address===r)return n;let s={...q(n),instructions:[Ft(t,r),...o?n.instructions.slice(1):n.instructions],lifetimeConstraint:{nonce:e}};return Object.freeze(s),s}function fs(e,t){if("feePayer"in t&&e===t.feePayer)return t;let r={...q(t),feePayer:e};return Object.freeze(r),r}function ps(e,t){let r={...q(t),instructions:[...t.instructions,e]};return Object.freeze(r),r}function ms(e,t){let r={...q(t),instructions:[e,...t.instructions]};return Object.freeze(r),r}function Ke(e,t,r){e[t]=r(e[t]??{role:z.READONLY});}var y=Symbol("AddressMapTypeProperty");function Ht(e,t){let r={[e]:{[y]:0,role:z.WRITABLE_SIGNER}},n=new Set;for(let o of t){Ke(r,o.programAddress,i=>{if(n.add(o.programAddress),y in i){if(V(i.role))switch(i[y]){case 0:throw new Error(`This transaction includes an address (\`${o.programAddress}\`) which is both invoked and set as the fee payer. Program addresses may not pay fees.`);default:throw new Error(`This transaction includes an address (\`${o.programAddress}\`) which is both invoked and marked writable. Program addresses may not be writable.`)}if(i[y]===2)return i}return {[y]:2,role:z.READONLY}});let s;if(o.accounts)for(let i of o.accounts)Ke(r,i.address,a=>{let{address:u,...d}=i;if(y in a)switch(a[y]){case 0:return a;case 1:{let f=Fe(a.role,d.role);if("lookupTableAddress"in d){if(a.lookupTableAddress!==d.lookupTableAddress&&(s||(s=ce()))(d.lookupTableAddress,a.lookupTableAddress)<0)return {[y]:1,...d,role:f}}else if(G(d.role))return {[y]:2,role:f};return a.role!==f?{...a,role:f}:a}case 2:{let f=Fe(a.role,d.role);if(n.has(i.address)){if(V(d.role))throw new Error(`This transaction includes an address (\`${i.address}\`) which is both invoked and marked writable. Program addresses may not be writable.`);return a.role!==f?{...a,role:f}:a}else return "lookupTableAddress"in d&&!G(a.role)?{...d,[y]:1,role:f}:a.role!==f?{...a,role:f}:a}}return "lookupTableAddress"in d?{...d,[y]:1}:{...d,[y]:2}});}return r}function Gt(e){let t;return Object.entries(e).sort(([n,o],[s,i])=>{if(o[y]!==i[y]){if(o[y]===0)return -1;if(i[y]===0)return 1;if(o[y]===2)return -1;if(i[y]===2)return 1}let a=G(o.role);if(a!==G(i.role))return a?-1:1;let u=V(o.role);return u!==V(i.role)?u?-1:1:(t||(t=ce()),o[y]===1&&i[y]===1&&o.lookupTableAddress!==i.lookupTableAddress?t(o.lookupTableAddress,i.lookupTableAddress):t(n,s))}).map(([n,o])=>({address:n,...o}))}function Vt(e){var t;let r={};for(let n of e){if(!("lookupTableAddress"in n))continue;let o=r[t=n.lookupTableAddress]||(r[t]={readableIndices:[],writableIndices:[]});n.role===z.WRITABLE?o.writableIndices.push(n.addressIndex):o.readableIndices.push(n.addressIndex);}return Object.keys(r).sort(ce()).map(n=>({lookupTableAddress:n,...r[n]}))}function qt(e){let t=0,r=0,n=0;for(let o of e){if("lookupTableAddress"in o)break;let s=V(o.role);G(o.role)?(n++,s||r++):s||t++;}return {numReadonlyNonSignerAccounts:t,numReadonlySignerAccounts:r,numSignerAccounts:n}}function Yt(e){let t={};for(let[r,n]of e.entries())t[n.address]=r;return t}function Jt(e,t){let r=Yt(t);return e.map(({accounts:n,data:o,programAddress:s})=>({programAddressIndex:r[s],...n?{accountIndices:n.map(({address:i})=>r[i])}:null,...o?{data:o}:null}))}function Xt(e){return "nonce"in e?e.nonce:e.blockhash}function Zt(e){let t=e.findIndex(n=>"lookupTableAddress"in n);return (t===-1?e:e.slice(0,t)).map(({address:n})=>n)}function qe(e){let t=Ht(e.feePayer,e.instructions),r=Gt(t);return {...e.version!=="legacy"?{addressTableLookups:Vt(r)}:null,header:qt(r),instructions:Jt(e.instructions,r),lifetimeToken:Xt(e.lifetimeConstraint),staticAccounts:Zt(r),version:e.version}}function Qt(){return B([["lookupTableAddress",U(void 0)],["writableIndices",O(k(),{...null,size:_()})],["readableIndices",O(k(),{...void 0,size:_()})]],void 0)}function er(){return B([["numSignerAccounts",k(void 0)],["numReadonlySignerAccounts",k(void 0)],["numReadonlyNonSignerAccounts",k(void 0)]],void 0)}function tr(){return Z(B([["programAddressIndex",k(void 0)],["accountIndices",O(k({description:""}),{description:"",size:_()})],["data",ie({description:"",size:_()})]]),e=>e.accountIndices!==void 0&&e.data!==void 0?e:{...e,accountIndices:e.accountIndices??[],data:e.data??new Uint8Array(0)},e=>{if(e.accountIndices.length&&e.data.byteLength)return e;let{accountIndices:t,data:r,...n}=e;return {...n,...t.length?{accountIndices:t}:null,...r.byteLength?{data:r}:null}})}function rr(e,t){let r=t+e[0].toUpperCase()+e.slice(1);return new Error(`No ${e} exists for ${t}. Use \`get${r}()\` if you need a ${e}, and \`get${t}Codec()\` if you need to both encode and decode ${t}`)}function Ye(e){return ()=>{throw rr("decoder",e)}}var he=128,nr={description:"",fixedSize:null,maxSize:1};function or(e,t=0){let r=e[t];return r&he?[r^he,t+1]:["legacy",t]}function sr(e){if(e==="legacy")return new Uint8Array;if(e<0||e>127)throw new Error(`Transaction version must be in the range [0, 127]. \`${e}\` given.`);return new Uint8Array([e|he])}function ir(){return {...nr,deserialize:or,serialize:sr}}var ar={description:"",fixedSize:null,maxSize:null};function cr(e){return e.version==="legacy"?B(je()).serialize(e):Z(B([...je(),["addressTableLookups",ur()]]),t=>t.version==="legacy"?t:{...t,addressTableLookups:t.addressTableLookups??[]}).serialize(e)}function je(){return [["version",ir()],["header",er()],["staticAccounts",O(U(),{description:"",size:_()})],["lifetimeToken",j({description:"",encoding:L,size:32})],["instructions",O(tr(),{description:"",size:_()})]]}function ur(){return O(Qt(),{...null,size:_()})}function Je(){return {...ar,deserialize:Ye("CompiledMessage"),serialize:cr}}async function lr(e,t){let r=Je().serialize(e);return await Me(t,r)}async function gs(e,t){let r=qe(t),n="signatures"in t?{...t.signatures}:{},o=await Promise.all(e.map(i=>Promise.all([We(i.publicKey),lr(r,i.privateKey)])));for(let[i,a]of o)n[i]=a;let s={...t,signatures:n};return Object.freeze(s),s}function dr(e){let t=qe(e),r;if("signatures"in e){r=[];for(let n=0;n<t.header.numSignerAccounts;n++)r[n]=e.signatures[t.staticAccounts[n]]??new Uint8Array(Array(64).fill(0));}else r=Array(t.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));return {compiledMessage:t,signatures:r}}var fr={description:"",fixedSize:null,maxSize:null};function pr(e){let t=dr(e);return B([["signatures",O(ie({size:64}),{...null,size:_()})],["compiledMessage",Je()]]).serialize(t)}function mr(){return {...fr,deserialize:Ye("CompiledMessage"),serialize:pr}}function bs(e){let t=mr().serialize(e);return btoa(String.fromCharCode(...t))}c();c();function Se(e,t,r){if(Array.isArray(e))return e.map((n,o)=>Se(n,[...t,o],r));if(typeof e=="object"&&e!==null){let n={};for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=Se(e[o],[...t,o],r));return n}else return typeof e=="bigint"?(r&&(e>Number.MAX_SAFE_INTEGER||e<-Number.MAX_SAFE_INTEGER)&&r(t,e),Number(e)):e}function Ze(e,t){return Se(e,[],t)}var l={},ye,we;function gr(){return ye||(ye={}),ye}function br(){if(!we){let e=[["data","parsed","info","tokenAmount","decimals"],["data","parsed","info","tokenAmount","uiAmount"],["data","parsed","info","rentExemptReserve","decimals"],["data","parsed","info","rentExemptReserve","uiAmount"],["data","parsed","info","delegatedAmount","decimals"],["data","parsed","info","delegatedAmount","uiAmount"],["data","parsed","info","extensions",l,"state","olderTransferFee","transferFeeBasisPoints"],["data","parsed","info","extensions",l,"state","newerTransferFee","transferFeeBasisPoints"],["data","parsed","info","extensions",l,"state","preUpdateAverageRate"],["data","parsed","info","extensions",l,"state","currentRate"]],t=[...e,["data","parsed","info","lastExtendedSlotStartIndex"],["data","parsed","info","slashPenalty"],["data","parsed","info","warmupCooldownRate"],["data","parsed","info","decimals"],["data","parsed","info","numRequiredSigners"],["data","parsed","info","numValidSigners"],["data","parsed","info","stake","delegation","warmupCooldownRate"],["data","parsed","info","exemptionThreshold"],["data","parsed","info","burnPercent"],["data","parsed","info","commission"],["data","parsed","info","votes",l,"confirmationCount"]];we={getAccountInfo:t.map(r=>["value",...r]),getBlock:[["blockTime"],["transactions",l,"meta","preTokenBalances",l,"accountIndex"],["transactions",l,"meta","preTokenBalances",l,"uiTokenAmount","decimals"],["transactions",l,"meta","postTokenBalances",l,"accountIndex"],["transactions",l,"meta","postTokenBalances",l,"uiTokenAmount","decimals"],["transactions",l,"meta","rewards",l,"commission"],["transactions",l,"meta","innerInstructions",l,"index"],["transactions",l,"meta","innerInstructions",l,"instructions",l,"programIdIndex"],["transactions",l,"meta","innerInstructions",l,"instructions",l,"accounts",l],["transactions",l,"transaction","message","addressTableLookups",l,"writableIndexes",l],["transactions",l,"transaction","message","addressTableLookups",l,"readonlyIndexes",l],["transactions",l,"transaction","message","instructions",l,"programIdIndex"],["transactions",l,"transaction","message","instructions",l,"accounts",l],["transactions",l,"transaction","message","header","numReadonlySignedAccounts"],["transactions",l,"transaction","message","header","numReadonlyUnsignedAccounts"],["transactions",l,"transaction","message","header","numRequiredSignatures"],["rewards",l,"commission"]],getBlockTime:[[]],getClusterNodes:[[l,"featureSet"],[l,"shredVersion"]],getInflationGovernor:[["initial"],["foundation"],["foundationTerm"],["taper"],["terminal"]],getInflationRate:[["foundation"],["total"],["validator"]],getInflationReward:[[l,"commission"]],getMultipleAccounts:t.map(r=>["value",l,...r]),getProgramAccounts:t.flatMap(r=>[["value",l,"account",...r],[l,"account",...r]]),getRecentPerformanceSamples:[[l,"samplePeriodSecs"]],getTokenAccountBalance:[["value","decimals"],["value","uiAmount"]],getTokenAccountsByDelegate:e.map(r=>["value",l,"account",...r]),getTokenAccountsByOwner:e.map(r=>["value",l,"account",...r]),getTokenLargestAccounts:[["value",l,"decimals"],["value",l,"uiAmount"]],getTokenSupply:[["value","decimals"],["value","uiAmount"]],getTransaction:[["meta","preTokenBalances",l,"accountIndex"],["meta","preTokenBalances",l,"uiTokenAmount","decimals"],["meta","postTokenBalances",l,"accountIndex"],["meta","postTokenBalances",l,"uiTokenAmount","decimals"],["meta","rewards",l,"commission"],["meta","innerInstructions",l,"index"],["meta","innerInstructions",l,"instructions",l,"programIdIndex"],["meta","innerInstructions",l,"instructions",l,"accounts",l],["transaction","message","addressTableLookups",l,"writableIndexes",l],["transaction","message","addressTableLookups",l,"readonlyIndexes",l],["transaction","message","instructions",l,"programIdIndex"],["transaction","message","instructions",l,"accounts",l],["transaction","message","header","numReadonlySignedAccounts"],["transaction","message","header","numReadonlyUnsignedAccounts"],["transaction","message","header","numRequiredSignatures"]],getVersion:[["feature-set"]],getVoteAccounts:[["current",l,"commission"],["delinquent",l,"commission"]],simulateTransaction:t.map(r=>["value","accounts",l,...r])};}return we}function Xe(e,t){return e.filter(r=>r[0]===l&&typeof t=="number"||r[0]===t).map(r=>r.slice(1))}function ue(e,t){if(Array.isArray(e))return e.map((r,n)=>{let o=Xe(t,n);return ue(r,o)});if(typeof e=="object"&&e!==null){let r={};for(let[n,o]of Object.entries(e)){let s=Xe(t,n);r[n]=ue(o,s);}return r}else return typeof e=="number"&&t.length===0&&Number.isInteger(e)?BigInt(e):e}function hr(e,t){let r=t?br()[t]:void 0;return ue(e,r??[])}function yr(e,t){let r=t?gr()[t]:void 0;return ue(e,r??[])}function Qe(e){return new Proxy({},{defineProperty(){return !1},deleteProperty(){return !1},get(...t){let[r,n]=t,o=n.toString();return function(...s){let i=e?.onIntegerOverflow,a=Ze(s,i?(u,d)=>i(o,u,d):void 0);return {methodName:o,params:a,responseProcessor:u=>hr(u,o)}}}})}function et(e){return new Proxy({},{defineProperty(){return !1},deleteProperty(){return !1},get(...t){let[r,n]=t,o=n.toString();return function(...s){let i=e?.onIntegerOverflow;return {params:Ze(s,i?(u,d)=>i(o,u,d):void 0),responseProcessor:u=>yr(u,o),subscribeMethodName:o.replace(/Notifications$/,"Subscribe"),unsubscribeMethodName:o.replace(/Notifications$/,"Unsubscribe")}}}})}c();var rt=class extends Error{constructor(e){super(`JSON-RPC 2.0 error (${e.code}): ${e.message}`),Error.captureStackTrace(this,this.constructor),this.code=e.code,this.data=e.data;}get name(){return "SolanaJsonRpcError"}},Ee=0;function wr(){let e=Ee;return Ee=(Ee+1)%Number.MAX_SAFE_INTEGER,e}function xe(e,t){return {id:wr(),jsonrpc:"2.0",method:e,params:t}}function Sr(e,t){return {async send(r){let{methodName:n,params:o,responseProcessor:s}=t,i=xe(n,o),a=await e.transport({payload:i,signal:r?.abortSignal});if("error"in a)throw new rt(a.error);return s?s(a.result):a.result}}}function Er(e){return new Proxy(e.api,{defineProperty(){return !1},deleteProperty(){return !1},get(t,r,n){return function(...o){let s=r.toString(),i=Reflect.get(t,s,n),a=i?i(...o):{methodName:s,params:o};return Sr(e,a)}}})}function nt(e){return Er(e)}function xr(e,t){(async()=>{try{for await(let r of e);}catch{}finally{t();}})();}function Ir(e,{params:t,subscribeMethodName:r,unsubscribeMethodName:n,responseProcessor:o}){return {async subscribe({abortSignal:s}){s.throwIfAborted();let i;function a(){if(i!==void 0){let m=xe(n,[i]);f.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(m).finally(()=>{u.abort();});}else u.abort();}s.addEventListener("abort",a);let u=new AbortController,d=xe(r,t),f=await e.transport({payload:d,signal:u.signal});function g(){s.removeEventListener("abort",a);}xr(f,g);for await(let m of f)if("id"in m&&m.id===d.id){if("error"in m)throw new rt(m.error);i=m.result;break}if(i==null)throw new Error("Failed to obtain a subscription id from the server");return {async*[Symbol.asyncIterator](){for await(let m of f){if(!("params"in m)||m.params.subscription!==i)continue;let b=m.params.result;yield o?o(b):b;}}}}}}function Ar(e){return new Proxy(e.api,{defineProperty(){return !1},deleteProperty(){return !1},get(t,r,n){return function(...o){let s=r.toString(),i=Reflect.get(t,s,n);if(r.toString().endsWith("Notifications")===!1&&!i)throw new Error("Either the notification name must end in 'Notifications' or the API must supply a subscription creator function to map between the notification name and the subscribe/unsubscribe method names.");let a=i?i(...o):{params:o,subscribeMethodName:s.replace(/Notifications$/,"Subscribe"),unsubscribeMethodName:s.replace(/Notifications$/,"Unsubscribe")};return Ir(e,a)}}})}function ot(e){return Ar(e)}var Tr=globalThis.fetch,Rr=class extends Error{constructor(e){super(`HTTP error (${e.statusCode}): ${e.message}`),Error.captureStackTrace(this,this.constructor),this.statusCode=e.statusCode;}get name(){return "SolanaHttpError"}};function vr(e){let t={};for(let r in e)t[r.toLowerCase()]=e[r];return t}function st({httpAgentNodeOnly:e,headers:t,url:r}){let n=void 0;let o=t&&vr(t);return async function({payload:i,signal:a}){let u=JSON.stringify(i),d={agent:n,body:u,headers:{...o,accept:"application/json","content-length":u.length.toString(),"content-type":"application/json; charset=utf-8"},method:"POST",signal:a},f=await Tr(r,d);if(!f.ok)throw new Rr({message:f.statusText,statusCode:f.status});return await f.json()}}var Y=globalThis.WebSocket;async function Nr({sendBufferHighWatermark:e,signal:t,url:r}){return new Promise((n,o)=>{t.addEventListener("abort",i,{once:!0});let s=new Map;function i(){b.readyState!==Y.CLOSED&&b.readyState!==Y.CLOSING&&b.close(1e3);}function a(h){f?.onCancel(),t.removeEventListener("abort",i),b.removeEventListener("close",a),b.removeEventListener("error",u),b.removeEventListener("open",g),b.removeEventListener("message",m),s.forEach((S,E)=>{if(S.__hasPolled){let{onError:x}=S;s.delete(E),x(h);}else s.delete(E);});}function u(h){d||o(new Error("WebSocket failed to connect",{cause:h}));}let d=!1,f;function g(){d=!0,n({async send(h){let S=JSON.stringify(h);if(!f&&b.readyState===Y.OPEN&&b.bufferedAmount>e){let E,x=new Promise((M,gt)=>{let Ae=setInterval(()=>{(b.readyState!==Y.OPEN||!(b.bufferedAmount>e))&&(clearInterval(Ae),f=void 0,M());},16);E=()=>{f=void 0,clearInterval(Ae),gt(new Error("WebSocket was closed before payload could be sent"));};});f={onCancel:E,promise:x};}f&&await f.promise,b.send(S);},async*[Symbol.asyncIterator](){let h=Symbol();s.set(h,{__hasPolled:!1,queuedMessages:[]});try{for(;;){let S=s.get(h);if(!S)throw new Error("Invariant: WebSocket message iterator is missing state storage");if(S.__hasPolled)throw new Error("Invariant: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise");let E=S.queuedMessages;if(E.length)S.queuedMessages=[],yield*E;else try{yield await new Promise((x,M)=>{s.set(h,{__hasPolled:!0,onError:M,onMessage:x});});}catch(x){if(x!==null&&typeof x=="object"&&"type"in x&&x.type==="close"&&"wasClean"in x&&x.wasClean)return;throw new Error("WebSocket connection closed",{cause:x})}}}finally{s.delete(h);}}});}function m({data:h}){let S=JSON.parse(h);s.forEach((E,x)=>{if(E.__hasPolled){let{onMessage:M}=E;s.set(x,{__hasPolled:!1,queuedMessages:[]}),M(S);}else E.queuedMessages.push(S);});}let b=new Y(r);b.addEventListener("close",a),b.addEventListener("error",u),b.addEventListener("open",g),b.addEventListener("message",m);})}function it({sendBufferHighWatermark:e,url:t}){if(/^wss?:/i.test(t)===!1){let r=t.match(/^([^:]+):/);throw new DOMException(r?`Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${r[1]}:' is not allowed.`:`Failed to construct 'WebSocket': The URL '${t}' is invalid.`)}return async function({payload:n,signal:o}){o?.throwIfAborted();let s=await Nr({sendBufferHighWatermark:e,signal:o,url:t});return o?.throwIfAborted(),await s.send(n),{[Symbol.asyncIterator]:s[Symbol.asyncIterator].bind(s),send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:s.send.bind(s)}}}c();c();var le=class extends Error{constructor(r,n,o){let s=(typeof n[0]=="number"?n[0]:parseInt(n[0],10))+1,i="",a=s%10,u=s%100;a==1&&u!=11?i=s+"st":a==2&&u!=12?i=s+"nd":a==3&&u!=13?i=s+"rd":i=s+"th";let d=n.length>1?n.slice(1).map(f=>typeof f=="number"?`[${f}]`:f).join("."):null;super(`The ${i} argument to the \`${r}\` RPC method${d?` at path \`${d}\``:""} was \`${o}\`. This number is unsafe for use with the Solana JSON-RPC because it exceeds \`Number.MAX_SAFE_INTEGER\`.`);this.keyPath=n,this.methodName=r,this.value=o;}get name(){return "SolanaJsonRpcIntegerOverflowError"}};var Ie={onIntegerOverflow(e,t,r){throw new le(e,t,r)}};function Bs(e){return nt({...e,api:Qe(Ie)})}function Ps(e){return ot({...e,api:et(Ie)})}c();c();function de(e,...t){return t.reduce((r,n)=>n(r),e)}c();function at(e,t){let r;return async function(o){let{payload:s,signal:i}=o,a=t(s);if(a===void 0)return await e(o);if(r||(Promise.resolve().then(()=>{r=void 0;}),r={}),r[a]==null){let d=new AbortController;r[a]={abortController:d,numConsumers:0,responsePromise:e({...o,signal:d.signal})};}let u=r[a];if(u.numConsumers++,i){let d=u.responsePromise;return await new Promise((f,g)=>{let m=b=>{i.removeEventListener("abort",m),u.numConsumers-=1,u.numConsumers===0&&u.abortController.abort();let h=new DOMException(b.target.reason,"AbortError");g(h);};i.addEventListener("abort",m),d.then(f).finally(()=>{i.removeEventListener("abort",m);});})}else return await u.responsePromise}}c();var lt=Tt(ut(),1);function Lr(e){return e==null||typeof e!="object"||Array.isArray(e)?!1:"jsonrpc"in e&&e.jsonrpc==="2.0"&&"method"in e&&typeof e.method=="string"&&"params"in e}function dt(e){return Lr(e)?(0, lt.default)([e.method,e.params]):void 0}function Br(e){let t={};for(let r in e)t[r.toLowerCase()]=e[r];return t}function Xs(e){return de(st({...e,headers:{...e.headers?Br(e.headers):void 0,"solana-client":"js/2.0.0-development"}}),t=>at(t,dt))}c();c();var Pr={jsonrpc:"2.0",method:"ping"};function ft({intervalMs:e,transport:t}){let r=new Map;return async(...n)=>{let o=await t(...n),s;function i(){o.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(Pr);}function a(){clearInterval(s),s=setInterval(i,e);}if(r.has(o)===!1){r.set(o,{[Symbol.asyncIterator]:o[Symbol.asyncIterator].bind(o),send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:(...f)=>(a(),o.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(...f))}),(async()=>{try{for await(let f of o)a();}catch{}finally{r.delete(o),clearInterval(s),u&&globalThis.window.removeEventListener("offline",u),d&&globalThis.window.removeEventListener("online",d);}})(),globalThis.navigator.onLine&&a();let u,d;u=()=>{clearInterval(s);},d=()=>{i(),a();},globalThis.window.addEventListener("offline",u),globalThis.window.addEventListener("online",d);}return r.get(o)}}c();c();function Dr(e,t){(async()=>{try{for await(let r of e);}catch{}finally{t();}})();}function pt({getAbortSignalFromInputArgs:e,getCacheEntryMissingError:t,getCacheKeyFromInputArgs:r,onCacheHit:n,onCreateIterable:o}){let s=new Map;function i(a){let u=s.get(a);if(!u)throw t(a);return u}return async(...a)=>{let u=r(...a),d=e(...a);if(u===void 0)return await o(d,...a);let f=()=>{s.delete(u),d.removeEventListener("abort",g);},g=()=>{let m=i(u);m.purgeScheduled!==!0&&(m.purgeScheduled=!0,globalThis.queueMicrotask(()=>{m.purgeScheduled=!1,m.referenceCount===0&&(m.abortController.abort(),f());})),m.referenceCount--;};d.addEventListener("abort",g);try{let m=s.get(u);if(m){m.referenceCount++;let b=m.iterable,h="then"in b?await b:b;return await n(h,...a),h}else {let b=new AbortController,h=o(b.signal,...a),S={abortController:b,iterable:h,purgeScheduled:!1,referenceCount:1};s.set(u,S);let E=await h;return Dr(E,f),S.iterable=E,E}}catch(m){throw f(),m}}}var $r=Symbol(void 0);function mt({getShard:e,transport:t}){return pt({getAbortSignalFromInputArgs:({signal:r})=>r,getCacheEntryMissingError(r){return new Error(`Found no cache entry for connection with shard key \`${r?.toString()}\``)},getCacheKeyFromInputArgs:({payload:r})=>e?e(r):$r,onCacheHit:(r,{payload:n})=>r.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(n),onCreateIterable:(r,n)=>t({...n,signal:r})})}function di(e){let{getShard:t,intervalMs:r,...n}=e;return de(it({...n,sendBufferHighWatermark:e.sendBufferHighWatermark??131072}),o=>ft({intervalMs:r??5e3,transport:o}),o=>mt({getShard:t,transport:o}))}
|
|
10
|
+
|
|
11
|
+
exports.AccountRole = Ut;
|
|
12
|
+
exports.address = $o;
|
|
13
|
+
exports.appendTransactionInstruction = ps;
|
|
14
|
+
exports.assertIsBase58EncodedAddress = Nt;
|
|
15
|
+
exports.assertIsBlockhash = as;
|
|
16
|
+
exports.assertIsDurableNonceTransaction = ls;
|
|
17
|
+
exports.createAddressWithSeed = Uo;
|
|
18
|
+
exports.createDefaultRpcSubscriptionsTransport = di;
|
|
19
|
+
exports.createDefaultRpcTransport = Xs;
|
|
20
|
+
exports.createSolanaRpc = Bs;
|
|
21
|
+
exports.createSolanaRpcSubscriptions = Ps;
|
|
22
|
+
exports.createTransaction = us;
|
|
23
|
+
exports.downgradeRoleToNonSigner = jo;
|
|
24
|
+
exports.downgradeRoleToReadonly = Ho;
|
|
25
|
+
exports.generateKeyPair = es;
|
|
26
|
+
exports.getAddressFromPublicKey = We;
|
|
27
|
+
exports.getBase58EncodedAddressCodec = U;
|
|
28
|
+
exports.getBase58EncodedAddressComparator = ce;
|
|
29
|
+
exports.getBase64EncodedWireTransaction = bs;
|
|
30
|
+
exports.getProgramDerivedAddress = Wo;
|
|
31
|
+
exports.isBase58EncodedAddress = Do;
|
|
32
|
+
exports.isSignerRole = Go;
|
|
33
|
+
exports.isWritableRole = Vo;
|
|
34
|
+
exports.mergeRoles = qo;
|
|
35
|
+
exports.prependTransactionInstruction = ms;
|
|
36
|
+
exports.setTransactionFeePayer = fs;
|
|
37
|
+
exports.setTransactionLifetimeUsingBlockhash = cs;
|
|
38
|
+
exports.setTransactionLifetimeUsingDurableNonce = ds;
|
|
39
|
+
exports.signBytes = Me;
|
|
40
|
+
exports.signTransaction = gs;
|
|
41
|
+
exports.upgradeRoleToSigner = Yo;
|
|
42
|
+
exports.upgradeRoleToWritable = Jo;
|
|
43
|
+
exports.verifySignature = ts;
|
|
10
44
|
|
|
11
45
|
return exports;
|
|
12
46
|
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type CacheKey = string | symbol;
|
|
2
|
+
type Config<TInput extends unknown[], TIterable extends AsyncIterable<unknown>> = Readonly<{
|
|
3
|
+
getAbortSignalFromInputArgs: (...args: TInput) => AbortSignal;
|
|
4
|
+
getCacheEntryMissingError: (cacheKey: CacheKey) => Error;
|
|
5
|
+
getCacheKeyFromInputArgs: (...args: TInput) => CacheKey | undefined;
|
|
6
|
+
onCacheHit: (iterable: TIterable, ...args: TInput) => Promise<void>;
|
|
7
|
+
onCreateIterable: (abortSignal: AbortSignal, ...args: TInput) => Promise<TIterable>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function getCachedAbortableIterableFactory<TInput extends unknown[], TIterable extends AsyncIterable<unknown>>({ getAbortSignalFromInputArgs, getCacheEntryMissingError, getCacheKeyFromInputArgs, onCacheHit, onCreateIterable, }: Config<TInput, TIterable>): (...args: TInput) => Promise<TIterable>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=cached-abortable-iterable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cached-abortable-iterable.d.ts","sourceRoot":"","sources":["../../src/cached-abortable-iterable.ts"],"names":[],"mappings":"AAMA,KAAK,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAChC,KAAK,MAAM,CAAC,MAAM,SAAS,OAAO,EAAE,EAAE,SAAS,SAAS,aAAa,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC;IACvF,2BAA2B,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,KAAK,WAAW,CAAC;IAC9D,yBAAyB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,KAAK,CAAC;IACzD,wBAAwB,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,KACpC,QAAQ,GAER,SAAS,CAAC;IAChB,UAAU,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,gBAAgB,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC;CACvF,CAAC,CAAC;AAgBH,wBAAgB,iCAAiC,CAAC,MAAM,SAAS,OAAO,EAAE,EAAE,SAAS,SAAS,aAAa,CAAC,OAAO,CAAC,EAAE,EAClH,2BAA2B,EAC3B,yBAAyB,EACzB,wBAAwB,EACxB,UAAU,EACV,gBAAgB,GACnB,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,SAAS,CAAC,CA+DrE"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
export * from '@solana/addresses';
|
|
2
|
+
export * from '@solana/instructions';
|
|
1
3
|
export * from '@solana/keys';
|
|
4
|
+
export * from '@solana/transactions';
|
|
2
5
|
export * from './rpc';
|
|
3
6
|
export * from './rpc-transport';
|
|
7
|
+
export * from './rpc-websocket-transport';
|
|
4
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,cAAc,CAAC;AAC7B,cAAc,sBAAsB,CAAC;AACrC,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rpc-default-config.d.ts","sourceRoot":"","sources":["../../src/rpc-default-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"rpc-default-config.d.ts","sourceRoot":"","sources":["../../src/rpc-default-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAItD,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAIhF,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { IRpcTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';
|
|
2
|
+
type GetDeduplicationKeyFn = (payload: unknown) => string | undefined;
|
|
3
|
+
export declare function getRpcTransportWithRequestCoalescing(transport: IRpcTransport, getDeduplicationKey: GetDeduplicationKeyFn): IRpcTransport;
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=rpc-request-coalescer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc-request-coalescer.d.ts","sourceRoot":"","sources":["../../src/rpc-request-coalescer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,6DAA6D,CAAC;AAQ5F,KAAK,qBAAqB,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;AAEtE,wBAAgB,oCAAoC,CAChD,SAAS,EAAE,aAAa,EACxB,mBAAmB,EAAE,qBAAqB,GAC3C,aAAa,CAmDf"}
|