@solana/web3.js 2.0.0-experimental.24998c4 → 2.0.0-experimental.28a54d0
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/dist/index.browser.cjs +31 -2
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js +18 -3
- package/dist/index.browser.js.map +1 -1
- package/dist/index.development.js +1863 -236
- package/dist/index.development.js.map +1 -1
- package/dist/index.native.js +18 -3
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs +31 -2
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js +18 -3
- package/dist/index.node.js.map +1 -1
- package/dist/index.production.min.js +33 -19
- package/dist/types/index.d.ts +3 -0
- package/dist/types/rpc-websocket-transport.d.ts +6 -0
- package/dist/types/rpc.d.ts +4 -3
- package/package.json +15 -16
package/dist/index.native.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export * from '@solana/addresses';
|
|
1
2
|
export * from '@solana/instructions';
|
|
2
3
|
export * from '@solana/keys';
|
|
3
|
-
|
|
4
|
-
import {
|
|
4
|
+
export * from '@solana/transactions';
|
|
5
|
+
import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/rpc-core';
|
|
6
|
+
import { createJsonRpc, createJsonSubscriptionRpc, createHttpTransport, createWebSocketTransport } from '@solana/rpc-transport';
|
|
5
7
|
import fastStableStringify from 'fast-stable-stringify';
|
|
6
8
|
|
|
7
9
|
// src/index.ts
|
|
@@ -49,6 +51,12 @@ function createSolanaRpc(config) {
|
|
|
49
51
|
api: createSolanaRpcApi(DEFAULT_RPC_CONFIG)
|
|
50
52
|
});
|
|
51
53
|
}
|
|
54
|
+
function createSolanaRpcSubscriptions(config) {
|
|
55
|
+
return createJsonSubscriptionRpc({
|
|
56
|
+
...config,
|
|
57
|
+
api: createSolanaRpcSubscriptionsApi(DEFAULT_RPC_CONFIG)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
52
60
|
|
|
53
61
|
// src/rpc-request-coalescer.ts
|
|
54
62
|
function getRpcTransportWithRequestCoalescing(transport, getDeduplicationKey) {
|
|
@@ -133,7 +141,14 @@ function createDefaultRpcTransport(config) {
|
|
|
133
141
|
getSolanaRpcPayloadDeduplicationKey
|
|
134
142
|
);
|
|
135
143
|
}
|
|
144
|
+
function createDefaultRpcSubscriptionsTransport(config) {
|
|
145
|
+
return createWebSocketTransport({
|
|
146
|
+
...config,
|
|
147
|
+
sendBufferHighWatermark: config.sendBufferHighWatermark ?? // Let 128KB of data into the WebSocket buffer before buffering it in the app.
|
|
148
|
+
131072
|
|
149
|
+
});
|
|
150
|
+
}
|
|
136
151
|
|
|
137
|
-
export { createDefaultRpcTransport, createSolanaRpc };
|
|
152
|
+
export { createDefaultRpcSubscriptionsTransport, createDefaultRpcTransport, createSolanaRpc, createSolanaRpcSubscriptions };
|
|
138
153
|
//# sourceMappingURL=out.js.map
|
|
139
154
|
//# sourceMappingURL=index.native.js.map
|
package/dist/index.native.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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts"],"names":[],"mappings":"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","sourcesContent":["export * from '@solana/instructions';\nexport * from '@solana/keys';\nexport * from './rpc';\nexport * from './rpc-transport';\n","import { createSolanaRpcApi, SolanaRpcMethods } from '@solana/rpc-core';\nimport { createJsonRpc } from '@solana/rpc-transport';\nimport type { Rpc } 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<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';\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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n"]}
|
|
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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts","../src/rpc-websocket-transport.ts"],"names":[],"mappings":"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","sourcesContent":["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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n","import { createWebSocketTransport } from '@solana/rpc-transport';\nimport { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nexport function createDefaultRpcSubscriptionsTransport(\n config: Omit<Parameters<typeof createWebSocketTransport>[0], 'sendBufferHighWatermark'> & {\n sendBufferHighWatermark?: number;\n }\n): IRpcWebSocketTransport {\n return createWebSocketTransport({\n ...config,\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}\n"]}
|
package/dist/index.node.cjs
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var addresses = require('@solana/addresses');
|
|
3
4
|
var instructions = require('@solana/instructions');
|
|
4
5
|
var keys = require('@solana/keys');
|
|
6
|
+
var transactions = require('@solana/transactions');
|
|
5
7
|
var rpcCore = require('@solana/rpc-core');
|
|
6
8
|
var rpcTransport = require('@solana/rpc-transport');
|
|
7
9
|
var fastStableStringify = require('fast-stable-stringify');
|
|
@@ -55,6 +57,12 @@ function createSolanaRpc(config) {
|
|
|
55
57
|
api: rpcCore.createSolanaRpcApi(DEFAULT_RPC_CONFIG)
|
|
56
58
|
});
|
|
57
59
|
}
|
|
60
|
+
function createSolanaRpcSubscriptions(config) {
|
|
61
|
+
return rpcTransport.createJsonSubscriptionRpc({
|
|
62
|
+
...config,
|
|
63
|
+
api: rpcCore.createSolanaRpcSubscriptionsApi(DEFAULT_RPC_CONFIG)
|
|
64
|
+
});
|
|
65
|
+
}
|
|
58
66
|
|
|
59
67
|
// src/rpc-request-coalescer.ts
|
|
60
68
|
function getRpcTransportWithRequestCoalescing(transport, getDeduplicationKey) {
|
|
@@ -139,20 +147,41 @@ function createDefaultRpcTransport(config) {
|
|
|
139
147
|
getSolanaRpcPayloadDeduplicationKey
|
|
140
148
|
);
|
|
141
149
|
}
|
|
150
|
+
function createDefaultRpcSubscriptionsTransport(config) {
|
|
151
|
+
return rpcTransport.createWebSocketTransport({
|
|
152
|
+
...config,
|
|
153
|
+
sendBufferHighWatermark: config.sendBufferHighWatermark ?? // Let 128KB of data into the WebSocket buffer before buffering it in the app.
|
|
154
|
+
131072
|
|
155
|
+
});
|
|
156
|
+
}
|
|
142
157
|
|
|
158
|
+
exports.createDefaultRpcSubscriptionsTransport = createDefaultRpcSubscriptionsTransport;
|
|
143
159
|
exports.createDefaultRpcTransport = createDefaultRpcTransport;
|
|
144
160
|
exports.createSolanaRpc = createSolanaRpc;
|
|
161
|
+
exports.createSolanaRpcSubscriptions = createSolanaRpcSubscriptions;
|
|
162
|
+
Object.keys(addresses).forEach(function (k) {
|
|
163
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
164
|
+
enumerable: true,
|
|
165
|
+
get: function () { return addresses[k]; }
|
|
166
|
+
});
|
|
167
|
+
});
|
|
145
168
|
Object.keys(instructions).forEach(function (k) {
|
|
146
|
-
if (k !== 'default' && !
|
|
169
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
147
170
|
enumerable: true,
|
|
148
171
|
get: function () { return instructions[k]; }
|
|
149
172
|
});
|
|
150
173
|
});
|
|
151
174
|
Object.keys(keys).forEach(function (k) {
|
|
152
|
-
if (k !== 'default' && !
|
|
175
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
153
176
|
enumerable: true,
|
|
154
177
|
get: function () { return keys[k]; }
|
|
155
178
|
});
|
|
156
179
|
});
|
|
180
|
+
Object.keys(transactions).forEach(function (k) {
|
|
181
|
+
if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
|
|
182
|
+
enumerable: true,
|
|
183
|
+
get: function () { return transactions[k]; }
|
|
184
|
+
});
|
|
185
|
+
});
|
|
157
186
|
//# sourceMappingURL=out.js.map
|
|
158
187
|
//# sourceMappingURL=index.node.cjs.map
|
package/dist/index.node.cjs.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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts"],"names":[],"mappings":"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","sourcesContent":["export * from '@solana/instructions';\nexport * from '@solana/keys';\nexport * from './rpc';\nexport * from './rpc-transport';\n","import { createSolanaRpcApi, SolanaRpcMethods } from '@solana/rpc-core';\nimport { createJsonRpc } from '@solana/rpc-transport';\nimport type { Rpc } 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<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';\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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n"]}
|
|
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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts","../src/rpc-websocket-transport.ts"],"names":[],"mappings":"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","sourcesContent":["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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n","import { createWebSocketTransport } from '@solana/rpc-transport';\nimport { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nexport function createDefaultRpcSubscriptionsTransport(\n config: Omit<Parameters<typeof createWebSocketTransport>[0], 'sendBufferHighWatermark'> & {\n sendBufferHighWatermark?: number;\n }\n): IRpcWebSocketTransport {\n return createWebSocketTransport({\n ...config,\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}\n"]}
|
package/dist/index.node.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
|
+
export * from '@solana/addresses';
|
|
1
2
|
export * from '@solana/instructions';
|
|
2
3
|
export * from '@solana/keys';
|
|
3
|
-
|
|
4
|
-
import {
|
|
4
|
+
export * from '@solana/transactions';
|
|
5
|
+
import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/rpc-core';
|
|
6
|
+
import { createJsonRpc, createJsonSubscriptionRpc, createHttpTransport, createWebSocketTransport } from '@solana/rpc-transport';
|
|
5
7
|
import fastStableStringify from 'fast-stable-stringify';
|
|
6
8
|
|
|
7
9
|
// src/index.ts
|
|
@@ -49,6 +51,12 @@ function createSolanaRpc(config) {
|
|
|
49
51
|
api: createSolanaRpcApi(DEFAULT_RPC_CONFIG)
|
|
50
52
|
});
|
|
51
53
|
}
|
|
54
|
+
function createSolanaRpcSubscriptions(config) {
|
|
55
|
+
return createJsonSubscriptionRpc({
|
|
56
|
+
...config,
|
|
57
|
+
api: createSolanaRpcSubscriptionsApi(DEFAULT_RPC_CONFIG)
|
|
58
|
+
});
|
|
59
|
+
}
|
|
52
60
|
|
|
53
61
|
// src/rpc-request-coalescer.ts
|
|
54
62
|
function getRpcTransportWithRequestCoalescing(transport, getDeduplicationKey) {
|
|
@@ -133,7 +141,14 @@ function createDefaultRpcTransport(config) {
|
|
|
133
141
|
getSolanaRpcPayloadDeduplicationKey
|
|
134
142
|
);
|
|
135
143
|
}
|
|
144
|
+
function createDefaultRpcSubscriptionsTransport(config) {
|
|
145
|
+
return createWebSocketTransport({
|
|
146
|
+
...config,
|
|
147
|
+
sendBufferHighWatermark: config.sendBufferHighWatermark ?? // Let 128KB of data into the WebSocket buffer before buffering it in the app.
|
|
148
|
+
131072
|
|
149
|
+
});
|
|
150
|
+
}
|
|
136
151
|
|
|
137
|
-
export { createDefaultRpcTransport, createSolanaRpc };
|
|
152
|
+
export { createDefaultRpcSubscriptionsTransport, createDefaultRpcTransport, createSolanaRpc, createSolanaRpcSubscriptions };
|
|
138
153
|
//# sourceMappingURL=out.js.map
|
|
139
154
|
//# 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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts"],"names":[],"mappings":"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","sourcesContent":["export * from '@solana/instructions';\nexport * from '@solana/keys';\nexport * from './rpc';\nexport * from './rpc-transport';\n","import { createSolanaRpcApi, SolanaRpcMethods } from '@solana/rpc-core';\nimport { createJsonRpc } from '@solana/rpc-transport';\nimport type { Rpc } 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<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';\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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n"]}
|
|
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","../src/rpc-request-coalescer.ts","../src/rpc-request-deduplication.ts","../src/rpc-websocket-transport.ts"],"names":[],"mappings":"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","sourcesContent":["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 { 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 getRpcTransportWithRequestCoalescing(\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 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\nexport function getSolanaRpcPayloadDeduplicationKey(payload: unknown): string | undefined {\n if (payload == null || typeof payload !== 'object' || Array.isArray(payload)) {\n return;\n }\n if ('jsonrpc' in payload && payload.jsonrpc === '2.0' && 'method' in payload && 'params' in payload) {\n return fastStableStringify([payload.method, payload.params]);\n }\n}\n","import { createWebSocketTransport } from '@solana/rpc-transport';\nimport { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';\n\nexport function createDefaultRpcSubscriptionsTransport(\n config: Omit<Parameters<typeof createWebSocketTransport>[0], 'sendBufferHighWatermark'> & {\n sendBufferHighWatermark?: number;\n }\n): IRpcWebSocketTransport {\n return createWebSocketTransport({\n ...config,\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}\n"]}
|
|
@@ -2,29 +2,43 @@ this.globalThis = this.globalThis || {};
|
|
|
2
2
|
this.globalThis.solanaWeb3 = (function (exports) {
|
|
3
3
|
'use strict';
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var fr=Object.create;var de=Object.defineProperty;var pr=Object.getOwnPropertyDescriptor;var mr=Object.getOwnPropertyNames;var gr=Object.getPrototypeOf,hr=Object.prototype.hasOwnProperty;var br=(e,r,t)=>r in e?de(e,r,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[r]=t;var yr=(e,r)=>()=>(e&&(r=e(e=0)),r);var wr=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var Sr=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of mr(r))!hr.call(e,o)&&o!==t&&de(e,o,{get:()=>r[o],enumerable:!(n=pr(r,o))||n.enumerable});return e};var xr=(e,r,t)=>(t=e!=null?fr(gr(e)):{},Sr(r||!e||!e.__esModule?de(t,"default",{value:e,enumerable:!0}):t,e));var I=(e,r,t)=>(br(e,typeof r!="symbol"?r+"":r,t),t);var a=yr(()=>{});var cr=wr((_s,ar)=>{a();var Rt=Object.prototype.toString,vt=Object.keys||function(e){var r=[];for(var t in e)r.push(t);return r};function Y(e,r){var t,n,o,s,i,c,l;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 Y(e.toJSON(),r);if(l=Rt.call(e),l==="[object Array]"){for(o="[",n=e.length-1,t=0;t<n;t++)o+=Y(e[t],!0)+",";return n>-1&&(o+=Y(e[t],!0)),o+"]"}else if(l==="[object Object]"){for(s=vt(e).sort(),n=s.length,o="",t=0;t<n;)i=s[t],c=Y(e[i],!1),c!==void 0&&(o&&(o+=","),o+=JSON.stringify(i)+":"+c),t++;return "{"+o+"}"}else return JSON.stringify(e);case"function":case"undefined":return r?null:void 0;case"string":return JSON.stringify(e);default:return isFinite(e)?e:null}}ar.exports=function(e){var r=Y(e,!1);if(r!==void 0)return ""+r};});a();a();a();a();a();var k=e=>{let r=e.reduce((o,s)=>o+s.length,0),t=new Uint8Array(r),n=0;return e.forEach(o=>{t.set(o,n),n+=o.length;}),t},Ie=(e,r)=>{if(e.length>=r)return e;let t=new Uint8Array(r).fill(0);return t.set(e),t},X=(e,r)=>Ie(e.slice(0,r),r);a();var _=class extends Error{constructor(t){super(`Serializer [${t}] cannot deserialize empty buffers.`);I(this,"name","DeserializingEmptyBufferError");}},z=class extends Error{constructor(t,n,o){super(`Serializer [${t}] expected ${n} bytes, got ${o}.`);I(this,"name","NotEnoughBytesError");}},L=class extends Error{constructor(t){t??(t="Expected a fixed-size serializer, got a variable-size one.");super(t);I(this,"name","ExpectedFixedSizeSerializerError");}};a();function F(e,r,t){return {description:t??`fixed(${r}, ${e.description})`,fixedSize:r,maxSize:r,serialize:n=>X(e.serialize(n),r),deserialize:(n,o=0)=>{if(n=n.slice(o,o+r),n.length<r)throw new z("fixSerializer",r,n.length);e.fixedSize!==null&&(n=X(n,e.fixedSize));let[s]=e.deserialize(n,0);return [s,o+r]}}}a();function Z(e,r,t){return {description:e.description,fixedSize:e.fixedSize,maxSize:e.maxSize,serialize:n=>e.serialize(r(n)),deserialize:(n,o=0)=>{let[s,i]=e.deserialize(n,o);return t?[t(s,n,o),i]:[s,i]}}}a();a();a();var Q=class extends Error{constructor(t,n,o){let s=`Expected a string of base ${n}, got [${t}].`;super(s);I(this,"name","InvalidBaseStringError");this.cause=o;}};var Te=e=>{let r=e.length,t=BigInt(r);return {description:`base${r}`,fixedSize:null,maxSize:null,serialize(n){if(!n.match(new RegExp(`^[${e}]*$`)))throw new Q(n,r);if(n==="")return new Uint8Array;let o=[...n],s=o.findIndex(m=>m!==e[0]);s=s===-1?o.length:s;let i=Array(s).fill(0);if(s===o.length)return Uint8Array.from(i);let c=o.slice(s),l=0n,d=1n;for(let m=c.length-1;m>=0;m-=1)l+=d*BigInt(e.indexOf(c[m])),d*=t;let f=[];for(;l>0n;)f.unshift(Number(l%256n)),l/=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 c=e[0].repeat(i);if(i===s.length)return [c,n.length];let l=s.slice(i).reduce((f,m)=>f*256n+BigInt(m),0n),d=[];for(;l>0n;)d.unshift(e[Number(l%t)]),l/=t;return [c+d.join(""),n.length]}}};a();var P=Te("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz");a();var ze=e=>e.replace(/\u0000/g,"");a();var fe={description:"utf8",fixedSize:null,maxSize:null,serialize(e){return new TextEncoder().encode(e)},deserialize(e,r=0){let t=new TextDecoder().decode(e.slice(r));return [ze(t),e.length]}};a();a();var ee;(function(e){e.Little="le",e.Big="be";})(ee||(ee={}));a();var re=class extends RangeError{constructor(t,n,o,s){super(`Serializer [${t}] expected number to be between ${n} and ${o}, got ${s}.`);I(this,"name","NumberOutOfRangeError");}};a();function te(e){let r,t=e.name;return e.size>1&&(r=!("endian"in e.options)||e.options.endian===ee.Little,t+=r?"(le)":"(be)"),{description:e.options.description??t,fixedSize:e.size,maxSize:e.size,serialize(n){e.range&&pe(e.name,e.range[0],e.range[1],n);let o=new ArrayBuffer(e.size);return e.set(new DataView(o),n,r),new Uint8Array(o)},deserialize(n,o=0){let s=n.slice(o,o+e.size);Ir("i8",s,e.size);let i=Ar(s);return [e.get(i,r),o+e.size]}}}var Er=e=>e.buffer.slice(e.byteOffset,e.byteLength+e.byteOffset),Ar=e=>new DataView(Er(e)),pe=(e,r,t,n)=>{if(n<r||n>t)throw new re(e,r,t,n)},Ir=(e,r,t)=>{if(r.length===0)throw new _(e);if(r.length<t)throw new z(e,t,r.length)};a();var C=(e={})=>te({name:"u8",size:1,range:[0,+"0xff"],set:(r,t)=>r.setUint8(0,Number(t)),get:r=>r.getUint8(0),options:e});a();var j=(e={})=>te({name:"u32",size:4,range:[0,+"0xffffffff"],set:(r,t,n)=>r.setUint32(0,Number(t),n),get:(r,t)=>r.getUint32(0,t),options:e});a();var v=(e={})=>({description:e.description??"shortU16",fixedSize:null,maxSize:3,serialize:r=>{pe("shortU16",0,65535,r);let t=[0];for(let n=0;;n+=1){let o=r>>n*7;if(o===0)break;let s=127&o;t[n]=s,n>0&&(t[n-1]|=128);}return new Uint8Array(t)},deserialize:(r,t=0)=>{let n=0,o=0;for(;++o;){let s=o-1,i=r[t+s],c=127&i;if(n|=c<<s*7,!(i&128))break}return [n,t+o]}});a();a();var ne=class extends Error{constructor(t,n,o){super(`Expected [${t}] to have ${n} items, got ${o}.`);I(this,"name","InvalidNumberOfItemsError");}},oe=class extends Error{constructor(t,n){super(`The remainder of the buffer (${t} 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, ${t} modulo ${n} should be equal to zero.`);I(this,"name","InvalidArrayLikeRemainderSizeError");}},se=class extends Error{constructor(t){super(`Unrecognized array-like serializer size: ${JSON.stringify(t)}`);I(this,"name","UnrecognizedArrayLikeSerializerSizeError");}};a();a();function $(e){return e.reduce((r,t)=>r===null||t===null?null:r+t,0)}function Re(e,r,t,n){if(typeof e=="number")return [e,n];if(typeof e=="object")return e.deserialize(t,n);if(e==="remainder"){let o=$(r);if(o===null)throw new L('Serializers of "remainder" size must have fixed-size items.');let s=t.slice(n).length;if(s%o!==0)throw new oe(s,o);return [s/o,n]}throw new se(e)}function U(e){return typeof e=="object"?e.description:`${e}`}function me(e,r){if(typeof e!="number")return null;if(e===0)return 0;let t=$(r);return t===null?null:t*e}function ve(e,r){return typeof e=="object"?e.serialize(r):new Uint8Array}function B(e,r={}){let t=r.size??j();if(t==="remainder"&&e.fixedSize===null)throw new L('Serializers of "remainder" size must have fixed-size items.');return {description:r.description??`array(${e.description}; ${U(t)})`,fixedSize:me(t,[e.fixedSize]),maxSize:me(t,[e.maxSize]),serialize:n=>{if(typeof t=="number"&&n.length!==t)throw new ne("array",t,n.length);return k([ve(t,n.length),...n.map(o=>e.serialize(o))])},deserialize:(n,o=0)=>{if(typeof t=="object"&&n.slice(o).length===0)return [[],o];let[s,i]=Re(t,[e.fixedSize],n,o);o=i;let c=[];for(let l=0;l<s;l+=1){let[d,f]=e.deserialize(n,o);c.push(d),o=f;}return [c,o]}}}a();function ie(e={}){let r=e.size??"variable",t=e.description??`bytes(${U(r)})`,n={description:t,fixedSize:null,maxSize:null,serialize:o=>new Uint8Array(o),deserialize:(o,s=0)=>{let i=o.slice(s);return [i,s+i.length]}};return r==="variable"?n:typeof r=="number"?F(n,r,t):{description:t,fixedSize:null,maxSize:null,serialize:o=>{let s=n.serialize(o),i=r.serialize(s.length);return k([i,s])},deserialize:(o,s=0)=>{if(o.slice(s).length===0)throw new _("bytes");let[i,c]=r.deserialize(o,s),l=Number(i);s=c;let d=o.slice(s,s+l);if(d.length<l)throw new z("bytes",l,d.length);let[f,m]=n.deserialize(d);return s+=m,[f,s]}}}a();function K(e={}){let r=e.size??j(),t=e.encoding??fe,n=e.description??`string(${t.description}; ${U(r)})`;return r==="variable"?{...t,description:n}:typeof r=="number"?F(t,r,n):{description:n,fixedSize:null,maxSize:null,serialize:o=>{let s=t.serialize(o),i=r.serialize(s.length);return k([i,s])},deserialize:(o,s=0)=>{if(o.slice(s).length===0)throw new _("string");let[i,c]=r.deserialize(o,s),l=Number(i);s=c;let d=o.slice(s,s+l);if(d.length<l)throw new z("string",l,d.length);let[f,m]=t.deserialize(d);return s+=m,[f,s]}}}a();function O(e,r={}){let t=e.map(([n,o])=>`${String(n)}: ${o.description}`).join(", ");return {description:r.description??`struct(${t})`,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 k(o)},deserialize:(n,o=0)=>{let s={};return e.forEach(([i,c])=>{let[l,d]=c.deserialize(n,o);o=d,s[i]=l;}),[s,o]}}}a();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 Tr(e){return D===void 0&&(D=new Promise(r=>{e.generateKey("Ed25519",!1,["sign","verify"]).catch(()=>{r(D=!1);}).then(()=>{r(D=!0);});})),typeof D=="boolean"?D:await D}async function Ne(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.digest!="function")throw new Error("No digest implementation could be found")}async function ke(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.generateKey!="function")throw new Error("No key generation implementation could be found");if(!await Tr(globalThis.crypto.subtle))throw new Error(`This runtime does not support the generation of Ed25519 key pairs.
|
|
6
6
|
|
|
7
7
|
Install and import \`@solana/webcrypto-ed25519-polyfill\` before generating keys in environments that do not support Ed25519.
|
|
8
8
|
|
|
9
|
-
For a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20`)}async function Se(){if(I(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.exportKey!="function")throw new Error("No key export implementation could be found")}async function Re(){if(I(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.sign!="function")throw new Error("No signing implementation could be found")}async function Te(){if(I(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.verify!="function")throw new Error("No signature verification implementation could be found")}async function ft(){return await we(),await crypto.subtle.generateKey("Ed25519",!1,["sign","verify"])}async function dt(e){if(await Se(),e.type!=="public"||e.algorithm.name!=="Ed25519")throw new Error("The `CryptoKey` must be an `Ed25519` public key");let r=await crypto.subtle.exportKey("raw",e),[t]=be().deserialize(new Uint8Array(r));return t}async function mt(e,r){await Re();let t=await crypto.subtle.sign("Ed25519",e,r);return new Uint8Array(t)}async function gt(e,r,t){return await Te(),await crypto.subtle.verify("Ed25519",e,r,t)}s();s();function P(e,r,t){if(Array.isArray(e))return e.map((n,o)=>P(n,[...r,o],t));if(typeof e=="object"&&e!==null){let n={};for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=P(e[o],[...r,o],t));return n}else return typeof e=="bigint"?(t&&(e>Number.MAX_SAFE_INTEGER||e<-Number.MAX_SAFE_INTEGER)&&t(r,e),Number(e)):e}function Ie(e,r){return P(e,[],r)}var l={},Ae={getAccountInfo:[["value","data","parsed","info","lastExtendedSlotStartIndex"],["value","data","parsed","info","slashPenalty"],["value","data","parsed","info","warmupCooldownRate"],["value","data","parsed","info","tokenAmount","decimals"],["value","data","parsed","info","tokenAmount","uiAmount"],["value","data","parsed","info","rentExemptReserve","decimals"],["value","data","parsed","info","delegatedAmount","decimals"],["value","data","parsed","info","extensions",l,"state","olderTransferFee","transferFeeBasisPoints"],["value","data","parsed","info","extensions",l,"state","newerTransferFee","transferFeeBasisPoints"],["value","data","parsed","info","extensions",l,"state","preUpdateAverageRate"],["value","data","parsed","info","extensions",l,"state","currentRate"],["value","data","parsed","info","decimals"],["value","data","parsed","info","numRequiredSigners"],["value","data","parsed","info","numValidSigners"],["value","data","parsed","info","stake","delegation","warmupCooldownRate"],["value","data","parsed","info","exemptionThreshold"],["value","data","parsed","info","burnPercent"],["value","data","parsed","info","commission"],["value","data","parsed","info","votes",l,"confirmationCount"]],getBlockTime:[[]],getInflationReward:[[l,"commission"]],getRecentPerformanceSamples:[[l,"samplePeriodSecs"]],getTokenLargestAccounts:[["value",l,"decimals"],["value",l,"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"]],getVoteAccounts:[["current",l,"commission"],["delinquent",l,"commission"]]};function q(e,r){return e.filter(t=>t[0]===l&&typeof r=="number"||t[0]===r).map(t=>t.slice(1))}function L(e,r){if(Array.isArray(e))return e.map((t,n)=>{let o=q(r,n);return L(t,o)});if(typeof e=="object"&&e!==null){let t={};for(let[n,o]of Object.entries(e)){let i=q(r,n);t[n]=L(o,i);}return t}else return typeof e=="number"&&r.length===0&&Number.isInteger(e)?BigInt(e):e}function ze(e,r){let t=r?Ae[r]:void 0;return L(e,t??[])}function V(e){return new Proxy({},{defineProperty(){return !1},deleteProperty(){return !1},get(...r){let[t,n]=r,o=n.toString();return function(...i){let a=e?.onIntegerOverflow,u=Ie(i,a?(c,f)=>a(o,c,f):void 0);return {methodName:o,params:u,responseProcessor:c=>ze(c,o)}}}})}s();var Ne=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"}},$=0;function Ce(){let e=$;return $=($+1)%Number.MAX_SAFE_INTEGER,e}function ve(e,r){return {id:Ce(),jsonrpc:"2.0",method:e,params:r}}function _e(e,r){return {async send(t){let{methodName:n,params:o,responseProcessor:i}=r,a=ve(n,o),u=await e.transport({payload:a,signal:t?.abortSignal});if("error"in u)throw new Ne(u.error);return i?i(u.result):u.result}}}function Be(e){return new Proxy(e.api,{defineProperty(){return !1},deleteProperty(){return !1},get(r,t,n){return function(...o){let i=t.toString(),a=Reflect.get(r,i,n),u=a?a(...o):{methodName:i,params:o};return _e(e,u)}}})}function G(e){return Be(e)}var Oe=globalThis.fetch,De=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 ke(e){let r={};for(let t in e)r[t.toLowerCase()]=e[t];return r}function J({httpAgentNodeOnly:e,headers:r,url:t}){let n=void 0;let o=r&&ke(r);return async function({payload:a,signal:u}){let c=JSON.stringify(a),f={agent:n,body:c,headers:{...o,accept:"application/json","content-length":c.length.toString(),"content-type":"application/json; charset=utf-8"},method:"POST",signal:u},d=await Oe(t,f);if(!d.ok)throw new De({message:d.statusText,statusCode:d.status});return await d.json()}}s();s();var A=class extends Error{constructor(t,n,o){let i=(typeof n[0]=="number"?n[0]:parseInt(n[0],10))+1,a="",u=i%10,c=i%100;u==1&&c!=11?a=i+"st":u==2&&c!=12?a=i+"nd":u==3&&c!=13?a=i+"rd":a=i+"th";let f=n.length>1?n.slice(1).map(d=>typeof d=="number"?`[${d}]`:d).join("."):null;super(`The ${a} argument to the \`${t}\` RPC method${f?` at path \`${f}\``:""} 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=t,this.value=o;}get name(){return "SolanaJsonRpcIntegerOverflowError"}};var M={onIntegerOverflow(e,r,t){throw new A(e,r,t)}};function Ot(e){return G({...e,api:V(M)})}s();s();function X(e,r){let t;return async function(o){let{payload:i,signal:a}=o,u=r(i);if(u===void 0)return await e(o);if(t||(Promise.resolve().then(()=>{t=void 0;}),t={}),t[u]==null){let f=new AbortController;t[u]={abortController:f,numConsumers:0,responsePromise:e({...o,signal:f.signal})};}let c=t[u];if(c.numConsumers++,a){let f=c.responsePromise;return await new Promise((d,m)=>{let z=re=>{a.removeEventListener("abort",z),c.numConsumers-=1,c.numConsumers===0&&c.abortController.abort();let te=new DOMException(re.target.reason,"AbortError");m(te);};a.addEventListener("abort",z),f.then(d).finally(()=>{a.removeEventListener("abort",z);});})}else return await c.responsePromise}}s();var Q=fe(Z(),1);function ee(e){if(!(e==null||typeof e!="object"||Array.isArray(e))&&"jsonrpc"in e&&e.jsonrpc==="2.0"&&"method"in e&&"params"in e)return (0, Q.default)([e.method,e.params])}function Fe(e){let r={};for(let t in e)r[t.toLowerCase()]=e[t];return r}function Vt(e){return X(J({...e,headers:{...e.headers?Fe(e.headers):void 0,"solana-client":"js/2.0.0-development"}}),ee)}
|
|
9
|
+
For a list of runtimes that currently support Ed25519 operations, visit https://github.com/WICG/webcrypto-secure-curves/issues/20`)}async function _e(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.exportKey!="function")throw new Error("No key export implementation could be found")}async function Ce(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.sign!="function")throw new Error("No signing implementation could be found")}async function Be(){if(H(),typeof globalThis.crypto>"u"||typeof globalThis.crypto.subtle?.verify!="function")throw new Error("No signature verification implementation could be found")}function vo(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let t=P.serialize(e).byteLength;if(t!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${t}`)}catch(r){throw new Error(`\`${e}\` is not a base-58 encoded address`,{cause:r})}}function M(e){return K({description:e?.description??(""),encoding:P,size:32})}function ce(){return new Intl.Collator("en",{caseFirst:"lower",ignorePunctuation:!1,localeMatcher:"best fit",numeric:!1,sensitivity:"variant",usage:"sort"}).compare}var Rr=37095705934669439343138083508754565189542113879843219016388785533085940283555n,S=57896044618658097711785492504343953926634992332820282019728792003956564819949n,Oe=19681161376707505956807079304988542015446066515923890162744021073123829784752n;function T(e){let r=e%S;return r>=0n?r:S+r}function N(e,r){let t=e;for(;r-- >0n;)t*=t,t%=S;return t}function vr(e){let t=e*e%S*e%S,n=N(t,2n)*t%S,o=N(n,1n)*e%S,s=N(o,5n)*o%S,i=N(s,10n)*s%S,c=N(i,20n)*i%S,l=N(c,40n)*c%S,d=N(l,80n)*l%S,f=N(d,80n)*l%S,m=N(f,10n)*s%S;return N(m,2n)*e%S}function Nr(e,r){let t=T(r*r*r),n=T(t*t*r),o=vr(e*n),s=T(e*t*o),i=T(r*s*s),c=s,l=T(s*Oe),d=i===e,f=i===T(-e),m=i===T(-e*Oe);return d&&(s=c),(f||m)&&(s=l),(T(s)&1n)===1n&&(s=T(-s)),!d&&!f?null:s}function kr(e,r){let t=T(e*e),n=T(t-1n),o=T(Rr*t+1n),s=Nr(n,o);if(s===null)return !1;let i=(r&128)!==0;return !(s===0n&&i)}function _r(e){let r=e.toString(16);return r.length===1?`0${r}`:r}function Cr(e){let t=`0x${e.reduce((n,o,s)=>`${_r(s===31?o&-129:o)}${n}`,"")}`;return BigInt(t)}async function Br(e){if(e.byteLength!==32)return !1;let r=Cr(e);return kr(r,e[31])}var Pe=32,Le=16,ae=[80,114,111,103,114,97,109,68,101,114,105,118,101,100,65,100,100,114,101,115,115],De=class extends Error{};async function Or({programAddress:e,seeds:r}){if(await Ne(),r.length>Le)throw new Error(`A maximum of ${Le} seeds may be supplied when creating an address`);let t,n=r.reduce((l,d,f)=>{let m=typeof d=="string"?(t||(t=new TextEncoder)).encode(d):d;if(m.byteLength>Pe)throw new Error(`The seed at index ${f} exceeds the maximum length of 32 bytes`);return l.push(...m),l},[]),o=M(),s=o.serialize(e),i=await crypto.subtle.digest("SHA-256",new Uint8Array([...n,...s,...ae])),c=new Uint8Array(i);if(await Br(c))throw new De("Invalid seeds; point must fall off the Ed25519 curve");return o.deserialize(c)[0]}async function No({programAddress:e,seeds:r}){let t=255;for(;t>0;)try{return {bumpSeed:t,pda:await Or({programAddress:e,seeds:[...r,new Uint8Array([t])]})}}catch(n){if(n instanceof De)t--;else throw n}throw new Error("Unable to find a viable program address bump seed")}async function ko({baseAddress:e,programAddress:r,seed:t}){let{serialize:n,deserialize:o}=M(),s=typeof t=="string"?new TextEncoder().encode(t):t;if(s.byteLength>Pe)throw new Error("The seed exceeds the maximum length of 32 bytes");let i=n(r);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 c=await crypto.subtle.digest("SHA-256",new Uint8Array([...n(e),...s,...i])),l=new Uint8Array(c);return o(l)[0]}async function $e(e){if(await _e(),e.type!=="public"||e.algorithm.name!=="Ed25519")throw new Error("The `CryptoKey` must be an `Ed25519` public key");let r=await crypto.subtle.exportKey("raw",e),[t]=M().deserialize(new Uint8Array(r));return t}a();var Lr=(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))(Lr||{}),Ue=2,ge=1;function Oo(e){return e&~Ue}function Lo(e){return e&~ge}function Po(e){return e>=2}function Do(e){return (e&ge)!==0}function $o(e,r){return e|r}function Uo(e){return e|Ue}function Mo(e){return e|ge}a();async function Ko(){return await ke(),await crypto.subtle.generateKey("Ed25519",!1,["sign","verify"])}async function Me(e,r){await Ce();let t=await crypto.subtle.sign("Ed25519",e,r);return new Uint8Array(t)}async function Ho(e,r,t){return await Be(),await crypto.subtle.verify("Ed25519",e,r,t)}a();function q(e){if("signatures"in e){let{signatures:r,...t}=e;return t}else return e}function Xo(e){try{if(e.length<32||e.length>44)throw new Error("Expected input string to decode to a byte array of length 32.");let t=P.serialize(e).byteLength;if(t!==32)throw new Error(`Expected input string to decode to a byte array of length 32. Actual length: ${t}`)}catch(r){throw new Error(`\`${e}\` is not a blockhash`,{cause:r})}}function Zo(e,r){if("lifetimeConstraint"in r&&r.lifetimeConstraint.blockhash===e.blockhash&&r.lifetimeConstraint.lastValidBlockHeight===e.lastValidBlockHeight)return r;let t={...q(r),lifetimeConstraint:e};return Object.freeze(t),t}function Qo({version:e}){let r={instructions:[],version:e};return Object.freeze(r),r}var R=(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))(R||{}),Pr=1;function G(e){return e>=2}function V(e){return (e&Pr)!==0}function We(e,r){return e|r}var Ke="SysvarRecentB1ockHashes11111111111111111111",He="11111111111111111111111111111111";function es(e){if(!Ge(e))throw new Error("Transaction is not a durable nonce transaction")}function Dr(e,r){return {accounts:[{address:e,role:R.WRITABLE},{address:Ke,role:R.READONLY},{address:r,role:R.READONLY_SIGNER}],data:new Uint8Array([4,0,0,0]),programAddress:He}}function $r(e){return e.programAddress===He&&e.data!=null&&Ur(e.data)&&e.accounts?.length===3&&e.accounts[0].address!=null&&e.accounts[0].role===R.WRITABLE&&e.accounts[1].address===Ke&&e.accounts[1].role===R.READONLY&&e.accounts[2].address!=null&&e.accounts[2].role===R.READONLY_SIGNER}function Ur(e){return e.byteLength===4&&e[0]===4&&e[1]===0&&e[2]===0&&e[3]===0}function Ge(e){return "lifetimeConstraint"in e&&typeof e.lifetimeConstraint.nonce=="string"&&e.instructions[0]!=null&&$r(e.instructions[0])}function rs({nonce:e,nonceAccountAddress:r,nonceAuthorityAddress:t},n){let o=Ge(n);if(o&&n.lifetimeConstraint.nonce===e&&n.instructions[0].accounts[0].address===r&&n.instructions[0].accounts[2].address===t)return n;let s={...q(n),instructions:[Dr(r,t),...o?n.instructions.slice(1):n.instructions],lifetimeConstraint:{nonce:e}};return Object.freeze(s),s}function ts(e,r){if("feePayer"in r&&e===r.feePayer)return r;let t={...q(r),feePayer:e};return Object.freeze(t),t}function ns(e,r){let t={...q(r),instructions:[...r.instructions,e]};return Object.freeze(t),t}function os(e,r){let t={...q(r),instructions:[e,...r.instructions]};return Object.freeze(t),t}function Fe(e,r,t){e[r]=t(e[r]??{role:R.READONLY});}var h=Symbol("AddressMapTypeProperty");function Mr(e,r){let t={[e]:{[h]:0,role:R.WRITABLE_SIGNER}},n=new Set;for(let o of r){Fe(t,o.programAddress,i=>{if(n.add(o.programAddress),h in i){if(V(i.role))switch(i[h]){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[h]===2)return i}return {[h]:2,role:R.READONLY}});let s;if(o.accounts)for(let i of o.accounts)Fe(t,i.address,c=>{let{address:l,...d}=i;if(h in c)switch(c[h]){case 0:return c;case 1:{let f=We(c.role,d.role);if("lookupTableAddress"in d){if(c.lookupTableAddress!==d.lookupTableAddress&&(s||(s=ce()))(d.lookupTableAddress,c.lookupTableAddress)<0)return {[h]:1,...d,role:f}}else if(G(d.role))return {[h]:2,role:f};return c.role!==f?{...c,role:f}:c}case 2:{let f=We(c.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 c.role!==f?{...c,role:f}:c}else return "lookupTableAddress"in d&&!G(c.role)?{...d,[h]:1,role:f}:c.role!==f?{...c,role:f}:c}}return "lookupTableAddress"in d?{...d,[h]:1}:{...d,[h]:2}});}return t}function Wr(e){let r;return Object.entries(e).sort(([n,o],[s,i])=>{if(o[h]!==i[h]){if(o[h]===0)return -1;if(i[h]===0)return 1;if(o[h]===2)return -1;if(i[h]===2)return 1}let c=G(o.role);if(c!==G(i.role))return c?-1:1;let l=V(o.role);return l!==V(i.role)?l?-1:1:(r||(r=ce()),o[h]===1&&i[h]===1&&o.lookupTableAddress!==i.lookupTableAddress?r(o.lookupTableAddress,i.lookupTableAddress):r(n,s))}).map(([n,o])=>({address:n,...o}))}function Fr(e){var r;let t={};for(let n of e){if(!("lookupTableAddress"in n))continue;let o=t[r=n.lookupTableAddress]||(t[r]={readableIndices:[],writableIndices:[]});n.role===R.WRITABLE?o.writableIndices.push(n.addressIndex):o.readableIndices.push(n.addressIndex);}return Object.keys(t).sort(ce()).map(n=>({lookupTableAddress:n,...t[n]}))}function jr(e){let r=0,t=0,n=0;for(let o of e){if("lookupTableAddress"in o)break;let s=V(o.role);G(o.role)?(n++,s||t++):s||r++;}return {numReadonlyNonSignerAccounts:r,numReadonlySignerAccounts:t,numSignerAccounts:n}}function Kr(e){let r={};for(let[t,n]of e.entries())r[n.address]=t;return r}function Hr(e,r){let t=Kr(r);return e.map(({accounts:n,data:o,programAddress:s})=>({programAddressIndex:t[s],...n?{accountIndices:n.map(({address:i})=>t[i])}:null,...o?{data:o}:null}))}function Gr(e){return "nonce"in e?e.nonce:e.blockhash}function Vr(e){let r=e.findIndex(n=>"lookupTableAddress"in n);return (r===-1?e:e.slice(0,r)).map(({address:n})=>n)}function Ve(e){let r=Mr(e.feePayer,e.instructions),t=Wr(r);return {...e.version!=="legacy"?{addressTableLookups:Fr(t)}:null,header:jr(t),instructions:Hr(e.instructions,t),lifetimeToken:Gr(e.lifetimeConstraint),staticAccounts:Vr(t),version:e.version}}function qr(){return O([["lookupTableAddress",M(void 0)],["writableIndices",B(C(),{...null,size:v()})],["readableIndices",B(C(),{...void 0,size:v()})]],void 0)}function Jr(){return O([["numSignerAccounts",C(void 0)],["numReadonlySignerAccounts",C(void 0)],["numReadonlyNonSignerAccounts",C(void 0)]],void 0)}function Yr(){return Z(O([["programAddressIndex",C(void 0)],["accountIndices",B(C({description:""}),{description:"",size:v()})],["data",ie({description:"",size:v()})]]),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:r,data:t,...n}=e;return {...n,...r.length?{accountIndices:r}:null,...t.byteLength?{data:t}:null}})}function Xr(e,r){let t=r+e[0].toUpperCase()+e.slice(1);return new Error(`No ${e} exists for ${r}. Use \`get${t}()\` if you need a ${e}, and \`get${r}Codec()\` if you need to both encode and decode ${r}`)}function qe(e){return ()=>{throw Xr("decoder",e)}}var he=128,Zr={description:"",fixedSize:null,maxSize:1};function Qr(e,r=0){let t=e[r];return t&he?[t^he,r+1]:["legacy",r]}function et(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 rt(){return {...Zr,deserialize:Qr,serialize:et}}var tt={description:"",fixedSize:null,maxSize:null};function nt(e){return e.version==="legacy"?O(je()).serialize(e):Z(O([...je(),["addressTableLookups",ot()]]),r=>r.version==="legacy"?r:{...r,addressTableLookups:r.addressTableLookups??[]}).serialize(e)}function je(){return [["version",rt()],["header",Jr()],["staticAccounts",B(M(),{description:"",size:v()})],["lifetimeToken",K({description:"",encoding:P,size:32})],["instructions",B(Yr(),{description:"",size:v()})]]}function ot(){return B(qr(),{...null,size:v()})}function Je(){return {...tt,deserialize:qe("CompiledMessage"),serialize:nt}}async function st(e,r){let t=Je().serialize(e);return await Me(r,t)}async function ss(e,r){let t=Ve(r),[n,o]=await Promise.all([$e(e.publicKey),st(t,e.privateKey)]),s={..."signatures"in r?r.signatures:null,[n]:o},i={...r,signatures:s};return Object.freeze(i),i}function it(e){let r=Ve(e),t;if("signatures"in e){t=[];for(let n=0;n<r.header.numSignerAccounts;n++)t[n]=e.signatures[r.staticAccounts[n]]??new Uint8Array(Array(64).fill(0));}else t=Array(r.header.numSignerAccounts).fill(new Uint8Array(Array(64).fill(0)));return {compiledMessage:r,signatures:t}}var at={description:"",fixedSize:null,maxSize:null};function ct(e){let r=it(e);return O([["signatures",B(ie({size:64}),{...null,size:v()})],["compiledMessage",Je()]]).serialize(r)}function ut(){return {...at,deserialize:qe("CompiledMessage"),serialize:ct}}function is(e){let r=ut().serialize(e);return btoa(String.fromCharCode(...r))}a();a();function we(e,r,t){if(Array.isArray(e))return e.map((n,o)=>we(n,[...r,o],t));if(typeof e=="object"&&e!==null){let n={};for(let o in e)Object.prototype.hasOwnProperty.call(e,o)&&(n[o]=we(e[o],[...r,o],t));return n}else return typeof e=="bigint"?(t&&(e>Number.MAX_SAFE_INTEGER||e<-Number.MAX_SAFE_INTEGER)&&t(r,e),Number(e)):e}function Xe(e,r){return we(e,[],r)}var u={},be,ye;function lt(){return be||(be={}),be}function dt(){if(!ye){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",u,"state","olderTransferFee","transferFeeBasisPoints"],["data","parsed","info","extensions",u,"state","newerTransferFee","transferFeeBasisPoints"],["data","parsed","info","extensions",u,"state","preUpdateAverageRate"],["data","parsed","info","extensions",u,"state","currentRate"]],r=[...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",u,"confirmationCount"]];ye={getAccountInfo:r.map(t=>["value",...t]),getBlock:[["blockTime"],["transactions",u,"meta","preTokenBalances",u,"accountIndex"],["transactions",u,"meta","preTokenBalances",u,"uiTokenAmount","decimals"],["transactions",u,"meta","postTokenBalances",u,"accountIndex"],["transactions",u,"meta","postTokenBalances",u,"uiTokenAmount","decimals"],["transactions",u,"meta","rewards",u,"commission"],["transactions",u,"meta","innerInstructions",u,"index"],["transactions",u,"meta","innerInstructions",u,"instructions",u,"programIdIndex"],["transactions",u,"meta","innerInstructions",u,"instructions",u,"accounts",u],["transactions",u,"transaction","message","addressTableLookups",u,"writableIndexes",u],["transactions",u,"transaction","message","addressTableLookups",u,"readonlyIndexes",u],["transactions",u,"transaction","message","instructions",u,"programIdIndex"],["transactions",u,"transaction","message","instructions",u,"accounts",u],["transactions",u,"transaction","message","header","numReadonlySignedAccounts"],["transactions",u,"transaction","message","header","numReadonlyUnsignedAccounts"],["transactions",u,"transaction","message","header","numRequiredSignatures"],["rewards",u,"commission"]],getBlockTime:[[]],getClusterNodes:[[u,"featureSet"],[u,"shredVersion"]],getInflationGovernor:[["initial"],["foundation"],["foundationTerm"],["taper"],["terminal"]],getInflationRate:[["foundation"],["total"],["validator"]],getInflationReward:[[u,"commission"]],getMultipleAccounts:r.map(t=>["value",u,...t]),getProgramAccounts:r.flatMap(t=>[["value",u,"account",...t],[u,"account",...t]]),getRecentPerformanceSamples:[[u,"samplePeriodSecs"]],getTokenAccountBalance:[["value","decimals"],["value","uiAmount"]],getTokenAccountsByDelegate:e.map(t=>["value",u,"account",...t]),getTokenAccountsByOwner:e.map(t=>["value",u,"account",...t]),getTokenLargestAccounts:[["value",u,"decimals"],["value",u,"uiAmount"]],getTokenSupply:[["value","decimals"],["value","uiAmount"]],getTransaction:[["meta","preTokenBalances",u,"accountIndex"],["meta","preTokenBalances",u,"uiTokenAmount","decimals"],["meta","postTokenBalances",u,"accountIndex"],["meta","postTokenBalances",u,"uiTokenAmount","decimals"],["meta","rewards",u,"commission"],["meta","innerInstructions",u,"index"],["meta","innerInstructions",u,"instructions",u,"programIdIndex"],["meta","innerInstructions",u,"instructions",u,"accounts",u],["transaction","message","addressTableLookups",u,"writableIndexes",u],["transaction","message","addressTableLookups",u,"readonlyIndexes",u],["transaction","message","instructions",u,"programIdIndex"],["transaction","message","instructions",u,"accounts",u],["transaction","message","header","numReadonlySignedAccounts"],["transaction","message","header","numReadonlyUnsignedAccounts"],["transaction","message","header","numRequiredSignatures"]],getVersion:[["feature-set"]],getVoteAccounts:[["current",u,"commission"],["delinquent",u,"commission"]],simulateTransaction:r.map(t=>["value","accounts",u,...t])};}return ye}function Ye(e,r){return e.filter(t=>t[0]===u&&typeof r=="number"||t[0]===r).map(t=>t.slice(1))}function ue(e,r){if(Array.isArray(e))return e.map((t,n)=>{let o=Ye(r,n);return ue(t,o)});if(typeof e=="object"&&e!==null){let t={};for(let[n,o]of Object.entries(e)){let s=Ye(r,n);t[n]=ue(o,s);}return t}else return typeof e=="number"&&r.length===0&&Number.isInteger(e)?BigInt(e):e}function ft(e,r){let t=r?dt()[r]:void 0;return ue(e,t??[])}function pt(e,r){let t=r?lt()[r]:void 0;return ue(e,t??[])}function Ze(e){return new Proxy({},{defineProperty(){return !1},deleteProperty(){return !1},get(...r){let[t,n]=r,o=n.toString();return function(...s){let i=e?.onIntegerOverflow,c=Xe(s,i?(l,d)=>i(o,l,d):void 0);return {methodName:o,params:c,responseProcessor:l=>ft(l,o)}}}})}function Qe(e){return new Proxy({},{defineProperty(){return !1},deleteProperty(){return !1},get(...r){let[t,n]=r,o=n.toString();return function(...s){let i=e?.onIntegerOverflow;return {params:Xe(s,i?(l,d)=>i(o,l,d):void 0),responseProcessor:l=>pt(l,o),subscribeMethodName:o.replace(/Notifications$/,"Subscribe"),unsubscribeMethodName:o.replace(/Notifications$/,"Unsubscribe")}}}})}a();var rr=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"}},Se=0;function mt(){let e=Se;return Se=(Se+1)%Number.MAX_SAFE_INTEGER,e}function xe(e,r){return {id:mt(),jsonrpc:"2.0",method:e,params:r}}function gt(e,r){return {async send(t){let{methodName:n,params:o,responseProcessor:s}=r,i=xe(n,o),c=await e.transport({payload:i,signal:t?.abortSignal});if("error"in c)throw new rr(c.error);return s?s(c.result):c.result}}}function ht(e){return new Proxy(e.api,{defineProperty(){return !1},deleteProperty(){return !1},get(r,t,n){return function(...o){let s=t.toString(),i=Reflect.get(r,s,n),c=i?i(...o):{methodName:s,params:o};return gt(e,c)}}})}function tr(e){return ht(e)}function bt(e,r){(async()=>{try{for await(let t of e);}catch(t){r(t);}})();}function yt(e,{params:r,subscribeMethodName:t,unsubscribeMethodName:n,responseProcessor:o}){return {async subscribe(s){s?.abortSignal?.throwIfAborted();let i;function c(){if(i!==void 0){let y=xe(n,[i]);f.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(y).finally(()=>{l.abort();});}else l.abort();}s?.abortSignal?.addEventListener("abort",c);let l=new AbortController,d=xe(t,r),f=await e.transport({payload:d,signal:l.signal});function m(){s?.abortSignal?.removeEventListener("abort",c);}bt(f,m);for await(let y of f)if("id"in y&&y.id===d.id){if("error"in y)throw new rr(y.error);i=y.result;break}if(i==null)throw new Error("Failed to obtain a subscription id from the server");return {async*[Symbol.asyncIterator](){for await(let y of f){if(!("params"in y)||y.params.subscription!==i)continue;let g=y.params.result;yield o?o(g):g;}}}}}}function wt(e){return new Proxy(e.api,{defineProperty(){return !1},deleteProperty(){return !1},get(r,t,n){return function(...o){let s=t.toString(),i=Reflect.get(r,s,n);if(t.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 c=i?i(...o):{params:o,subscribeMethodName:s.replace(/Notifications$/,"Subscribe"),unsubscribeMethodName:s.replace(/Notifications$/,"Unsubscribe")};return yt(e,c)}}})}function nr(e){return wt(e)}var St=globalThis.fetch,xt=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 Tt(e){let r={};for(let t in e)r[t.toLowerCase()]=e[t];return r}function or({httpAgentNodeOnly:e,headers:r,url:t}){let n=void 0;let o=r&&Tt(r);return async function({payload:i,signal:c}){let l=JSON.stringify(i),d={agent:n,body:l,headers:{...o,accept:"application/json","content-length":l.length.toString(),"content-type":"application/json; charset=utf-8"},method:"POST",signal:c},f=await St(t,d);if(!f.ok)throw new xt({message:f.statusText,statusCode:f.status});return await f.json()}}var J=globalThis.WebSocket;async function zt({sendBufferHighWatermark:e,signal:r,url:t}){return new Promise((n,o)=>{r.addEventListener("abort",i,{once:!0});let s=new Map;function i(){g.readyState!==J.CLOSED&&g.readyState!==J.CLOSING&&g.close(1e3);}function c(x){f?.onCancel(),r.removeEventListener("abort",i),g.removeEventListener("close",c),g.removeEventListener("error",l),g.removeEventListener("open",m),g.removeEventListener("message",y),s.forEach((E,A)=>{if(E.__hasPolled){let{onError:w}=E;s.delete(A),w(x);}else s.delete(A);});}function l(x){d||o(new Error("WebSocket failed to connect",{cause:x}));}let d=!1,f;function m(){d=!0,n({async send(x){let E=JSON.stringify(x);if(!f&&g.readyState===J.OPEN&&g.bufferedAmount>e){let A,w=new Promise((W,dr)=>{let Ae=setInterval(()=>{(g.readyState!==J.OPEN||!(g.bufferedAmount>e))&&(clearInterval(Ae),f=void 0,W());},16);A=()=>{f=void 0,clearInterval(Ae),dr(new Error("WebSocket was closed before payload could be sent"));};});f={onCancel:A,promise:w};}f&&await f.promise,g.send(E);},async*[Symbol.asyncIterator](){let x=Symbol();s.set(x,{__hasPolled:!1,queuedMessages:[]});try{for(;;){let E=s.get(x);if(!E)throw new Error("Invariant: WebSocket message iterator is missing state storage");if(E.__hasPolled)throw new Error("Invariant: WebSocket message iterator state is corrupt; iterated without first resolving existing message promise");let A=E.queuedMessages;if(A.length)E.queuedMessages=[],yield*A;else try{yield await new Promise((w,W)=>{s.set(x,{__hasPolled:!0,onError:W,onMessage:w});});}catch(w){if(w!==null&&typeof w=="object"&&"type"in w&&w.type==="close"&&"wasClean"in w&&w.wasClean)return;throw new Error("WebSocket connection closed",{cause:w})}}}finally{s.delete(x);}}});}function y({data:x}){let E=JSON.parse(x);s.forEach((A,w)=>{if(A.__hasPolled){let{onMessage:W}=A;s.set(w,{__hasPolled:!1,queuedMessages:[]}),W(E);}else A.queuedMessages.push(E);});}let g=new J(t);g.addEventListener("close",c),g.addEventListener("error",l),g.addEventListener("open",m),g.addEventListener("message",y);})}function sr({sendBufferHighWatermark:e,url:r}){if(/^wss?:/i.test(r)===!1){let t=r.match(/^([^:]+):/);throw new DOMException(t?`Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${t[1]}:' is not allowed.`:`Failed to construct 'WebSocket': The URL '${r}' is invalid.`)}return async function({payload:n,signal:o}){o?.throwIfAborted();let s=await zt({sendBufferHighWatermark:e,signal:o,url:r});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)}}}a();a();var le=class extends Error{constructor(t,n,o){let s=(typeof n[0]=="number"?n[0]:parseInt(n[0],10))+1,i="",c=s%10,l=s%100;c==1&&l!=11?i=s+"st":c==2&&l!=12?i=s+"nd":c==3&&l!=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 \`${t}\` 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=t,this.value=o;}get name(){return "SolanaJsonRpcIntegerOverflowError"}};var Ee={onIntegerOverflow(e,r,t){throw new le(e,r,t)}};function Ts(e){return tr({...e,api:Ze(Ee)})}function zs(e){return nr({...e,api:Qe(Ee)})}a();a();function ir(e,r){let t;return async function(o){let{payload:s,signal:i}=o,c=r(s);if(c===void 0)return await e(o);if(t||(Promise.resolve().then(()=>{t=void 0;}),t={}),t[c]==null){let d=new AbortController;t[c]={abortController:d,numConsumers:0,responsePromise:e({...o,signal:d.signal})};}let l=t[c];if(l.numConsumers++,i){let d=l.responsePromise;return await new Promise((f,m)=>{let y=g=>{i.removeEventListener("abort",y),l.numConsumers-=1,l.numConsumers===0&&l.abortController.abort();let x=new DOMException(g.target.reason,"AbortError");m(x);};i.addEventListener("abort",y),d.then(f).finally(()=>{i.removeEventListener("abort",y);});})}else return await l.responsePromise}}a();var ur=xr(cr(),1);function lr(e){if(!(e==null||typeof e!="object"||Array.isArray(e))&&"jsonrpc"in e&&e.jsonrpc==="2.0"&&"method"in e&&"params"in e)return (0, ur.default)([e.method,e.params])}function Nt(e){let r={};for(let t in e)r[t.toLowerCase()]=e[t];return r}function $s(e){return ir(or({...e,headers:{...e.headers?Nt(e.headers):void 0,"solana-client":"js/2.0.0-development"}}),lr)}a();function Fs(e){return sr({...e,sendBufferHighWatermark:e.sendBufferHighWatermark??131072})}
|
|
10
10
|
|
|
11
|
-
exports.AccountRole =
|
|
12
|
-
exports.
|
|
13
|
-
exports.
|
|
14
|
-
exports.
|
|
15
|
-
exports.
|
|
16
|
-
exports.
|
|
17
|
-
exports.
|
|
18
|
-
exports.
|
|
19
|
-
exports.
|
|
20
|
-
exports.
|
|
21
|
-
exports.
|
|
22
|
-
exports.
|
|
23
|
-
exports.
|
|
24
|
-
exports.
|
|
25
|
-
exports.
|
|
26
|
-
exports.
|
|
27
|
-
exports.
|
|
11
|
+
exports.AccountRole = Lr;
|
|
12
|
+
exports.appendTransactionInstruction = ns;
|
|
13
|
+
exports.assertIsBase58EncodedAddress = vo;
|
|
14
|
+
exports.assertIsBlockhash = Xo;
|
|
15
|
+
exports.assertIsDurableNonceTransaction = es;
|
|
16
|
+
exports.createAddressWithSeed = ko;
|
|
17
|
+
exports.createDefaultRpcSubscriptionsTransport = Fs;
|
|
18
|
+
exports.createDefaultRpcTransport = $s;
|
|
19
|
+
exports.createSolanaRpc = Ts;
|
|
20
|
+
exports.createSolanaRpcSubscriptions = zs;
|
|
21
|
+
exports.createTransaction = Qo;
|
|
22
|
+
exports.downgradeRoleToNonSigner = Oo;
|
|
23
|
+
exports.downgradeRoleToReadonly = Lo;
|
|
24
|
+
exports.generateKeyPair = Ko;
|
|
25
|
+
exports.getAddressFromPublicKey = $e;
|
|
26
|
+
exports.getBase58EncodedAddressCodec = M;
|
|
27
|
+
exports.getBase58EncodedAddressComparator = ce;
|
|
28
|
+
exports.getBase64EncodedWireTransaction = is;
|
|
29
|
+
exports.getProgramDerivedAddress = No;
|
|
30
|
+
exports.isSignerRole = Po;
|
|
31
|
+
exports.isWritableRole = Do;
|
|
32
|
+
exports.mergeRoles = $o;
|
|
33
|
+
exports.prependTransactionInstruction = os;
|
|
34
|
+
exports.setTransactionFeePayer = ts;
|
|
35
|
+
exports.setTransactionLifetimeUsingBlockhash = Zo;
|
|
36
|
+
exports.setTransactionLifetimeUsingDurableNonce = rs;
|
|
37
|
+
exports.signBytes = Me;
|
|
38
|
+
exports.signTransaction = ss;
|
|
39
|
+
exports.upgradeRoleToSigner = Uo;
|
|
40
|
+
exports.upgradeRoleToWritable = Mo;
|
|
41
|
+
exports.verifySignature = Ho;
|
|
28
42
|
|
|
29
43
|
return exports;
|
|
30
44
|
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
+
export * from '@solana/addresses';
|
|
1
2
|
export * from '@solana/instructions';
|
|
2
3
|
export * from '@solana/keys';
|
|
4
|
+
export * from '@solana/transactions';
|
|
3
5
|
export * from './rpc';
|
|
4
6
|
export * from './rpc-transport';
|
|
7
|
+
export * from './rpc-websocket-transport';
|
|
5
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createWebSocketTransport } from '@solana/rpc-transport';
|
|
2
|
+
import { IRpcWebSocketTransport } from '@solana/rpc-transport/dist/types/transports/transport-types';
|
|
3
|
+
export declare function createDefaultRpcSubscriptionsTransport(config: Omit<Parameters<typeof createWebSocketTransport>[0], 'sendBufferHighWatermark'> & {
|
|
4
|
+
sendBufferHighWatermark?: number;
|
|
5
|
+
}): IRpcWebSocketTransport;
|
|
6
|
+
//# sourceMappingURL=rpc-websocket-transport.d.ts.map
|
package/dist/types/rpc.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { SolanaRpcMethods } from '@solana/rpc-core';
|
|
2
|
-
import { createJsonRpc } from '@solana/rpc-transport';
|
|
3
|
-
import type { Rpc } from '@solana/rpc-transport/dist/types/json-rpc-types';
|
|
1
|
+
import { SolanaRpcMethods, SolanaRpcSubscriptions } from '@solana/rpc-core';
|
|
2
|
+
import { createJsonRpc, createJsonSubscriptionRpc } from '@solana/rpc-transport';
|
|
3
|
+
import type { Rpc, RpcSubscriptions } from '@solana/rpc-transport/dist/types/json-rpc-types';
|
|
4
4
|
export declare function createSolanaRpc(config: Omit<Parameters<typeof createJsonRpc>[0], 'api'>): Rpc<SolanaRpcMethods>;
|
|
5
|
+
export declare function createSolanaRpcSubscriptions(config: Omit<Parameters<typeof createJsonSubscriptionRpc>[0], 'api'>): RpcSubscriptions<SolanaRpcSubscriptions>;
|
|
5
6
|
//# sourceMappingURL=rpc.d.ts.map
|