@solana/rpc-transport
Advanced tools
Comparing version 2.0.0-experimental.982fafd to 2.0.0-experimental.9bf9fdb
@@ -36,4 +36,4 @@ // ../build-scripts/env-shim.ts | ||
// src/json-rpc.ts | ||
function createArmedJsonRpc(rpcConfig, pendingRequest) { | ||
const overrides = { | ||
function createPendingRpcRequest(rpcConfig, pendingRequest) { | ||
return { | ||
async send(options) { | ||
@@ -53,26 +53,4 @@ const { methodName, params, responseProcessor } = pendingRequest; | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequest); | ||
} | ||
function createArmedBatchJsonRpc(rpcConfig, pendingRequests) { | ||
const overrides = { | ||
async sendBatch(options) { | ||
const payload = pendingRequests.map(({ methodName, params }) => createJsonRpcMessage(methodName, params)); | ||
const responses = await rpcConfig.transport({ | ||
payload, | ||
signal: options?.abortSignal | ||
}); | ||
const requestOrder = payload.map((p) => p.id); | ||
return responses.sort((a, b) => requestOrder.indexOf(a.id) - requestOrder.indexOf(b.id)).map((response, ii) => { | ||
if ("error" in response) { | ||
throw new SolanaJsonRpcError(response.error); | ||
} else { | ||
const { responseProcessor } = pendingRequests[ii]; | ||
return responseProcessor ? responseProcessor(response.result) : response.result; | ||
} | ||
}); | ||
} | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequests); | ||
} | ||
function makeProxy(rpcConfig, overrides, pendingRequestOrRequests) { | ||
function makeProxy(rpcConfig) { | ||
return new Proxy(rpcConfig.api, { | ||
@@ -86,5 +64,2 @@ defineProperty() { | ||
get(target, p, receiver) { | ||
if (overrides && Reflect.has(overrides, p)) { | ||
return Reflect.get(overrides, p, receiver); | ||
} | ||
return function(...rawParams) { | ||
@@ -94,8 +69,3 @@ const methodName = p.toString(); | ||
const newRequest = createRpcRequest ? createRpcRequest(...rawParams) : { methodName, params: rawParams }; | ||
if (pendingRequestOrRequests == null) { | ||
return createArmedJsonRpc(rpcConfig, newRequest); | ||
} else { | ||
const nextPendingRequests = Array.isArray(pendingRequestOrRequests) ? [...pendingRequestOrRequests, newRequest] : [pendingRequestOrRequests, newRequest]; | ||
return createArmedBatchJsonRpc(rpcConfig, nextPendingRequests); | ||
} | ||
return createPendingRpcRequest(rpcConfig, newRequest); | ||
}; | ||
@@ -109,2 +79,5 @@ } | ||
// ../fetch-impl/dist/index.browser.js | ||
var e = globalThis.fetch; | ||
// src/transports/http/http-transport-errors.ts | ||
@@ -172,5 +145,2 @@ var SolanaHttpError = class extends Error { | ||
// ../fetch-impl/dist/index.browser.js | ||
var e = globalThis.fetch; | ||
// src/transports/http/http-transport.ts | ||
@@ -177,0 +147,0 @@ function createHttpTransport({ httpAgentNodeOnly, headers, url }) { |
@@ -36,4 +36,4 @@ // ../build-scripts/env-shim.ts | ||
// src/json-rpc.ts | ||
function createArmedJsonRpc(rpcConfig, pendingRequest) { | ||
const overrides = { | ||
function createPendingRpcRequest(rpcConfig, pendingRequest) { | ||
return { | ||
async send(options) { | ||
@@ -53,26 +53,4 @@ const { methodName, params, responseProcessor } = pendingRequest; | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequest); | ||
} | ||
function createArmedBatchJsonRpc(rpcConfig, pendingRequests) { | ||
const overrides = { | ||
async sendBatch(options) { | ||
const payload = pendingRequests.map(({ methodName, params }) => createJsonRpcMessage(methodName, params)); | ||
const responses = await rpcConfig.transport({ | ||
payload, | ||
signal: options?.abortSignal | ||
}); | ||
const requestOrder = payload.map((p) => p.id); | ||
return responses.sort((a, b) => requestOrder.indexOf(a.id) - requestOrder.indexOf(b.id)).map((response, ii) => { | ||
if ("error" in response) { | ||
throw new SolanaJsonRpcError(response.error); | ||
} else { | ||
const { responseProcessor } = pendingRequests[ii]; | ||
return responseProcessor ? responseProcessor(response.result) : response.result; | ||
} | ||
}); | ||
} | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequests); | ||
} | ||
function makeProxy(rpcConfig, overrides, pendingRequestOrRequests) { | ||
function makeProxy(rpcConfig) { | ||
return new Proxy(rpcConfig.api, { | ||
@@ -86,5 +64,2 @@ defineProperty() { | ||
get(target, p, receiver) { | ||
if (overrides && Reflect.has(overrides, p)) { | ||
return Reflect.get(overrides, p, receiver); | ||
} | ||
return function(...rawParams) { | ||
@@ -94,8 +69,3 @@ const methodName = p.toString(); | ||
const newRequest = createRpcRequest ? createRpcRequest(...rawParams) : { methodName, params: rawParams }; | ||
if (pendingRequestOrRequests == null) { | ||
return createArmedJsonRpc(rpcConfig, newRequest); | ||
} else { | ||
const nextPendingRequests = Array.isArray(pendingRequestOrRequests) ? [...pendingRequestOrRequests, newRequest] : [pendingRequestOrRequests, newRequest]; | ||
return createArmedBatchJsonRpc(rpcConfig, nextPendingRequests); | ||
} | ||
return createPendingRpcRequest(rpcConfig, newRequest); | ||
}; | ||
@@ -109,2 +79,5 @@ } | ||
// ../fetch-impl/dist/index.browser.js | ||
var e = globalThis.fetch; | ||
// src/transports/http/http-transport-errors.ts | ||
@@ -172,5 +145,2 @@ var SolanaHttpError = class extends Error { | ||
// ../fetch-impl/dist/index.browser.js | ||
var e = globalThis.fetch; | ||
// src/transports/http/http-transport.ts | ||
@@ -177,0 +147,0 @@ function createHttpTransport({ httpAgentNodeOnly, headers, url }) { |
@@ -38,4 +38,4 @@ import t from 'node-fetch'; | ||
// src/json-rpc.ts | ||
function createArmedJsonRpc(rpcConfig, pendingRequest) { | ||
const overrides = { | ||
function createPendingRpcRequest(rpcConfig, pendingRequest) { | ||
return { | ||
async send(options) { | ||
@@ -55,26 +55,4 @@ const { methodName, params, responseProcessor } = pendingRequest; | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequest); | ||
} | ||
function createArmedBatchJsonRpc(rpcConfig, pendingRequests) { | ||
const overrides = { | ||
async sendBatch(options) { | ||
const payload = pendingRequests.map(({ methodName, params }) => createJsonRpcMessage(methodName, params)); | ||
const responses = await rpcConfig.transport({ | ||
payload, | ||
signal: options?.abortSignal | ||
}); | ||
const requestOrder = payload.map((p) => p.id); | ||
return responses.sort((a, b) => requestOrder.indexOf(a.id) - requestOrder.indexOf(b.id)).map((response, ii) => { | ||
if ("error" in response) { | ||
throw new SolanaJsonRpcError(response.error); | ||
} else { | ||
const { responseProcessor } = pendingRequests[ii]; | ||
return responseProcessor ? responseProcessor(response.result) : response.result; | ||
} | ||
}); | ||
} | ||
}; | ||
return makeProxy(rpcConfig, overrides, pendingRequests); | ||
} | ||
function makeProxy(rpcConfig, overrides, pendingRequestOrRequests) { | ||
function makeProxy(rpcConfig) { | ||
return new Proxy(rpcConfig.api, { | ||
@@ -88,5 +66,2 @@ defineProperty() { | ||
get(target, p, receiver) { | ||
if (overrides && Reflect.has(overrides, p)) { | ||
return Reflect.get(overrides, p, receiver); | ||
} | ||
return function(...rawParams) { | ||
@@ -96,8 +71,3 @@ const methodName = p.toString(); | ||
const newRequest = createRpcRequest ? createRpcRequest(...rawParams) : { methodName, params: rawParams }; | ||
if (pendingRequestOrRequests == null) { | ||
return createArmedJsonRpc(rpcConfig, newRequest); | ||
} else { | ||
const nextPendingRequests = Array.isArray(pendingRequestOrRequests) ? [...pendingRequestOrRequests, newRequest] : [pendingRequestOrRequests, newRequest]; | ||
return createArmedBatchJsonRpc(rpcConfig, nextPendingRequests); | ||
} | ||
return createPendingRpcRequest(rpcConfig, newRequest); | ||
}; | ||
@@ -110,2 +80,3 @@ } | ||
} | ||
var f = t; | ||
@@ -173,3 +144,2 @@ // src/transports/http/http-transport-errors.ts | ||
} | ||
var f = t; | ||
@@ -176,0 +146,0 @@ // src/transports/http/http-transport.ts |
export declare const SolanaJsonRpcErrorCode: { | ||
readonly JSON_RPC_INVALID_PARAMS: -32602; | ||
readonly JSON_RPC_SCAN_ERROR: -32012; | ||
@@ -3,0 +4,0 @@ readonly JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001; |
import { IRpcTransport } from './transports/transport-types'; | ||
/** | ||
* Public API. | ||
* Public RPC API. | ||
*/ | ||
@@ -8,5 +8,2 @@ export type IRpcApi<TRpcMethods> = { | ||
}; | ||
export type SendOptions = Readonly<{ | ||
abortSignal?: AbortSignal; | ||
}>; | ||
export type Rpc<TRpcMethods> = RpcMethods<TRpcMethods>; | ||
@@ -17,2 +14,5 @@ export type RpcConfig<TRpcMethods> = Readonly<{ | ||
}>; | ||
/** | ||
* Public pending RPC request API. | ||
*/ | ||
export type RpcRequest<TResponse> = { | ||
@@ -23,10 +23,8 @@ methodName: string; | ||
}; | ||
export interface ArmedRpcOwnMethods<TResponse> { | ||
export type PendingRpcRequest<TResponse> = { | ||
send(options?: SendOptions): Promise<TResponse>; | ||
} | ||
export type ArmedRpc<TRpcMethods, TResponse> = ArmedRpcMethods<TRpcMethods, TResponse> & ArmedRpcOwnMethods<TResponse>; | ||
export interface ArmedBatchRpcOwnMethods<TResponses> { | ||
sendBatch(options?: SendOptions): Promise<TResponses>; | ||
} | ||
export type ArmedBatchRpc<TRpcMethods, TResponses extends unknown[]> = ArmedBatchRpcMethods<TRpcMethods, TResponses> & ArmedBatchRpcOwnMethods<TResponses>; | ||
}; | ||
export type SendOptions = Readonly<{ | ||
abortSignal?: AbortSignal; | ||
}>; | ||
/** | ||
@@ -36,15 +34,8 @@ * Private RPC-building types. | ||
type RpcMethods<TRpcMethods> = { | ||
[TMethodName in keyof TRpcMethods]: ArmedRpcReturner<TRpcMethods, ApiMethodImplementations<TRpcMethods, TMethodName>>; | ||
[TMethodName in keyof TRpcMethods]: PendingRpcRequestBuilder<ApiMethodImplementations<TRpcMethods, TMethodName>>; | ||
}; | ||
type ArmedRpcMethods<TRpcMethods, TResponse> = ArmedBatchRpcMethods<TRpcMethods, [TResponse]>; | ||
type ArmedBatchRpcMethods<TRpcMethods, TResponses extends unknown[]> = { | ||
[TMethodName in keyof TRpcMethods]: ArmedBatchRpcReturner<TRpcMethods, ApiMethodImplementations<TRpcMethods, TMethodName>, TResponses>; | ||
}; | ||
type ApiMethodImplementations<TRpcMethods, TMethod extends keyof TRpcMethods> = Overloads<TRpcMethods[TMethod]>; | ||
type ArmedRpcReturner<TRpcMethods, TMethodImplementations> = UnionToIntersection<Flatten<{ | ||
[P in keyof TMethodImplementations]: TMethodImplementations[P] extends Callable ? (...args: Parameters<TMethodImplementations[P]>) => ArmedRpc<TRpcMethods, ReturnType<TMethodImplementations[P]>> : never; | ||
type PendingRpcRequestBuilder<TMethodImplementations> = UnionToIntersection<Flatten<{ | ||
[P in keyof TMethodImplementations]: TMethodImplementations[P] extends Callable ? (...args: Parameters<TMethodImplementations[P]>) => PendingRpcRequest<ReturnType<TMethodImplementations[P]>> : never; | ||
}>>; | ||
type ArmedBatchRpcReturner<TRpcMethods, TMethodImplementations, TResponses extends unknown[]> = UnionToIntersection<Flatten<{ | ||
[P in keyof TMethodImplementations]: TMethodImplementations[P] extends Callable ? (...args: Parameters<TMethodImplementations[P]>) => ArmedBatchRpc<TRpcMethods, [...TResponses, ReturnType<TMethodImplementations[P]>]> : never; | ||
}>>; | ||
/** | ||
@@ -51,0 +42,0 @@ * Utility types that do terrible, awful things. |
/// <reference types="node" /> | ||
/// <reference types="node" /> | ||
import { AllowedHttpRequestHeaders } from './http-transport-headers'; | ||
import { IRpcTransport } from '../transport-types'; | ||
import type { Agent as NodeHttpAgent } from 'node:http'; | ||
import type { Agent as NodeHttpsAgent } from 'node:https'; | ||
import { IRpcTransport } from '../transport-types'; | ||
import { AllowedHttpRequestHeaders } from './http-transport-headers'; | ||
type Config = Readonly<{ | ||
@@ -8,0 +8,0 @@ headers?: AllowedHttpRequestHeaders; |
{ | ||
"name": "@solana/rpc-transport", | ||
"version": "2.0.0-experimental.982fafd", | ||
"version": "2.0.0-experimental.9bf9fdb", | ||
"description": "Network transports for accessing the Solana JSON RPC API", | ||
@@ -49,6 +49,7 @@ "exports": { | ||
"devDependencies": { | ||
"@solana/eslint-config-solana": "^1.0.0", | ||
"@solana/eslint-config-solana": "^1.0.1", | ||
"@swc/core": "^1.3.18", | ||
"@swc/jest": "^0.2.23", | ||
"@types/jest": "^29.5.0", | ||
"@swc/jest": "^0.2.26", | ||
"@types/jest": "^29.5.2", | ||
"@types/node": "^16", | ||
"@typescript-eslint/eslint-plugin": "^5.57.1", | ||
@@ -61,12 +62,12 @@ "@typescript-eslint/parser": "^5.57.1", | ||
"eslint-plugin-sort-keys-fix": "^1.1.2", | ||
"jest": "^29.5.0", | ||
"jest-environment-jsdom": "^29.5.0", | ||
"jest": "^29.6.1", | ||
"jest-environment-jsdom": "^29.6.0", | ||
"jest-fetch-mock-fork": "^3.0.4", | ||
"jest-runner-eslint": "^2.0.0", | ||
"jest-runner-eslint": "^2.1.0", | ||
"jest-runner-prettier": "^1.0.0", | ||
"postcss": "^8.4.12", | ||
"prettier": "^2.7.1", | ||
"prettier": "^2.8.8", | ||
"ts-node": "^10.9.1", | ||
"tsup": "6.7.0", | ||
"typescript": "^5.0.3", | ||
"typescript": "^5.0.4", | ||
"version-from-git": "^1.1.1", | ||
@@ -86,5 +87,2 @@ "build-scripts": "0.0.0", | ||
}, | ||
"dependencies": { | ||
"node-fetch": "^3.3.1" | ||
}, | ||
"scripts": { | ||
@@ -91,0 +89,0 @@ "compile:js": "tsup --config build-scripts/tsup.config.package.ts", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
0
24
1
83
122370
27
1203
- Removednode-fetch@^3.3.1
- Removeddata-uri-to-buffer@4.0.1(transitive)
- Removedfetch-blob@3.2.0(transitive)
- Removedformdata-polyfill@4.0.10(transitive)
- Removednode-domexception@1.0.0(transitive)
- Removednode-fetch@3.3.2(transitive)
- Removedweb-streams-polyfill@3.3.3(transitive)