🚀 Big News:Socket Has Acquired Secure Annex.Learn More
Socket
Book a DemoSign in
Socket

@solana/rpc-transport

Package Overview
Dependencies
Maintainers
15
Versions
602
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@solana/rpc-transport - npm Package Compare versions

Comparing version
2.0.0-experimental.2cc3be5
to
2.0.0-experimental.2d1d49c
+11
dist/types/apis/api-types.d.ts
export type RpcApiConfig = Readonly<{
parametersTransformer?: <T extends unknown[]>(params: T, methodName: string) => unknown[];
responseTransformer?: <T>(response: unknown, methodName: string) => T;
}>;
export type RpcSubscriptionsApiConfig = Readonly<{
parametersTransformer?: <T extends unknown[]>(params: T, notificationName: string) => unknown[];
responseTransformer?: <T>(response: unknown, notificationName: string) => T;
subscribeNotificationNameTransformer?: (notificationName: string) => string;
unsubscribeNotificationNameTransformer?: (notificationName: string) => string;
}>;
//# sourceMappingURL=api-types.d.ts.map
{"version":3,"file":"api-types.d.ts","sourceRoot":"","sources":["../../../src/apis/api-types.ts"],"names":[],"mappings":"AACA,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAChC,qBAAqB,CAAC,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAC1F,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC,CAAC;CACzE,CAAC,CAAC;AAGH,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAAC;IAC7C,qBAAqB,CAAC,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,EAAE,MAAM,KAAK,OAAO,EAAE,CAAC;IAChG,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC,CAAC;IAC5E,oCAAoC,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,MAAM,CAAC;IAC5E,sCAAsC,CAAC,EAAE,CAAC,gBAAgB,EAAE,MAAM,KAAK,MAAM,CAAC;CACjF,CAAC,CAAC"}
import { IRpcApi, IRpcApiMethods } from '@solana/rpc-types';
import { RpcApiConfig } from '../api-types.js';
export declare function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods>;
//# sourceMappingURL=methods-api.d.ts.map
{"version":3,"file":"methods-api.d.ts","sourceRoot":"","sources":["../../../../src/apis/methods/methods-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAc,MAAM,mBAAmB,CAAC;AAExE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,wBAAgB,gBAAgB,CAAC,WAAW,SAAS,cAAc,EAAE,MAAM,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAgChH"}
import { IRpcApiSubscriptions, IRpcSubscriptionsApi } from '@solana/rpc-types';
import { RpcSubscriptionsApiConfig } from '../api-types.js';
export declare function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(config?: RpcSubscriptionsApiConfig): IRpcSubscriptionsApi<TRpcSubscriptions>;
//# sourceMappingURL=subscriptions-api.d.ts.map
{"version":3,"file":"subscriptions-api.d.ts","sourceRoot":"","sources":["../../../../src/apis/subscriptions/subscriptions-api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAmB,MAAM,mBAAmB,CAAC;AAEhG,OAAO,EAAE,yBAAyB,EAAE,MAAM,cAAc,CAAC;AAEzD,wBAAgB,6BAA6B,CAAC,iBAAiB,SAAS,oBAAoB,EACxF,MAAM,CAAC,EAAE,yBAAyB,GACnC,oBAAoB,CAAC,iBAAiB,CAAC,CAyCzC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wCAAwC,CAAC;AACvD,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,cAAc,yBAAyB,CAAC;AACxC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kCAAkC,CAAC;AACjD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4CAA4C,CAAC"}
import { IRpcApi, IRpcSubscriptionsApi } from '@solana/rpc-types';
import { IRpcTransport, IRpcTransportWithCluster, IRpcWebSocketTransport, IRpcWebSocketTransportWithCluster } from './transports/transport-types.js';
export type RpcConfig<TRpcMethods> = Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransport | IRpcTransportWithCluster;
}>;
export type RpcSubscriptionConfig<TRpcMethods> = Readonly<{
api: IRpcSubscriptionsApi<TRpcMethods>;
transport: IRpcWebSocketTransport | IRpcWebSocketTransportWithCluster;
}>;
//# sourceMappingURL=json-rpc-config.d.ts.map
{"version":3,"file":"json-rpc-config.d.ts","sourceRoot":"","sources":["../../src/json-rpc-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,EACH,aAAa,EACb,wBAAwB,EACxB,sBAAsB,EACtB,iCAAiC,EACpC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,SAAS,CAAC,WAAW,IAAI,QAAQ,CAAC;IAC1C,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,aAAa,GAAG,wBAAwB,CAAC;CACvD,CAAC,CAAC;AAEH,MAAM,MAAM,qBAAqB,CAAC,WAAW,IAAI,QAAQ,CAAC;IACtD,GAAG,EAAE,oBAAoB,CAAC,WAAW,CAAC,CAAC;IACvC,SAAS,EAAE,sBAAsB,GAAG,iCAAiC,CAAC;CACzE,CAAC,CAAC"}
{"version":3,"file":"json-rpc-errors.d.ts","sourceRoot":"","sources":["../../src/json-rpc-errors.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;CAkBzB,CAAC;AACX,KAAK,0BAA0B,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,OAAO,sBAAsB,CAAC,CAAC;AAEvG,KAAK,yBAAyB,GAAG,QAAQ,CAAC;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,qBAAa,kBAAmB,SAAQ,KAAK;IACzC,QAAQ,CAAC,IAAI,EAAE,0BAA0B,CAAC;IAC1C,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;gBACX,OAAO,EAAE,yBAAyB;IAM9C,IAAI,IAAI,WAEP;CACJ"}
{"version":3,"file":"json-rpc-message-id.d.ts","sourceRoot":"","sources":["../../src/json-rpc-message-id.ts"],"names":[],"mappings":"AACA,wBAAgB,gBAAgB,WAI/B"}
{"version":3,"file":"json-rpc-message.d.ts","sourceRoot":"","sources":["../../src/json-rpc-message.ts"],"names":[],"mappings":"AAEA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO;;;;;EAO5E"}
{"version":3,"file":"json-rpc-subscription.d.ts","sourceRoot":"","sources":["../../src/json-rpc-subscription.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EAGpB,gBAAgB,EAEnB,MAAM,mBAAmB,CAAC;AAM3B,OAAO,EACH,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,EAC1B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAChC,MAAM,8BAA8B,CAAC;AAoItC,wBAAgB,yBAAyB,CAAC,uBAAuB,EAC7D,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IACnD,SAAS,EAAE,4BAA4B,CAAC;CAC3C,CAAC,GACH,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;AACnD,wBAAgB,yBAAyB,CAAC,uBAAuB,EAC7D,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IACnD,SAAS,EAAE,6BAA6B,CAAC;CAC5C,CAAC,GACH,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;AACpD,wBAAgB,yBAAyB,CAAC,uBAAuB,EAC7D,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IACnD,SAAS,EAAE,6BAA6B,CAAC;CAC5C,CAAC,GACH,uBAAuB,CAAC,uBAAuB,CAAC,CAAC;AACpD,wBAAgB,yBAAyB,CAAC,uBAAuB,EAC7D,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;IACnD,SAAS,EAAE,sBAAsB,CAAC;CACrC,CAAC,GACH,gBAAgB,CAAC,uBAAuB,CAAC,CAAC"}
{"version":3,"file":"json-rpc-types.d.ts","sourceRoot":"","sources":["../../src/json-rpc-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACH,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC7B,iCAAiC,EACpC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,MAAM,SAAS,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG;IAAE,UAAU,EAAE,QAAQ,CAAA;CAAE,CAAC;AACjF,MAAM,MAAM,UAAU,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AACnF,MAAM,MAAM,UAAU,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AACnF,MAAM,MAAM,gBAAgB,CACxB,WAAW,EACX,aAAa,SAAS,aAAa,GAAG,wBAAwB,IAC9D,aAAa,SAAS,mBAAmB,GACvC,SAAS,CAAC,WAAW,CAAC,GACtB,aAAa,SAAS,oBAAoB,GACxC,UAAU,CAAC,WAAW,CAAC,GACvB,aAAa,SAAS,oBAAoB,GACxC,UAAU,CAAC,WAAW,CAAC,GACvB,GAAG,CAAC,WAAW,CAAC,CAAC;AAE3B,MAAM,MAAM,sBAAsB,CAAC,uBAAuB,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,GAAG;IACtG,UAAU,EAAE,QAAQ,CAAC;CACxB,CAAC;AACF,MAAM,MAAM,uBAAuB,CAAC,uBAAuB,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,GAAG;IACvG,UAAU,EAAE,SAAS,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,uBAAuB,CAAC,uBAAuB,IAAI,gBAAgB,CAAC,uBAAuB,CAAC,GAAG;IACvG,UAAU,EAAE,SAAS,CAAC;CACzB,CAAC;AACF,MAAM,MAAM,6BAA6B,CACrC,uBAAuB,EACvB,aAAa,SAAS,sBAAsB,GAAG,iCAAiC,IAChF,aAAa,SAAS,4BAA4B,GAChD,sBAAsB,CAAC,uBAAuB,CAAC,GAC/C,aAAa,SAAS,6BAA6B,GACjD,uBAAuB,CAAC,uBAAuB,CAAC,GAChD,aAAa,SAAS,6BAA6B,GACjD,uBAAuB,CAAC,uBAAuB,CAAC,GAChD,gBAAgB,CAAC,uBAAuB,CAAC,CAAC"}
{"version":3,"file":"json-rpc.d.ts","sourceRoot":"","sources":["../../src/json-rpc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAqB,GAAG,EAA2B,MAAM,mBAAmB,CAAC;AAK7F,OAAO,EAAE,SAAS,EAAoB,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACvF,OAAO,EACH,aAAa,EACb,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACvB,MAAM,8BAA8B,CAAC;AAEtC,UAAU,cAAc;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACvB;AACD,MAAM,MAAM,eAAe,CAAC,SAAS,IAAI,cAAc,GACnD,QAAQ,CAAC;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;CAAE,CAAC,CAAC;AA8CnG,wBAAgB,aAAa,CAAC,WAAW,EACrC,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,mBAAmB,CAAC;CAClC,CAAC,GACH,SAAS,CAAC,WAAW,CAAC,CAAC;AAC1B,wBAAgB,aAAa,CAAC,WAAW,EACrC,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;CACnC,CAAC,GACH,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3B,wBAAgB,aAAa,CAAC,WAAW,EACrC,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,oBAAoB,CAAC;CACnC,CAAC,GACH,UAAU,CAAC,WAAW,CAAC,CAAC;AAC3B,wBAAgB,aAAa,CAAC,WAAW,EACrC,SAAS,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1B,SAAS,EAAE,aAAa,CAAC;CAC5B,CAAC,GACH,GAAG,CAAC,WAAW,CAAC,CAAC"}
{"version":3,"file":"http-transport-errors.d.ts","sourceRoot":"","sources":["../../../../src/transports/http/http-transport-errors.ts"],"names":[],"mappings":"AAAA,KAAK,sBAAsB,GAAG,QAAQ,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC,CAAC;AAEH,qBAAa,eAAgB,SAAQ,KAAK;IACtC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;gBAChB,OAAO,EAAE,sBAAsB;IAK3C,IAAI,IAAI,WAEP;CACJ"}
{"version":3,"file":"http-transport-headers.d.ts","sourceRoot":"","sources":["../../../../src/transports/http/http-transport-headers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,QAAQ,CAC5C;IAAE,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,GAAG;KAG9B,CAAC,IAAI,iBAAiB,GAAG,gBAAgB,IACpC,CAAC,GACD,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GACxB,SAAS,CAAC,CAAC,CAAC,GACZ,YAAY,CAAC,CAAC,CAAC,GAEf,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK;CAC9B,CACJ,CAAC;AAGF,KAAK,iBAAiB,GAAG,QAAQ,GAAG,gBAAgB,GAAG,cAAc,GAAG,eAAe,CAAC;AACxF,KAAK,gBAAgB,GACf,gBAAgB,GAChB,iBAAiB,GACjB,gCAAgC,GAChC,+BAA+B,GAC/B,YAAY,GACZ,gBAAgB,GAChB,QAAQ,GACR,MAAM,GACN,KAAK,GACL,QAAQ,GACR,MAAM,GACN,YAAY,GACZ,QAAQ,GACR,oBAAoB,GAIpB,SAAS,GACT,IAAI,GACJ,SAAS,GACT,mBAAmB,GACnB,SAAS,GACT,KAAK,CAAC;AAmCZ,wBAAgB,iCAAiC,CAC7C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,OAAO,CAAC,OAAO,IAAI,yBAAyB,CAiB9C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC7D,OAAO,EAAE,CAAC,GACX;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAE,CAMnD"}
{"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../../src/transports/http/http-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,EAAiB,2BAA2B,EAAE,MAAM,oBAAoB,CAAC;AAEhF,OAAO,EACH,yBAAyB,EAG5B,MAAM,0BAA0B,CAAC;AAElC,KAAK,MAAM,CAAC,WAAW,SAAS,UAAU,IAAI,QAAQ,CAAC;IACnD,OAAO,CAAC,EAAE,yBAAyB,CAAC;IACpC,GAAG,EAAE,WAAW,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,mBAAmB,CAAC,WAAW,SAAS,UAAU,EAAE,EAChE,OAAO,EACP,GAAG,GACN,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,2BAA2B,CAAC,WAAW,CAAC,CA+BhE"}
{"version":3,"file":"transport-types.d.ts","sourceRoot":"","sources":["../../../src/transports/transport-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAC;AAI1E,KAAK,kBAAkB,GAAG,QAAQ,CAAC;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC,CAAC;AAEH,MAAM,WAAW,aAAa;IAC1B,CAAC,SAAS,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;CAC/D;AACD,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAAE,UAAU,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC3E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,oBAAoB,GAAG,aAAa,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AAC7E,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,CAAC;AACzG,MAAM,MAAM,2BAA2B,CAAC,WAAW,SAAS,UAAU,IAAI,WAAW,SAAS,SAAS,GACjG,mBAAmB,GACnB,WAAW,SAAS,UAAU,GAC5B,oBAAoB,GACpB,WAAW,SAAS,UAAU,GAC5B,oBAAoB,GACpB,aAAa,CAAC;AAExB,KAAK,2BAA2B,GAAG,QAAQ,CAAC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,CAAC;CACvB,CAAC,CAAC;AAIH,MAAM,WAAW,sBAAsB;IACnC,CAAC,MAAM,EAAE,2BAA2B,GAAG,OAAO,CAC1C,QAAQ,CACJ,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG;QACnC,oCAAoC,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAC;KACxE,CACJ,CACJ,CAAC;CACL;AAED,MAAM,MAAM,4BAA4B,GAAG,sBAAsB,GAAG;IAAE,UAAU,EAAE,QAAQ,CAAA;CAAE,CAAC;AAC7F,MAAM,MAAM,6BAA6B,GAAG,sBAAsB,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,6BAA6B,GAAG,sBAAsB,GAAG;IAAE,UAAU,EAAE,SAAS,CAAA;CAAE,CAAC;AAC/F,MAAM,MAAM,iCAAiC,GACvC,4BAA4B,GAC5B,6BAA6B,GAC7B,6BAA6B,CAAC;AACpC,MAAM,MAAM,oCAAoC,CAAC,WAAW,SAAS,UAAU,IAAI,WAAW,SAAS,SAAS,GAC1G,4BAA4B,GAC5B,WAAW,SAAS,UAAU,GAC5B,6BAA6B,GAC7B,WAAW,SAAS,UAAU,GAC5B,6BAA6B,GAC7B,sBAAsB,CAAC"}
{"version":3,"file":"websocket-connection.d.ts","sourceRoot":"","sources":["../../../../src/transports/websocket/websocket-connection.ts"],"names":[],"mappings":"AAEA,KAAK,MAAM,GAAG,QAAQ,CAAC;IACnB,uBAAuB,EAAE,MAAM,CAAC;IAChC,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAYH,MAAM,MAAM,sBAAsB,GAAG,QAAQ,CAAC;IAC1C,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC;CACrD,CAAC,CAAC;AAQH,wBAAsB,yBAAyB,CAAC,EAC5C,uBAAuB,EACvB,MAAM,EACN,GAAG,GACN,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAqJ1C"}
{"version":3,"file":"websocket-transport.d.ts","sourceRoot":"","sources":["../../../../src/transports/websocket/websocket-transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,OAAO,EAA0B,oCAAoC,EAAE,MAAM,oBAAoB,CAAC;AAGlG,KAAK,MAAM,CAAC,WAAW,SAAS,UAAU,IAAI,QAAQ,CAAC;IACnD,uBAAuB,EAAE,MAAM,CAAC;IAChC,GAAG,EAAE,WAAW,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,wBAAwB,CAAC,WAAW,SAAS,UAAU,EAAE,EACrE,uBAAuB,EACvB,GAAG,GACN,EAAE,MAAM,CAAC,WAAW,CAAC,GAAG,oCAAoC,CAAC,WAAW,CAAC,CAuBzE"}
+85
-28
'use strict';
var t = require('node-fetch');
var e = require('ws');
var e2 = require('ws');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var t__default = /*#__PURE__*/_interopDefault(t);
var e__default = /*#__PURE__*/_interopDefault(e);
var e2__default = /*#__PURE__*/_interopDefault(e2);

@@ -14,4 +12,59 @@ // ../build-scripts/env-shim.ts

// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -50,3 +103,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -60,3 +113,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -100,3 +153,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -147,3 +200,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -185,6 +238,9 @@ }

}
var o = typeof globalThis.fetch == "function" ? globalThis.fetch : t__default.default;
// ../fetch-impl/dist/index.node.js
var e = globalThis.fetch;
// src/transports/http/http-transport-errors.ts
var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -251,12 +307,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = httpAgentNodeOnly ;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -269,3 +322,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -282,3 +334,3 @@ headers: {

};
const response = await o(url, requestInfo);
const response = await e(url, requestInfo);
if (!response.ok) {

@@ -293,7 +345,7 @@ throw new SolanaHttpError({

}
var t2 = e__default.default;
var t = e2__default.default;
// src/transports/websocket/websocket-connection.ts
var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -320,3 +372,3 @@ async function createWebSocketConnection({

errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);
if (webSocket.readyState !== t2.CLOSED && webSocket.readyState !== t2.CLOSING) {
if (webSocket.readyState !== t.CLOSED && webSocket.readyState !== t.CLOSING) {
webSocket.close(1e3);

@@ -349,7 +401,7 @@ }

const message = JSON.stringify(payload);
if (!bufferDrainWatcher && webSocket.readyState === t2.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
if (!bufferDrainWatcher && webSocket.readyState === t.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
let onCancel;
const promise = new Promise((resolve2, reject2) => {
const intervalId = setInterval(() => {
if (webSocket.readyState !== t2.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
if (webSocket.readyState !== t.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
clearInterval(intervalId);

@@ -408,7 +460,7 @@ bufferDrainWatcher = void 0;

});
} catch (e2) {
if (e2 === EXPLICIT_ABORT_TOKEN) {
} catch (e3) {
if (e3 === EXPLICIT_ABORT_TOKEN) {
return;
} else {
throw new Error("WebSocket connection closed", { cause: e2 });
throw new Error("WebSocket connection closed", { cause: e3 });
}

@@ -436,3 +488,3 @@ }

}
const webSocket = new t2(url);
const webSocket = new t(url);
webSocket.addEventListener("close", handleClose);

@@ -446,3 +498,6 @@ webSocket.addEventListener("error", handleError);

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -472,2 +527,4 @@ const protocolMatch = url.match(/^([^:]+):/);

exports.createJsonRpc = createJsonRpc;
exports.createJsonRpcApi = createJsonRpcApi;
exports.createJsonRpcSubscriptionsApi = createJsonRpcSubscriptionsApi;
exports.createJsonSubscriptionRpc = createJsonSubscriptionRpc;

@@ -474,0 +531,0 @@ exports.createWebSocketTransport = createWebSocketTransport;

@@ -6,4 +6,59 @@ 'use strict';

// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -42,3 +97,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -52,3 +107,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -92,3 +147,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -139,3 +194,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -183,2 +238,3 @@ }

var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -245,12 +301,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = void 0;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -263,3 +316,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -292,3 +344,3 @@ headers: {

var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -437,3 +489,6 @@ async function createWebSocketConnection({

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -463,2 +518,4 @@ const protocolMatch = url.match(/^([^:]+):/);

exports.createJsonRpc = createJsonRpc;
exports.createJsonRpcApi = createJsonRpcApi;
exports.createJsonRpcSubscriptionsApi = createJsonRpcSubscriptionsApi;
exports.createJsonSubscriptionRpc = createJsonSubscriptionRpc;

@@ -465,0 +522,0 @@ exports.createWebSocketTransport = createWebSocketTransport;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { PendingRpcRequest, Rpc, RpcConfig, RpcRequest, SendOptions } from './json-rpc-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseProcessor } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (responseProcessor ? responseProcessor(response.result) : response.result) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return makeProxy(rpcConfig);\n}\n","import { JsonRpcResponse } from './json-rpc';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptionConfig,\n RpcSubscriptions,\n SubscribeOptions,\n} from './json-rpc-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }: RpcSubscription<TNotification>\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseProcessor ? responseProcessor(notification) : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.'\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return makeProxy(rpcConfig);\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.'\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import type { Agent as NodeHttpAgent } from 'node:http';\nimport type { Agent as NodeHttpsAgent } from 'node:https';\n\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);\n url: string;\n}>;\n\nexport function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const agent = __NODEJS__ ? httpAgentNodeOnly : undefined;\n if (__DEV__ && httpAgentNodeOnly != null) {\n console.warn(\n 'createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ' +\n 'ignored; HTTP agents are only usable in Node environments.'\n );\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n agent,\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n };\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user\"\n : undefined\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev })\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent')\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise'\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { IRpcWebSocketTransport } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n url: string;\n}>;\n\nexport function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n };\n}\n"]}
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/apis/methods/methods-api.ts","../src/apis/subscriptions/subscriptions-api.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","import { IRpcApi, IRpcApiMethods, RpcRequest } from '@solana/rpc-types';\n\nimport { RpcApiConfig } from '../api-types';\n\nexport function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods> {\n return new Proxy({} as IRpcApi<TRpcMethods>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TMethodName extends keyof IRpcApi<TRpcMethods>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<TRpcMethods>>['get']>>\n ) {\n const [_, p] = args;\n const methodName = p.toString() as keyof TRpcMethods as string;\n return function (\n ...rawParams: Parameters<\n TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never\n >\n ): RpcRequest<ReturnType<TRpcMethods[TMethodName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, methodName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcMethods[TMethodName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcMethods[TMethodName]>;\n return {\n methodName,\n params,\n responseTransformer,\n };\n };\n },\n });\n}\n","import { IRpcApiSubscriptions, IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-types';\n\nimport { RpcSubscriptionsApiConfig } from '../api-types';\n\nexport function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(\n config?: RpcSubscriptionsApiConfig,\n): IRpcSubscriptionsApi<TRpcSubscriptions> {\n return new Proxy({} as IRpcSubscriptionsApi<TRpcSubscriptions>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TNotificationName extends keyof IRpcSubscriptionsApi<TRpcSubscriptions>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcSubscriptionsApi<TRpcSubscriptions>>['get']>>\n ) {\n const [_, p] = args;\n const notificationName = p.toString() as keyof TRpcSubscriptions as string;\n return function (\n ...rawParams: Parameters<\n TRpcSubscriptions[TNotificationName] extends CallableFunction\n ? TRpcSubscriptions[TNotificationName]\n : never\n >\n ): RpcSubscription<ReturnType<TRpcSubscriptions[TNotificationName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, notificationName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcSubscriptions[TNotificationName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcSubscriptions[TNotificationName]>;\n const subscribeMethodName = config?.subscribeNotificationNameTransformer\n ? config?.subscribeNotificationNameTransformer(notificationName)\n : notificationName;\n const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer\n ? config?.unsubscribeNotificationNameTransformer(notificationName)\n : notificationName;\n return {\n params,\n responseTransformer,\n subscribeMethodName,\n unsubscribeMethodName,\n };\n };\n },\n });\n}\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { IRpcApi, PendingRpcRequest, Rpc, RpcRequest, SendOptions } from '@solana/rpc-types';\n\nimport { RpcConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { RpcDevnet, RpcFromTransport, RpcMainnet, RpcTestnet } from './json-rpc-types';\nimport {\n IRpcTransport,\n IRpcTransportDevnet,\n IRpcTransportMainnet,\n IRpcTransportTestnet,\n} from './transports/transport-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>,\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseTransformer } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (\n responseTransformer ? responseTransformer(response.result, methodName) : response.result\n ) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportDevnet;\n }>,\n): RpcDevnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportTestnet;\n }>,\n): RpcTestnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportMainnet;\n }>,\n): RpcMainnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransport;\n }>,\n): Rpc<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods, TConfig extends RpcConfig<TRpcMethods>>(\n rpcConfig: TConfig,\n): RpcFromTransport<TRpcMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcFromTransport<TRpcMethods, TConfig['transport']>;\n}\n","import {\n IRpcSubscriptionsApi,\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptions,\n SubscribeOptions,\n} from '@solana/rpc-types';\n\nimport { JsonRpcResponse } from './json-rpc';\nimport { RpcSubscriptionConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n RpcSubscriptionsDevnet,\n RpcSubscriptionsFromTransport,\n RpcSubscriptionsMainnet,\n RpcSubscriptionsTestnet,\n} from './json-rpc-types';\nimport {\n IRpcWebSocketTransport,\n IRpcWebSocketTransportDevnet,\n IRpcWebSocketTransportMainnet,\n IRpcWebSocketTransportTestnet,\n} from './transports/transport-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }: RpcSubscription<TNotification>,\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseTransformer\n ? responseTransformer(notification, subscribeMethodName)\n : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.',\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportDevnet;\n }>,\n): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportTestnet;\n }>,\n): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportMainnet;\n }>,\n): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransport;\n }>,\n): RpcSubscriptions<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<\n TRpcSubscriptionMethods,\n TConfig extends RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n>(rpcConfig: TConfig): RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']>;\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>,\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.',\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import { ClusterUrl } from '@solana/rpc-types';\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport, IRpcTransportFromClusterUrl } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n url: TClusterUrl;\n}>;\n\nexport function createHttpTransport<TClusterUrl extends ClusterUrl>({\n headers,\n url,\n}: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl> {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n } as IRpcTransportFromClusterUrl<TClusterUrl>;\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user\"\n : undefined,\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev }),\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent'),\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise',\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { ClusterUrl } from '@solana/rpc-types';\n\nimport { IRpcWebSocketTransport, IRpcWebSocketTransportFromClusterUrl } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n sendBufferHighWatermark: number;\n url: TClusterUrl;\n}>;\n\nexport function createWebSocketTransport<TClusterUrl extends ClusterUrl>({\n sendBufferHighWatermark,\n url,\n}: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl> {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`,\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n } as IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;\n}\n"]}
// ../build-scripts/env-shim.ts
var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -39,3 +94,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -49,3 +104,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -89,3 +144,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -136,3 +191,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -180,2 +235,3 @@ }

var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -242,12 +298,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = void 0;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -260,3 +313,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -289,3 +341,3 @@ headers: {

var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -434,3 +486,6 @@ async function createWebSocketConnection({

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -458,4 +513,4 @@ const protocolMatch = url.match(/^([^:]+):/);

export { createHttpTransport, createJsonRpc, createJsonSubscriptionRpc, createWebSocketTransport };
export { createHttpTransport, createJsonRpc, createJsonRpcApi, createJsonRpcSubscriptionsApi, createJsonSubscriptionRpc, createWebSocketTransport };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.browser.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { PendingRpcRequest, Rpc, RpcConfig, RpcRequest, SendOptions } from './json-rpc-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseProcessor } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (responseProcessor ? responseProcessor(response.result) : response.result) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return makeProxy(rpcConfig);\n}\n","import { JsonRpcResponse } from './json-rpc';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptionConfig,\n RpcSubscriptions,\n SubscribeOptions,\n} from './json-rpc-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }: RpcSubscription<TNotification>\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseProcessor ? responseProcessor(notification) : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.'\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return makeProxy(rpcConfig);\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.'\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import type { Agent as NodeHttpAgent } from 'node:http';\nimport type { Agent as NodeHttpsAgent } from 'node:https';\n\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);\n url: string;\n}>;\n\nexport function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const agent = __NODEJS__ ? httpAgentNodeOnly : undefined;\n if (__DEV__ && httpAgentNodeOnly != null) {\n console.warn(\n 'createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ' +\n 'ignored; HTTP agents are only usable in Node environments.'\n );\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n agent,\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n };\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user\"\n : undefined\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev })\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent')\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise'\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { IRpcWebSocketTransport } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n url: string;\n}>;\n\nexport function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n };\n}\n"]}
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/apis/methods/methods-api.ts","../src/apis/subscriptions/subscriptions-api.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","import { IRpcApi, IRpcApiMethods, RpcRequest } from '@solana/rpc-types';\n\nimport { RpcApiConfig } from '../api-types';\n\nexport function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods> {\n return new Proxy({} as IRpcApi<TRpcMethods>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TMethodName extends keyof IRpcApi<TRpcMethods>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<TRpcMethods>>['get']>>\n ) {\n const [_, p] = args;\n const methodName = p.toString() as keyof TRpcMethods as string;\n return function (\n ...rawParams: Parameters<\n TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never\n >\n ): RpcRequest<ReturnType<TRpcMethods[TMethodName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, methodName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcMethods[TMethodName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcMethods[TMethodName]>;\n return {\n methodName,\n params,\n responseTransformer,\n };\n };\n },\n });\n}\n","import { IRpcApiSubscriptions, IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-types';\n\nimport { RpcSubscriptionsApiConfig } from '../api-types';\n\nexport function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(\n config?: RpcSubscriptionsApiConfig,\n): IRpcSubscriptionsApi<TRpcSubscriptions> {\n return new Proxy({} as IRpcSubscriptionsApi<TRpcSubscriptions>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TNotificationName extends keyof IRpcSubscriptionsApi<TRpcSubscriptions>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcSubscriptionsApi<TRpcSubscriptions>>['get']>>\n ) {\n const [_, p] = args;\n const notificationName = p.toString() as keyof TRpcSubscriptions as string;\n return function (\n ...rawParams: Parameters<\n TRpcSubscriptions[TNotificationName] extends CallableFunction\n ? TRpcSubscriptions[TNotificationName]\n : never\n >\n ): RpcSubscription<ReturnType<TRpcSubscriptions[TNotificationName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, notificationName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcSubscriptions[TNotificationName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcSubscriptions[TNotificationName]>;\n const subscribeMethodName = config?.subscribeNotificationNameTransformer\n ? config?.subscribeNotificationNameTransformer(notificationName)\n : notificationName;\n const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer\n ? config?.unsubscribeNotificationNameTransformer(notificationName)\n : notificationName;\n return {\n params,\n responseTransformer,\n subscribeMethodName,\n unsubscribeMethodName,\n };\n };\n },\n });\n}\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { IRpcApi, PendingRpcRequest, Rpc, RpcRequest, SendOptions } from '@solana/rpc-types';\n\nimport { RpcConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { RpcDevnet, RpcFromTransport, RpcMainnet, RpcTestnet } from './json-rpc-types';\nimport {\n IRpcTransport,\n IRpcTransportDevnet,\n IRpcTransportMainnet,\n IRpcTransportTestnet,\n} from './transports/transport-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>,\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseTransformer } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (\n responseTransformer ? responseTransformer(response.result, methodName) : response.result\n ) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportDevnet;\n }>,\n): RpcDevnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportTestnet;\n }>,\n): RpcTestnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportMainnet;\n }>,\n): RpcMainnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransport;\n }>,\n): Rpc<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods, TConfig extends RpcConfig<TRpcMethods>>(\n rpcConfig: TConfig,\n): RpcFromTransport<TRpcMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcFromTransport<TRpcMethods, TConfig['transport']>;\n}\n","import {\n IRpcSubscriptionsApi,\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptions,\n SubscribeOptions,\n} from '@solana/rpc-types';\n\nimport { JsonRpcResponse } from './json-rpc';\nimport { RpcSubscriptionConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n RpcSubscriptionsDevnet,\n RpcSubscriptionsFromTransport,\n RpcSubscriptionsMainnet,\n RpcSubscriptionsTestnet,\n} from './json-rpc-types';\nimport {\n IRpcWebSocketTransport,\n IRpcWebSocketTransportDevnet,\n IRpcWebSocketTransportMainnet,\n IRpcWebSocketTransportTestnet,\n} from './transports/transport-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }: RpcSubscription<TNotification>,\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseTransformer\n ? responseTransformer(notification, subscribeMethodName)\n : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.',\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportDevnet;\n }>,\n): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportTestnet;\n }>,\n): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportMainnet;\n }>,\n): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransport;\n }>,\n): RpcSubscriptions<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<\n TRpcSubscriptionMethods,\n TConfig extends RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n>(rpcConfig: TConfig): RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']>;\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>,\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.',\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import { ClusterUrl } from '@solana/rpc-types';\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport, IRpcTransportFromClusterUrl } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n url: TClusterUrl;\n}>;\n\nexport function createHttpTransport<TClusterUrl extends ClusterUrl>({\n headers,\n url,\n}: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl> {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n } as IRpcTransportFromClusterUrl<TClusterUrl>;\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user\"\n : undefined,\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev }),\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent'),\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise',\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { ClusterUrl } from '@solana/rpc-types';\n\nimport { IRpcWebSocketTransport, IRpcWebSocketTransportFromClusterUrl } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n sendBufferHighWatermark: number;\n url: TClusterUrl;\n}>;\n\nexport function createWebSocketTransport<TClusterUrl extends ClusterUrl>({\n sendBufferHighWatermark,\n url,\n}: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl> {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`,\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n } as IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;\n}\n"]}
// ../build-scripts/env-shim.ts
var __DEV__ = /* @__PURE__ */ (() => process["env"].NODE_ENV === "development")();
// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -39,3 +94,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -49,3 +104,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -89,3 +144,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -136,3 +191,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -180,2 +235,3 @@ }

var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -242,12 +298,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = void 0;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -260,3 +313,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -289,3 +341,3 @@ headers: {

var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -434,3 +486,6 @@ async function createWebSocketConnection({

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -458,4 +513,4 @@ const protocolMatch = url.match(/^([^:]+):/);

export { createHttpTransport, createJsonRpc, createJsonSubscriptionRpc, createWebSocketTransport };
export { createHttpTransport, createJsonRpc, createJsonRpcApi, createJsonRpcSubscriptionsApi, createJsonSubscriptionRpc, createWebSocketTransport };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.native.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { PendingRpcRequest, Rpc, RpcConfig, RpcRequest, SendOptions } from './json-rpc-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseProcessor } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (responseProcessor ? responseProcessor(response.result) : response.result) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return makeProxy(rpcConfig);\n}\n","import { JsonRpcResponse } from './json-rpc';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptionConfig,\n RpcSubscriptions,\n SubscribeOptions,\n} from './json-rpc-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }: RpcSubscription<TNotification>\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseProcessor ? responseProcessor(notification) : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.'\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return makeProxy(rpcConfig);\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.'\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import type { Agent as NodeHttpAgent } from 'node:http';\nimport type { Agent as NodeHttpsAgent } from 'node:https';\n\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);\n url: string;\n}>;\n\nexport function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const agent = __NODEJS__ ? httpAgentNodeOnly : undefined;\n if (__DEV__ && httpAgentNodeOnly != null) {\n console.warn(\n 'createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ' +\n 'ignored; HTTP agents are only usable in Node environments.'\n );\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n agent,\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n };\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user\"\n : undefined\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev })\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent')\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise'\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { IRpcWebSocketTransport } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n url: string;\n}>;\n\nexport function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n };\n}\n"]}
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/apis/methods/methods-api.ts","../src/apis/subscriptions/subscriptions-api.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.browser.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.browser.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_browser_default","e","resolve","reject"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","import { IRpcApi, IRpcApiMethods, RpcRequest } from '@solana/rpc-types';\n\nimport { RpcApiConfig } from '../api-types';\n\nexport function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods> {\n return new Proxy({} as IRpcApi<TRpcMethods>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TMethodName extends keyof IRpcApi<TRpcMethods>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<TRpcMethods>>['get']>>\n ) {\n const [_, p] = args;\n const methodName = p.toString() as keyof TRpcMethods as string;\n return function (\n ...rawParams: Parameters<\n TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never\n >\n ): RpcRequest<ReturnType<TRpcMethods[TMethodName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, methodName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcMethods[TMethodName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcMethods[TMethodName]>;\n return {\n methodName,\n params,\n responseTransformer,\n };\n };\n },\n });\n}\n","import { IRpcApiSubscriptions, IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-types';\n\nimport { RpcSubscriptionsApiConfig } from '../api-types';\n\nexport function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(\n config?: RpcSubscriptionsApiConfig,\n): IRpcSubscriptionsApi<TRpcSubscriptions> {\n return new Proxy({} as IRpcSubscriptionsApi<TRpcSubscriptions>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TNotificationName extends keyof IRpcSubscriptionsApi<TRpcSubscriptions>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcSubscriptionsApi<TRpcSubscriptions>>['get']>>\n ) {\n const [_, p] = args;\n const notificationName = p.toString() as keyof TRpcSubscriptions as string;\n return function (\n ...rawParams: Parameters<\n TRpcSubscriptions[TNotificationName] extends CallableFunction\n ? TRpcSubscriptions[TNotificationName]\n : never\n >\n ): RpcSubscription<ReturnType<TRpcSubscriptions[TNotificationName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, notificationName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcSubscriptions[TNotificationName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcSubscriptions[TNotificationName]>;\n const subscribeMethodName = config?.subscribeNotificationNameTransformer\n ? config?.subscribeNotificationNameTransformer(notificationName)\n : notificationName;\n const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer\n ? config?.unsubscribeNotificationNameTransformer(notificationName)\n : notificationName;\n return {\n params,\n responseTransformer,\n subscribeMethodName,\n unsubscribeMethodName,\n };\n };\n },\n });\n}\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { IRpcApi, PendingRpcRequest, Rpc, RpcRequest, SendOptions } from '@solana/rpc-types';\n\nimport { RpcConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { RpcDevnet, RpcFromTransport, RpcMainnet, RpcTestnet } from './json-rpc-types';\nimport {\n IRpcTransport,\n IRpcTransportDevnet,\n IRpcTransportMainnet,\n IRpcTransportTestnet,\n} from './transports/transport-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>,\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseTransformer } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (\n responseTransformer ? responseTransformer(response.result, methodName) : response.result\n ) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportDevnet;\n }>,\n): RpcDevnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportTestnet;\n }>,\n): RpcTestnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportMainnet;\n }>,\n): RpcMainnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransport;\n }>,\n): Rpc<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods, TConfig extends RpcConfig<TRpcMethods>>(\n rpcConfig: TConfig,\n): RpcFromTransport<TRpcMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcFromTransport<TRpcMethods, TConfig['transport']>;\n}\n","import {\n IRpcSubscriptionsApi,\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptions,\n SubscribeOptions,\n} from '@solana/rpc-types';\n\nimport { JsonRpcResponse } from './json-rpc';\nimport { RpcSubscriptionConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n RpcSubscriptionsDevnet,\n RpcSubscriptionsFromTransport,\n RpcSubscriptionsMainnet,\n RpcSubscriptionsTestnet,\n} from './json-rpc-types';\nimport {\n IRpcWebSocketTransport,\n IRpcWebSocketTransportDevnet,\n IRpcWebSocketTransportMainnet,\n IRpcWebSocketTransportTestnet,\n} from './transports/transport-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }: RpcSubscription<TNotification>,\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseTransformer\n ? responseTransformer(notification, subscribeMethodName)\n : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.',\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportDevnet;\n }>,\n): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportTestnet;\n }>,\n): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportMainnet;\n }>,\n): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransport;\n }>,\n): RpcSubscriptions<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<\n TRpcSubscriptionMethods,\n TConfig extends RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n>(rpcConfig: TConfig): RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']>;\n}\n","export default globalThis.fetch;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>,\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.',\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import { ClusterUrl } from '@solana/rpc-types';\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport, IRpcTransportFromClusterUrl } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n url: TClusterUrl;\n}>;\n\nexport function createHttpTransport<TClusterUrl extends ClusterUrl>({\n headers,\n url,\n}: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl> {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n } as IRpcTransportFromClusterUrl<TClusterUrl>;\n}\n","export default globalThis.WebSocket;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user\"\n : undefined,\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev }),\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent'),\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise',\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { ClusterUrl } from '@solana/rpc-types';\n\nimport { IRpcWebSocketTransport, IRpcWebSocketTransportFromClusterUrl } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n sendBufferHighWatermark: number;\n url: TClusterUrl;\n}>;\n\nexport function createWebSocketTransport<TClusterUrl extends ClusterUrl>({\n sendBufferHighWatermark,\n url,\n}: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl> {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`,\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n } as IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;\n}\n"]}
'use strict';
var t = require('node-fetch');
var e = require('ws');
var e2 = require('ws');
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
var t__default = /*#__PURE__*/_interopDefault(t);
var e__default = /*#__PURE__*/_interopDefault(e);
var e2__default = /*#__PURE__*/_interopDefault(e2);

@@ -14,4 +12,59 @@ // ../build-scripts/env-shim.ts

// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -50,3 +103,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -60,3 +113,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -100,3 +153,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -147,3 +200,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -185,6 +238,9 @@ }

}
var o = typeof globalThis.fetch == "function" ? globalThis.fetch : t__default.default;
// ../fetch-impl/dist/index.node.js
var e = globalThis.fetch;
// src/transports/http/http-transport-errors.ts
var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -251,12 +307,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = httpAgentNodeOnly ;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -269,3 +322,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -282,3 +334,3 @@ headers: {

};
const response = await o(url, requestInfo);
const response = await e(url, requestInfo);
if (!response.ok) {

@@ -293,7 +345,7 @@ throw new SolanaHttpError({

}
var t2 = e__default.default;
var t = e2__default.default;
// src/transports/websocket/websocket-connection.ts
var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -320,3 +372,3 @@ async function createWebSocketConnection({

errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);
if (webSocket.readyState !== t2.CLOSED && webSocket.readyState !== t2.CLOSING) {
if (webSocket.readyState !== t.CLOSED && webSocket.readyState !== t.CLOSING) {
webSocket.close(1e3);

@@ -349,7 +401,7 @@ }

const message = JSON.stringify(payload);
if (!bufferDrainWatcher && webSocket.readyState === t2.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
if (!bufferDrainWatcher && webSocket.readyState === t.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
let onCancel;
const promise = new Promise((resolve2, reject2) => {
const intervalId = setInterval(() => {
if (webSocket.readyState !== t2.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
if (webSocket.readyState !== t.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
clearInterval(intervalId);

@@ -408,7 +460,7 @@ bufferDrainWatcher = void 0;

});
} catch (e2) {
if (e2 === EXPLICIT_ABORT_TOKEN) {
} catch (e3) {
if (e3 === EXPLICIT_ABORT_TOKEN) {
return;
} else {
throw new Error("WebSocket connection closed", { cause: e2 });
throw new Error("WebSocket connection closed", { cause: e3 });
}

@@ -436,3 +488,3 @@ }

}
const webSocket = new t2(url);
const webSocket = new t(url);
webSocket.addEventListener("close", handleClose);

@@ -446,3 +498,6 @@ webSocket.addEventListener("error", handleError);

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -472,2 +527,4 @@ const protocolMatch = url.match(/^([^:]+):/);

exports.createJsonRpc = createJsonRpc;
exports.createJsonRpcApi = createJsonRpcApi;
exports.createJsonRpcSubscriptionsApi = createJsonRpcSubscriptionsApi;
exports.createJsonSubscriptionRpc = createJsonSubscriptionRpc;

@@ -474,0 +531,0 @@ exports.createWebSocketTransport = createWebSocketTransport;

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.node.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.node.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","fetchImpl","WebSocketImpl","t","resolve","reject","e"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { PendingRpcRequest, Rpc, RpcConfig, RpcRequest, SendOptions } from './json-rpc-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseProcessor } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (responseProcessor ? responseProcessor(response.result) : response.result) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return makeProxy(rpcConfig);\n}\n","import { JsonRpcResponse } from './json-rpc';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptionConfig,\n RpcSubscriptions,\n SubscribeOptions,\n} from './json-rpc-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }: RpcSubscription<TNotification>\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseProcessor ? responseProcessor(notification) : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.'\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return makeProxy(rpcConfig);\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.fetch`.\nimport fetchImpl from 'node-fetch';\n\nexport default typeof globalThis.fetch === 'function'\n ? // The Fetch API is supported experimentally in Node 17.5+ and natively in Node 18+.\n globalThis.fetch\n : // Otherwise use the polyfill.\n fetchImpl;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.'\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import type { Agent as NodeHttpAgent } from 'node:http';\nimport type { Agent as NodeHttpsAgent } from 'node:https';\n\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);\n url: string;\n}>;\n\nexport function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const agent = __NODEJS__ ? httpAgentNodeOnly : undefined;\n if (__DEV__ && httpAgentNodeOnly != null) {\n console.warn(\n 'createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ' +\n 'ignored; HTTP agents are only usable in Node environments.'\n );\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n agent,\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n };\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.WebSocket`.\nimport WebSocketImpl from 'ws';\n\nexport default WebSocketImpl;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user\"\n : undefined\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev })\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent')\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise'\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { IRpcWebSocketTransport } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n url: string;\n}>;\n\nexport function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n };\n}\n"]}
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/apis/methods/methods-api.ts","../src/apis/subscriptions/subscriptions-api.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.node.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.node.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_node_default","WebSocketImpl","resolve","reject","e"],"mappings":";AACO,IAAM,UAA2B,uBAAO,QAAgB,KAAU,EAAE,aAAa,eAAe;;;ACGhG,SAAS,iBAAqD,QAA6C;AAC9G,SAAO,IAAI,MAAM,CAAC,GAA2B;AAAA,IACzC,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,OACO,MACL;AACE,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,YAAM,aAAa,EAAE,SAAS;AAC9B,aAAO,YACA,WAG6C;AAChD,cAAM,SAAS,QAAQ,wBACjB,QAAQ,sBAAsB,WAAW,UAAU,IACnD;AACN,cAAM,sBAAsB,QAAQ,sBAC9B,QAAQ,sBACR,CAAC,gBAAyB;AAChC,eAAO;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;;;AChCO,SAAS,8BACZ,QACuC;AACvC,SAAO,IAAI,MAAM,CAAC,GAA8C;AAAA,IAC5D,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,OACO,MACL;AACE,YAAM,CAAC,GAAG,CAAC,IAAI;AACf,YAAM,mBAAmB,EAAE,SAAS;AACpC,aAAO,YACA,WAK8D;AACjE,cAAM,SAAS,QAAQ,wBACjB,QAAQ,sBAAsB,WAAW,gBAAgB,IACzD;AACN,cAAM,sBAAsB,QAAQ,sBAC9B,QAAQ,sBACR,CAAC,gBAAyB;AAChC,cAAM,sBAAsB,QAAQ,uCAC9B,QAAQ,qCAAqC,gBAAgB,IAC7D;AACN,cAAM,wBAAwB,QAAQ,yCAChC,QAAQ,uCAAuC,gBAAgB,IAC/D;AACN,eAAO;AAAA,UACH;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;;;AClBO,IAAM,qBAAN,cAAiC,MAAM;AAAA,EACjC;AAAA,EACA;AAAA,EACT,YAAY,SAAoC;AAC5C,UAAM,uBAAuB,QAAQ,IAAI,MAAM,QAAQ,OAAO,EAAE;AAChE,UAAM,kBAAkB,MAAM,KAAK,WAAW;AAC9C,SAAK,OAAO,QAAQ;AACpB,SAAK,OAAO,QAAQ;AAAA,EACxB;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AACJ;;;ACzCA,IAAI,iBAAiB;AACd,SAAS,mBAAmB;AAC/B,QAAM,KAAK;AACX,oBAAkB,iBAAiB,KAAK,OAAO;AAC/C,SAAO;AACX;;;ACHO,SAAS,qBAA8B,QAAgB,QAAiB;AAC3E,SAAO;AAAA,IACH,IAAI,iBAAiB;AAAA,IACrB,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACJ;AACJ;;;ACUA,SAAS,wBACL,WACA,gBAC4B;AAC5B,SAAO;AAAA,IACH,MAAM,KAAK,SAA2C;AAClD,YAAM,EAAE,YAAY,QAAQ,oBAAoB,IAAI;AACpD,YAAM,UAAU,qBAAqB,YAAY,MAAM;AACvD,YAAM,WAAW,MAAM,UAAU,UAAoC;AAAA,QACjE;AAAA,QACA,QAAQ,SAAS;AAAA,MACrB,CAAC;AACD,UAAI,WAAW,UAAU;AACrB,cAAM,IAAI,mBAAmB,SAAS,KAAK;AAAA,MAC/C,OAAO;AACH,eACI,sBAAsB,oBAAoB,SAAS,QAAQ,UAAU,IAAI,SAAS;AAAA,MAE1F;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAAS,UAAuB,WAAqD;AACjF,SAAO,IAAI,MAAM,UAAU,KAAK;AAAA,IAC5B,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,IAAI,QAAQ,GAAG,UAAU;AACrB,aAAO,YAAa,WAAsB;AACtC,cAAM,aAAa,EAAE,SAAS;AAC9B,cAAM,mBAAmB,QAAQ,IAAI,QAAQ,YAAY,QAAQ;AACjE,cAAM,aAAa,mBACb,iBAAiB,GAAG,SAAS,IAC7B,EAAE,YAAY,QAAQ,UAAU;AACtC,eAAO,wBAAwB,WAAW,UAAU;AAAA,MACxD;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AA0BO,SAAS,cACZ,WACmD;AACnD,SAAO,UAAU,SAAS;AAC9B;;;AC1DA,SAAS,wBAAwB,UAAkC,WAA6B;AAC5F,GAAC,YAAY;AACT,QAAI;AAEA,uBAAiB,KAAK;AAAS;AAAA,IACnC,QAAQ;AAAA,IAER,UAAE;AAEE,gBAAU;AAAA,IACd;AAAA,EACJ,GAAG;AACP;AAEA,SAAS,6BACL,WACA,EAAE,QAAQ,qBAAqB,uBAAuB,oBAAoB,GACrC;AACrC,SAAO;AAAA,IACH,MAAM,UAAU,EAAE,YAAY,GAA4D;AACtF,kBAAY,eAAe;AAC3B,UAAI;AACJ,eAAS,gBAAgB;AACrB,YAAI,mBAAmB,QAAW;AAC9B,gBAAM,UAAU,qBAAqB,uBAAuB,CAAC,cAAc,CAAC;AAC5E,qBAAW,qCAAqC,OAAO,EAAE,QAAQ,MAAM;AACnE,sCAA0B,MAAM;AAAA,UACpC,CAAC;AAAA,QACL,OAAO;AACH,oCAA0B,MAAM;AAAA,QACpC;AAAA,MACJ;AACA,kBAAY,iBAAiB,SAAS,aAAa;AAInD,YAAM,4BAA4B,IAAI,gBAAgB;AACtD,YAAM,mBAAmB,qBAAqB,qBAAqB,MAAM;AACzE,YAAM,aAAa,MAAM,UAAU,UAAU;AAAA,QACzC,SAAS;AAAA,QACT,QAAQ,0BAA0B;AAAA,MACtC,CAAC;AACD,eAAS,0BAA0B;AAC/B,oBAAY,oBAAoB,SAAS,aAAa;AAAA,MAC1D;AACA,8BAAwB,YAAY,uBAAuB;AAI3D,uBAAiB,WAAW,YAEzB;AACC,YAAI,QAAQ,WAAW,QAAQ,OAAO,iBAAiB,IAAI;AACvD,cAAI,WAAW,SAAS;AACpB,kBAAM,IAAI,mBAAmB,QAAQ,KAAK;AAAA,UAC9C,OAAO;AACH,6BAAiB,QAAQ;AACzB;AAAA,UACJ;AAAA,QACJ;AAAA,MACJ;AACA,UAAI,kBAAkB,MAAM;AAExB,cAAM,IAAI,MAAM,oDAAoD;AAAA,MACxE;AAIA,aAAO;AAAA,QACH,QAAQ,OAAO,aAAa,IAAI;AAC5B,2BAAiB,WAAW,YAEzB;AACC,gBAAI,EAAE,YAAY,YAAY,QAAQ,OAAO,iBAAiB,gBAAgB;AAC1E;AAAA,YACJ;AACA,kBAAM,eAAe,QAAQ,OAAO;AACpC,kBAAM,sBACA,oBAAoB,cAAc,mBAAmB,IACrD;AAAA,UACV;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEA,SAASA,WACL,WACyC;AACzC,SAAO,IAAI,MAAM,UAAU,KAAK;AAAA,IAC5B,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,iBAAiB;AACb,aAAO;AAAA,IACX;AAAA,IACA,IAAI,QAAQ,GAAG,UAAU;AACrB,aAAO,YAAa,WAAsB;AACtC,cAAM,aAAa,EAAE,SAAS;AAC9B,cAAM,wBAAwB,QAAQ,IAAI,QAAQ,YAAY,QAAQ;AACtE,YAAI,EAAE,SAAS,EAAE,SAAS,eAAe,MAAM,SAAS,CAAC,uBAAuB;AAE5E,gBAAM,IAAI;AAAA,YACN;AAAA,UAGJ;AAAA,QACJ;AACA,cAAM,aAAa,wBACb,sBAAsB,GAAG,SAAS,IAClC;AAAA,UACI,QAAQ;AAAA,UACR,qBAAqB,WAAW,QAAQ,kBAAkB,WAAW;AAAA,UACrE,uBAAuB,WAAW,QAAQ,kBAAkB,aAAa;AAAA,QAC7E;AACN,eAAO,6BAA6B,WAAW,UAAU;AAAA,MAC7D;AAAA,IACJ;AAAA,EACJ,CAAC;AACL;AA0BO,SAAS,0BAGd,WAAkG;AAChG,SAAOA,WAAU,SAAS;AAC9B;;;ACvLA,IAAOC,IAAQ,WAAW;;;ACInB,IAAM,kBAAN,cAA8B,MAAM;AAAA,EAC9B;AAAA,EACT,YAAY,SAAiC;AACzC,UAAM,eAAe,QAAQ,UAAU,MAAM,QAAQ,OAAO,EAAE;AAC9D,UAAM,kBAAkB,MAAM,KAAK,WAAW;AAC9C,SAAK,aAAa,QAAQ;AAAA,EAC9B;AAAA,EACA,IAAI,OAAO;AACP,WAAO;AAAA,EACX;AACJ;;;AC2BA,IAAM,qBAA8C;AAAA,EAChD,QAAQ;AAAA,EACR,kBAAkB;AAAA,EAClB,gBAAgB;AACpB;AAEA,IAAM,oBAA6C;AAAA,EAC/C,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,kCAAkC;AAAA,EAClC,iCAAiC;AAAA,EACjC,YAAY;AAAA,EACZ,kBAAkB;AAAA,EAClB,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,sBAAsB;AAAA;AAAA;AAAA;AAAA,EAItB,SAAS;AAAA,EACT,IAAI;AAAA,EACJ,SAAS;AAAA,EACT,qBAAqB;AAAA,EACrB,SAAS;AAAA,EACT,KAAK;AACT;AAEO,SAAS,kCACZ,SAC4C;AAC5C,QAAM,aAAa,OAAO,KAAK,OAAO,EAAE,OAAO,gBAAc;AACzD,UAAM,sBAAsB,WAAW,YAAY;AACnD,WACI,mBAAmB,WAAW,YAAY,CAAC,MAAM,QACjD,kBAAkB,WAAW,YAAY,CAAC,MAAM,QAChD,oBAAoB,WAAW,QAAQ,KACvC,oBAAoB,WAAW,MAAM;AAAA,EAE7C,CAAC;AACD,MAAI,WAAW,SAAS,GAAG;AACvB,UAAM,IAAI;AAAA,MACN,GAAG,WAAW,SAAS,IAAI,sBAAsB,gBAAgB,iBACxD,WAAW,KAAK,MAAM,CAAC;AAAA,IAEpC;AAAA,EACJ;AACJ;AAMO,SAAS,iBACZ,SACiD;AACjD,QAAM,MAA8B,CAAC;AACrC,aAAW,cAAc,SAAS;AAC9B,QAAI,WAAW,YAAY,CAAC,IAAI,QAAQ,UAAU;AAAA,EACtD;AACA,SAAO;AACX;;;AC3FO,SAAS,oBAAoD;AAAA,EAChE;AAAA,EACA;AACJ,GAAkE;AAC9D,MAAI,WAAW,SAAS;AACpB,sCAAkC,OAAO;AAAA,EAC7C;AACA,QAAM,gBAAgB,WAAW,iBAAiB,OAAO;AACzD,SAAO,eAAe,gBAA2B;AAAA,IAC7C;AAAA,IACA;AAAA,EACJ,GAAqD;AACjD,UAAM,OAAO,KAAK,UAAU,OAAO;AACnC,UAAM,cAAc;AAAA,MAChB;AAAA,MACA,SAAS;AAAA,QACL,GAAG;AAAA;AAAA,QAEH,QAAQ;AAAA,QACR,kBAAkB,KAAK,OAAO,SAAS;AAAA,QACvC,gBAAgB;AAAA,MACpB;AAAA,MACA,QAAQ;AAAA,MACR;AAAA,IACJ;AACA,UAAM,WAAW,MAAM,EAAU,KAAK,WAAW;AACjD,QAAI,CAAC,SAAS,IAAI;AACd,YAAM,IAAI,gBAAgB;AAAA,QACtB,SAAS,SAAS;AAAA,QAClB,YAAY,SAAS;AAAA,MACzB,CAAC;AAAA,IACL;AACA,WAAQ,MAAM,SAAS,KAAK;AAAA,EAChC;AACJ;;;ACjDA,OAAOC,QAAmB;;;;ACsB1B,IAAM,uBAAuB;AAAA,EACzB,UACM,yGACA;AACV;AAEA,eAAsB,0BAA0B;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AACJ,GAA4C;AACxC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACpC,WAAO,iBAAiB,SAAS,aAAa,EAAE,MAAM,KAAK,CAAC;AAC5D,UAAM,gBAAiD,oBAAI,IAAI;AAC/D,aAAS,+BAA+B,QAAiB;AACrD,YAAM,iBAAiB,CAAC,GAAG,cAAc,OAAO,CAAC,EAC5C,OAAO,CAAC,UAAkE,MAAM,WAAW,EAC3F,IAAI,CAAC,EAAE,QAAQ,MAAM,OAAO;AACjC,oBAAc,MAAM;AACpB,qBAAe,QAAQ,QAAM;AACzB,YAAI;AACA,aAAG,MAAM;AAAA,QACb,QAAQ;AAAA,QAER;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAS,cAAc;AACnB,qCAA+B,oBAAoB;AACnD,UAAI,UAAU,eAAe,EAAU,UAAU,UAAU,eAAe,EAAU,SAAS;AACzF,kBAAU,MAAM,GAAI;AAAA,MACxB;AAAA,IACJ;AACA,aAAS,YAAY,IAAgB;AACjC,0BAAoB,SAAS;AAC7B,aAAO,oBAAoB,SAAS,WAAW;AAC/C,gBAAU,oBAAoB,SAAS,WAAW;AAClD,gBAAU,oBAAoB,SAAS,WAAW;AAClD,gBAAU,oBAAoB,QAAQ,UAAU;AAChD,gBAAU,oBAAoB,WAAW,aAAa;AACtD,qCAA+B,EAAE;AAAA,IACrC;AACA,aAAS,YAAY,IAAW;AAC5B,UAAI,CAAC,cAAc;AACf;AAAA;AAAA,UAEI,IAAI,MAAM,+BAA+B,EAAE,OAAO,GAAG,CAAC;AAAA,QAC1D;AAAA,MACJ;AAAA,IACJ;AACA,QAAI,eAAe;AACnB,QAAI;AACJ,aAAS,aAAa;AAClB,qBAAe;AACf,cAAQ;AAAA,QACJ,MAAM,KAAK,SAAkB;AACzB,gBAAM,UAAU,KAAK,UAAU,OAAO;AACtC,cACI,CAAC,sBACD,UAAU,eAAe,EAAU,QACnC,UAAU,iBAAiB,yBAC7B;AACE,gBAAI;AACJ,kBAAM,UAAU,IAAI,QAAc,CAACC,UAASC,YAAW;AACnD,oBAAM,aAAa,YAAY,MAAM;AACjC,oBACI,UAAU,eAAe,EAAU,QACnC,EAAE,UAAU,iBAAiB,0BAC/B;AACE,gCAAc,UAAU;AACxB,uCAAqB;AACrB,kBAAAD,SAAQ;AAAA,gBACZ;AAAA,cACJ,GAAG,EAAE;AACL,yBAAW,MAAM;AACb,qCAAqB;AACrB,8BAAc,UAAU;AACxB,gBAAAC;AAAA;AAAA,kBAEI,IAAI,MAAM,mDAAmD;AAAA,gBACjE;AAAA,cACJ;AAAA,YACJ,CAAC;AACD,iCAAqB;AAAA;AAAA;AAAA,cAGjB;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AACA,cAAI,oBAAoB;AACpB,kBAAM,mBAAmB;AAAA,UAC7B;AACA,oBAAU,KAAK,OAAO;AAAA,QAC1B;AAAA,QACA,QAAQ,OAAO,aAAa,IAAI;AAC5B,gBAAM,cAAc,OAAO;AAC3B,wBAAc,IAAI,aAAa,EAAE,aAAa,OAAO,gBAAgB,CAAC,EAAE,CAAC;AACzE,cAAI;AACA,mBAAO,MAAM;AACT,oBAAM,QAAQ,cAAc,IAAI,WAAW;AAC3C,kBAAI,CAAC,OAAO;AAER,sBAAM,IAAI,MAAM,gEAAgE;AAAA,cACpF;AACA,kBAAI,MAAM,aAAa;AAEnB,sBAAM,IAAI;AAAA,kBACN;AAAA,gBAEJ;AAAA,cACJ;AACA,oBAAM,iBAAiB,MAAM;AAC7B,kBAAI,eAAe,QAAQ;AACvB,sBAAM,iBAAiB,CAAC;AACxB,uBAAO;AAAA,cACX,OAAO;AACH,oBAAI;AACA,wBAAM,MAAM,IAAI,QAAQ,CAACD,UAASC,YAAW;AACzC,kCAAc,IAAI,aAAa;AAAA,sBAC3B,aAAa;AAAA,sBACb,SAASA;AAAA,sBACT,WAAWD;AAAA,oBACf,CAAC;AAAA,kBACL,CAAC;AAAA,gBACL,SAASE,IAAG;AACR,sBAAIA,OAAM,sBAAsB;AAC5B;AAAA,kBACJ,OAAO;AAEH,0BAAM,IAAI,MAAM,+BAA+B,EAAE,OAAOA,GAAE,CAAC;AAAA,kBAC/D;AAAA,gBACJ;AAAA,cACJ;AAAA,YACJ;AAAA,UACJ,UAAE;AACE,0BAAc,OAAO,WAAW;AAAA,UACpC;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL;AACA,aAAS,cAAc,EAAE,KAAK,GAAiB;AAC3C,YAAM,UAAU,KAAK,MAAM,IAAI;AAC/B,oBAAc,QAAQ,CAAC,OAAO,gBAAgB;AAC1C,YAAI,MAAM,aAAa;AACnB,gBAAM,EAAE,UAAU,IAAI;AACtB,wBAAc,IAAI,aAAa,EAAE,aAAa,OAAO,gBAAgB,CAAC,EAAE,CAAC;AACzE,oBAAU,OAAO;AAAA,QACrB,OAAO;AACH,gBAAM,eAAe,KAAK,OAAO;AAAA,QACrC;AAAA,MACJ,CAAC;AAAA,IACL;AACA,UAAM,YAAY,IAAI,EAAU,GAAG;AACnC,cAAU,iBAAiB,SAAS,WAAW;AAC/C,cAAU,iBAAiB,SAAS,WAAW;AAC/C,cAAU,iBAAiB,QAAQ,UAAU;AAC7C,cAAU,iBAAiB,WAAW,aAAa;AAAA,EACvD,CAAC;AACL;;;AC5KO,SAAS,yBAAyD;AAAA,EACrE;AAAA,EACA;AACJ,GAA2E;AACvE,MAAI,UAAU,KAAK,GAAG,MAAM,OAAO;AAC/B,UAAM,gBAAgB,IAAI,MAAM,WAAW;AAC3C,UAAM,IAAI;AAAA,MACN,gBACM,oFAAoF,cAAc,CAAC,CAAC,uBACpG,6CAA6C,GAAG;AAAA,IAC1D;AAAA,EACJ;AACA,SAAO,eAAe,qBAAqB,EAAE,SAAS,OAAO,GAA0C;AACnG,YAAQ,eAAe;AACvB,UAAM,aAAa,MAAM,0BAA0B;AAAA,MAC/C;AAAA,MACA;AAAA,MACA;AAAA,IACJ,CAAC;AACD,YAAQ,eAAe;AACvB,UAAM,WAAW,KAAK,OAAO;AAC7B,WAAO;AAAA,MACH,CAAC,OAAO,aAAa,GAAG,WAAW,OAAO,aAAa,EAAE,KAAK,UAAU;AAAA,MACxE,sCAAsC,WAAW,KAAK,KAAK,UAAU;AAAA,IACzE;AAAA,EACJ;AACJ","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","import { IRpcApi, IRpcApiMethods, RpcRequest } from '@solana/rpc-types';\n\nimport { RpcApiConfig } from '../api-types';\n\nexport function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods> {\n return new Proxy({} as IRpcApi<TRpcMethods>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TMethodName extends keyof IRpcApi<TRpcMethods>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<TRpcMethods>>['get']>>\n ) {\n const [_, p] = args;\n const methodName = p.toString() as keyof TRpcMethods as string;\n return function (\n ...rawParams: Parameters<\n TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never\n >\n ): RpcRequest<ReturnType<TRpcMethods[TMethodName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, methodName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcMethods[TMethodName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcMethods[TMethodName]>;\n return {\n methodName,\n params,\n responseTransformer,\n };\n };\n },\n });\n}\n","import { IRpcApiSubscriptions, IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-types';\n\nimport { RpcSubscriptionsApiConfig } from '../api-types';\n\nexport function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(\n config?: RpcSubscriptionsApiConfig,\n): IRpcSubscriptionsApi<TRpcSubscriptions> {\n return new Proxy({} as IRpcSubscriptionsApi<TRpcSubscriptions>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TNotificationName extends keyof IRpcSubscriptionsApi<TRpcSubscriptions>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcSubscriptionsApi<TRpcSubscriptions>>['get']>>\n ) {\n const [_, p] = args;\n const notificationName = p.toString() as keyof TRpcSubscriptions as string;\n return function (\n ...rawParams: Parameters<\n TRpcSubscriptions[TNotificationName] extends CallableFunction\n ? TRpcSubscriptions[TNotificationName]\n : never\n >\n ): RpcSubscription<ReturnType<TRpcSubscriptions[TNotificationName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, notificationName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcSubscriptions[TNotificationName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcSubscriptions[TNotificationName]>;\n const subscribeMethodName = config?.subscribeNotificationNameTransformer\n ? config?.subscribeNotificationNameTransformer(notificationName)\n : notificationName;\n const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer\n ? config?.unsubscribeNotificationNameTransformer(notificationName)\n : notificationName;\n return {\n params,\n responseTransformer,\n subscribeMethodName,\n unsubscribeMethodName,\n };\n };\n },\n });\n}\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { IRpcApi, PendingRpcRequest, Rpc, RpcRequest, SendOptions } from '@solana/rpc-types';\n\nimport { RpcConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { RpcDevnet, RpcFromTransport, RpcMainnet, RpcTestnet } from './json-rpc-types';\nimport {\n IRpcTransport,\n IRpcTransportDevnet,\n IRpcTransportMainnet,\n IRpcTransportTestnet,\n} from './transports/transport-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>,\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseTransformer } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (\n responseTransformer ? responseTransformer(response.result, methodName) : response.result\n ) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportDevnet;\n }>,\n): RpcDevnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportTestnet;\n }>,\n): RpcTestnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportMainnet;\n }>,\n): RpcMainnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransport;\n }>,\n): Rpc<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods, TConfig extends RpcConfig<TRpcMethods>>(\n rpcConfig: TConfig,\n): RpcFromTransport<TRpcMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcFromTransport<TRpcMethods, TConfig['transport']>;\n}\n","import {\n IRpcSubscriptionsApi,\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptions,\n SubscribeOptions,\n} from '@solana/rpc-types';\n\nimport { JsonRpcResponse } from './json-rpc';\nimport { RpcSubscriptionConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n RpcSubscriptionsDevnet,\n RpcSubscriptionsFromTransport,\n RpcSubscriptionsMainnet,\n RpcSubscriptionsTestnet,\n} from './json-rpc-types';\nimport {\n IRpcWebSocketTransport,\n IRpcWebSocketTransportDevnet,\n IRpcWebSocketTransportMainnet,\n IRpcWebSocketTransportTestnet,\n} from './transports/transport-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }: RpcSubscription<TNotification>,\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseTransformer\n ? responseTransformer(notification, subscribeMethodName)\n : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.',\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportDevnet;\n }>,\n): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportTestnet;\n }>,\n): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportMainnet;\n }>,\n): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransport;\n }>,\n): RpcSubscriptions<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<\n TRpcSubscriptionMethods,\n TConfig extends RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n>(rpcConfig: TConfig): RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']>;\n}\n","// TODO(https://github.com/solana-labs/solana-web3.js/issues/1787) Write HTTP/2 implementation.\nexport default globalThis.fetch; // The Fetch API is supported natively in Node 18+.\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>,\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.',\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import { ClusterUrl } from '@solana/rpc-types';\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport, IRpcTransportFromClusterUrl } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n url: TClusterUrl;\n}>;\n\nexport function createHttpTransport<TClusterUrl extends ClusterUrl>({\n headers,\n url,\n}: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl> {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n } as IRpcTransportFromClusterUrl<TClusterUrl>;\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.WebSocket`.\nimport WebSocketImpl from 'ws';\n\nexport default WebSocketImpl;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user\"\n : undefined,\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev }),\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent'),\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise',\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { ClusterUrl } from '@solana/rpc-types';\n\nimport { IRpcWebSocketTransport, IRpcWebSocketTransportFromClusterUrl } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n sendBufferHighWatermark: number;\n url: TClusterUrl;\n}>;\n\nexport function createWebSocketTransport<TClusterUrl extends ClusterUrl>({\n sendBufferHighWatermark,\n url,\n}: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl> {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`,\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n } as IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;\n}\n"]}

@@ -1,3 +0,2 @@

import t from 'node-fetch';
import e from 'ws';
import e2 from 'ws';

@@ -7,4 +6,59 @@ // ../build-scripts/env-shim.ts

// src/apis/methods/methods-api.ts
function createJsonRpcApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const methodName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, methodName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
return {
methodName,
params,
responseTransformer
};
};
}
});
}
// src/apis/subscriptions/subscriptions-api.ts
function createJsonRpcSubscriptionsApi(config) {
return new Proxy({}, {
defineProperty() {
return false;
},
deleteProperty() {
return false;
},
get(...args) {
const [_, p] = args;
const notificationName = p.toString();
return function(...rawParams) {
const params = config?.parametersTransformer ? config?.parametersTransformer(rawParams, notificationName) : rawParams;
const responseTransformer = config?.responseTransformer ? config?.responseTransformer : (rawResponse) => rawResponse;
const subscribeMethodName = config?.subscribeNotificationNameTransformer ? config?.subscribeNotificationNameTransformer(notificationName) : notificationName;
const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer ? config?.unsubscribeNotificationNameTransformer(notificationName) : notificationName;
return {
params,
responseTransformer,
subscribeMethodName,
unsubscribeMethodName
};
};
}
});
}
// src/json-rpc-errors.ts
var SolanaJsonRpcError = class extends Error {
code;
data;
constructor(details) {

@@ -43,3 +97,3 @@ super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);

async send(options) {
const { methodName, params, responseProcessor } = pendingRequest;
const { methodName, params, responseTransformer } = pendingRequest;
const payload = createJsonRpcMessage(methodName, params);

@@ -53,3 +107,3 @@ const response = await rpcConfig.transport({

} else {
return responseProcessor ? responseProcessor(response.result) : response.result;
return responseTransformer ? responseTransformer(response.result, methodName) : response.result;
}

@@ -93,3 +147,3 @@ }

}
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }) {
function createPendingRpcSubscription(rpcConfig, { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }) {
return {

@@ -140,3 +194,3 @@ async subscribe({ abortSignal }) {

const notification = message.params.result;
yield responseProcessor ? responseProcessor(notification) : notification;
yield responseTransformer ? responseTransformer(notification, subscribeMethodName) : notification;
}

@@ -178,6 +232,9 @@ }

}
var o = typeof globalThis.fetch == "function" ? globalThis.fetch : t;
// ../fetch-impl/dist/index.node.js
var e = globalThis.fetch;
// src/transports/http/http-transport-errors.ts
var SolanaHttpError = class extends Error {
statusCode;
constructor(details) {

@@ -244,12 +301,9 @@ super(`HTTP error (${details.statusCode}): ${details.message}`);

// src/transports/http/http-transport.ts
function createHttpTransport({ httpAgentNodeOnly, headers, url }) {
function createHttpTransport({
headers,
url
}) {
if (__DEV__ && headers) {
assertIsAllowedHttpRequestHeaders(headers);
}
const agent = httpAgentNodeOnly ;
if (__DEV__ && httpAgentNodeOnly != null) {
console.warn(
"createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ignored; HTTP agents are only usable in Node environments."
);
}
const customHeaders = headers && normalizeHeaders(headers);

@@ -262,3 +316,2 @@ return async function makeHttpRequest({

const requestInfo = {
agent,
body,

@@ -275,3 +328,3 @@ headers: {

};
const response = await o(url, requestInfo);
const response = await e(url, requestInfo);
if (!response.ok) {

@@ -286,7 +339,7 @@ throw new SolanaHttpError({

}
var t2 = e;
var t = e2;
// src/transports/websocket/websocket-connection.ts
var EXPLICIT_ABORT_TOKEN = Symbol(
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user" : void 0
__DEV__ ? "This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user" : void 0
);

@@ -313,3 +366,3 @@ async function createWebSocketConnection({

errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);
if (webSocket.readyState !== t2.CLOSED && webSocket.readyState !== t2.CLOSING) {
if (webSocket.readyState !== t.CLOSED && webSocket.readyState !== t.CLOSING) {
webSocket.close(1e3);

@@ -342,7 +395,7 @@ }

const message = JSON.stringify(payload);
if (!bufferDrainWatcher && webSocket.readyState === t2.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
if (!bufferDrainWatcher && webSocket.readyState === t.OPEN && webSocket.bufferedAmount > sendBufferHighWatermark) {
let onCancel;
const promise = new Promise((resolve2, reject2) => {
const intervalId = setInterval(() => {
if (webSocket.readyState !== t2.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
if (webSocket.readyState !== t.OPEN || !(webSocket.bufferedAmount > sendBufferHighWatermark)) {
clearInterval(intervalId);

@@ -401,7 +454,7 @@ bufferDrainWatcher = void 0;

});
} catch (e2) {
if (e2 === EXPLICIT_ABORT_TOKEN) {
} catch (e3) {
if (e3 === EXPLICIT_ABORT_TOKEN) {
return;
} else {
throw new Error("WebSocket connection closed", { cause: e2 });
throw new Error("WebSocket connection closed", { cause: e3 });
}

@@ -429,3 +482,3 @@ }

}
const webSocket = new t2(url);
const webSocket = new t(url);
webSocket.addEventListener("close", handleClose);

@@ -439,3 +492,6 @@ webSocket.addEventListener("error", handleError);

// src/transports/websocket/websocket-transport.ts
function createWebSocketTransport({ sendBufferHighWatermark, url }) {
function createWebSocketTransport({
sendBufferHighWatermark,
url
}) {
if (/^wss?:/i.test(url) === false) {

@@ -463,4 +519,4 @@ const protocolMatch = url.match(/^([^:]+):/);

export { createHttpTransport, createJsonRpc, createJsonSubscriptionRpc, createWebSocketTransport };
export { createHttpTransport, createJsonRpc, createJsonRpcApi, createJsonRpcSubscriptionsApi, createJsonSubscriptionRpc, createWebSocketTransport };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=index.node.js.map

@@ -1,1 +0,1 @@

{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.node.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.node.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","fetchImpl","WebSocketImpl","t","resolve","reject","e"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { PendingRpcRequest, Rpc, RpcConfig, RpcRequest, SendOptions } from './json-rpc-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseProcessor } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (responseProcessor ? responseProcessor(response.result) : response.result) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return makeProxy(rpcConfig);\n}\n","import { JsonRpcResponse } from './json-rpc';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptionConfig,\n RpcSubscriptions,\n SubscribeOptions,\n} from './json-rpc-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseProcessor }: RpcSubscription<TNotification>\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseProcessor ? responseProcessor(notification) : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.'\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return makeProxy(rpcConfig);\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.fetch`.\nimport fetchImpl from 'node-fetch';\n\nexport default typeof globalThis.fetch === 'function'\n ? // The Fetch API is supported experimentally in Node 17.5+ and natively in Node 18+.\n globalThis.fetch\n : // Otherwise use the polyfill.\n fetchImpl;\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.'\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import type { Agent as NodeHttpAgent } from 'node:http';\nimport type { Agent as NodeHttpsAgent } from 'node:https';\n\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);\n url: string;\n}>;\n\nexport function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const agent = __NODEJS__ ? httpAgentNodeOnly : undefined;\n if (__DEV__ && httpAgentNodeOnly != null) {\n console.warn(\n 'createHttpTransport(): The `httpAgentNodeOnly` config you supplied has been ' +\n 'ignored; HTTP agents are only usable in Node environments.'\n );\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n agent,\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n };\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.WebSocket`.\nimport WebSocketImpl from 'ws';\n\nexport default WebSocketImpl;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicity aborted by the user\"\n : undefined\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev })\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent')\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise'\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { IRpcWebSocketTransport } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n url: string;\n}>;\n\nexport function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n };\n}\n"]}
{"version":3,"sources":["../../build-scripts/env-shim.ts","../src/apis/methods/methods-api.ts","../src/apis/subscriptions/subscriptions-api.ts","../src/json-rpc-errors.ts","../src/json-rpc-message-id.ts","../src/json-rpc-message.ts","../src/json-rpc.ts","../src/json-rpc-subscription.ts","../../fetch-impl/src/index.node.ts","../src/transports/http/http-transport-errors.ts","../src/transports/http/http-transport-headers.ts","../src/transports/http/http-transport.ts","../../ws-impl/src/index.node.ts","../src/transports/websocket/websocket-connection.ts","../src/transports/websocket/websocket-transport.ts"],"names":["makeProxy","index_node_default","WebSocketImpl","resolve","reject","e"],"mappings":"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","sourcesContent":["// Clever obfuscation to prevent the build system from inlining the value of `NODE_ENV`\nexport const __DEV__ = /* @__PURE__ */ (() => (process as any)['en' + 'v'].NODE_ENV === 'development')();\n","import { IRpcApi, IRpcApiMethods, RpcRequest } from '@solana/rpc-types';\n\nimport { RpcApiConfig } from '../api-types';\n\nexport function createJsonRpcApi<TRpcMethods extends IRpcApiMethods>(config?: RpcApiConfig): IRpcApi<TRpcMethods> {\n return new Proxy({} as IRpcApi<TRpcMethods>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TMethodName extends keyof IRpcApi<TRpcMethods>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcApi<TRpcMethods>>['get']>>\n ) {\n const [_, p] = args;\n const methodName = p.toString() as keyof TRpcMethods as string;\n return function (\n ...rawParams: Parameters<\n TRpcMethods[TMethodName] extends CallableFunction ? TRpcMethods[TMethodName] : never\n >\n ): RpcRequest<ReturnType<TRpcMethods[TMethodName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, methodName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcMethods[TMethodName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcMethods[TMethodName]>;\n return {\n methodName,\n params,\n responseTransformer,\n };\n };\n },\n });\n}\n","import { IRpcApiSubscriptions, IRpcSubscriptionsApi, RpcSubscription } from '@solana/rpc-types';\n\nimport { RpcSubscriptionsApiConfig } from '../api-types';\n\nexport function createJsonRpcSubscriptionsApi<TRpcSubscriptions extends IRpcApiSubscriptions>(\n config?: RpcSubscriptionsApiConfig,\n): IRpcSubscriptionsApi<TRpcSubscriptions> {\n return new Proxy({} as IRpcSubscriptionsApi<TRpcSubscriptions>, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get<TNotificationName extends keyof IRpcSubscriptionsApi<TRpcSubscriptions>>(\n ...args: Parameters<NonNullable<ProxyHandler<IRpcSubscriptionsApi<TRpcSubscriptions>>['get']>>\n ) {\n const [_, p] = args;\n const notificationName = p.toString() as keyof TRpcSubscriptions as string;\n return function (\n ...rawParams: Parameters<\n TRpcSubscriptions[TNotificationName] extends CallableFunction\n ? TRpcSubscriptions[TNotificationName]\n : never\n >\n ): RpcSubscription<ReturnType<TRpcSubscriptions[TNotificationName]>> {\n const params = config?.parametersTransformer\n ? config?.parametersTransformer(rawParams, notificationName)\n : rawParams;\n const responseTransformer = config?.responseTransformer\n ? config?.responseTransformer<ReturnType<TRpcSubscriptions[TNotificationName]>>\n : (rawResponse: unknown) => rawResponse as ReturnType<TRpcSubscriptions[TNotificationName]>;\n const subscribeMethodName = config?.subscribeNotificationNameTransformer\n ? config?.subscribeNotificationNameTransformer(notificationName)\n : notificationName;\n const unsubscribeMethodName = config?.unsubscribeNotificationNameTransformer\n ? config?.unsubscribeNotificationNameTransformer(notificationName)\n : notificationName;\n return {\n params,\n responseTransformer,\n subscribeMethodName,\n unsubscribeMethodName,\n };\n };\n },\n });\n}\n","// Keep in sync with https://github.com/solana-labs/solana/blob/master/rpc-client-api/src/custom_error.rs\n// Typescript `enums` thwart tree-shaking. See https://bargsten.org/jsts/enums/\nexport const SolanaJsonRpcErrorCode = {\n JSON_RPC_INVALID_PARAMS: -32602,\n JSON_RPC_SCAN_ERROR: -32012,\n JSON_RPC_SERVER_ERROR_BLOCK_CLEANED_UP: -32001,\n JSON_RPC_SERVER_ERROR_BLOCK_NOT_AVAILABLE: -32004,\n JSON_RPC_SERVER_ERROR_BLOCK_STATUS_NOT_AVAILABLE_YET: -32014,\n JSON_RPC_SERVER_ERROR_KEY_EXCLUDED_FROM_SECONDARY_INDEX: -32010,\n JSON_RPC_SERVER_ERROR_LONG_TERM_STORAGE_SLOT_SKIPPED: -32009,\n JSON_RPC_SERVER_ERROR_MIN_CONTEXT_SLOT_NOT_REACHED: -32016,\n JSON_RPC_SERVER_ERROR_NODE_UNHEALTHY: -32005,\n JSON_RPC_SERVER_ERROR_NO_SNAPSHOT: -32008,\n JSON_RPC_SERVER_ERROR_SEND_TRANSACTION_PREFLIGHT_FAILURE: -32002,\n JSON_RPC_SERVER_ERROR_SLOT_SKIPPED: -32007,\n JSON_RPC_SERVER_ERROR_TRANSACTION_HISTORY_NOT_AVAILABLE: -32011,\n JSON_RPC_SERVER_ERROR_TRANSACTION_PRECOMPILE_VERIFICATION_FAILURE: -32006,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_LEN_MISMATCH: -32013,\n JSON_RPC_SERVER_ERROR_TRANSACTION_SIGNATURE_VERIFICATION_FAILURE: -32003,\n JSON_RPC_SERVER_ERROR_UNSUPPORTED_TRANSACTION_VERSION: -32015,\n} as const;\ntype SolanaJsonRpcErrorCodeEnum = (typeof SolanaJsonRpcErrorCode)[keyof typeof SolanaJsonRpcErrorCode];\n\ntype SolanaJsonRpcErrorDetails = Readonly<{\n code: number;\n data?: unknown;\n message: string;\n}>;\n\nexport class SolanaJsonRpcError extends Error {\n readonly code: SolanaJsonRpcErrorCodeEnum;\n readonly data: unknown;\n constructor(details: SolanaJsonRpcErrorDetails) {\n super(`JSON-RPC 2.0 error (${details.code}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.code = details.code as SolanaJsonRpcErrorCodeEnum;\n this.data = details.data;\n }\n get name() {\n return 'SolanaJsonRpcError';\n }\n}\n","let _nextMessageId = 0;\nexport function getNextMessageId() {\n const id = _nextMessageId;\n _nextMessageId = (_nextMessageId + 1) % Number.MAX_SAFE_INTEGER;\n return id;\n}\n","import { getNextMessageId } from './json-rpc-message-id';\n\nexport function createJsonRpcMessage<TParams>(method: string, params: TParams) {\n return {\n id: getNextMessageId(),\n jsonrpc: '2.0',\n method,\n params,\n };\n}\n","import { IRpcApi, PendingRpcRequest, Rpc, RpcRequest, SendOptions } from '@solana/rpc-types';\n\nimport { RpcConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport { RpcDevnet, RpcFromTransport, RpcMainnet, RpcTestnet } from './json-rpc-types';\nimport {\n IRpcTransport,\n IRpcTransportDevnet,\n IRpcTransportMainnet,\n IRpcTransportTestnet,\n} from './transports/transport-types';\n\ninterface IHasIdentifier {\n readonly id: number;\n}\nexport type JsonRpcResponse<TResponse> = IHasIdentifier &\n Readonly<{ result: TResponse } | { error: { code: number; message: string; data?: unknown } }>;\n\nfunction createPendingRpcRequest<TRpcMethods, TResponse>(\n rpcConfig: RpcConfig<TRpcMethods>,\n pendingRequest: RpcRequest<TResponse>,\n): PendingRpcRequest<TResponse> {\n return {\n async send(options?: SendOptions): Promise<TResponse> {\n const { methodName, params, responseTransformer } = pendingRequest;\n const payload = createJsonRpcMessage(methodName, params);\n const response = await rpcConfig.transport<JsonRpcResponse<unknown>>({\n payload,\n signal: options?.abortSignal,\n });\n if ('error' in response) {\n throw new SolanaJsonRpcError(response.error);\n } else {\n return (\n responseTransformer ? responseTransformer(response.result, methodName) : response.result\n ) as TResponse;\n }\n },\n };\n}\n\nfunction makeProxy<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcRequest = Reflect.get(target, methodName, receiver);\n const newRequest = createRpcRequest\n ? createRpcRequest(...rawParams)\n : { methodName, params: rawParams };\n return createPendingRpcRequest(rpcConfig, newRequest);\n };\n },\n }) as Rpc<TRpcMethods>;\n}\n\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportDevnet;\n }>,\n): RpcDevnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportTestnet;\n }>,\n): RpcTestnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransportMainnet;\n }>,\n): RpcMainnet<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods>(\n rpcConfig: Readonly<{\n api: IRpcApi<TRpcMethods>;\n transport: IRpcTransport;\n }>,\n): Rpc<TRpcMethods>;\nexport function createJsonRpc<TRpcMethods, TConfig extends RpcConfig<TRpcMethods>>(\n rpcConfig: TConfig,\n): RpcFromTransport<TRpcMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcFromTransport<TRpcMethods, TConfig['transport']>;\n}\n","import {\n IRpcSubscriptionsApi,\n PendingRpcSubscription,\n RpcSubscription,\n RpcSubscriptions,\n SubscribeOptions,\n} from '@solana/rpc-types';\n\nimport { JsonRpcResponse } from './json-rpc';\nimport { RpcSubscriptionConfig } from './json-rpc-config';\nimport { SolanaJsonRpcError } from './json-rpc-errors';\nimport { createJsonRpcMessage } from './json-rpc-message';\nimport {\n RpcSubscriptionsDevnet,\n RpcSubscriptionsFromTransport,\n RpcSubscriptionsMainnet,\n RpcSubscriptionsTestnet,\n} from './json-rpc-types';\nimport {\n IRpcWebSocketTransport,\n IRpcWebSocketTransportDevnet,\n IRpcWebSocketTransportMainnet,\n IRpcWebSocketTransportTestnet,\n} from './transports/transport-types';\n\ntype JsonRpcNotification<TNotification> = Readonly<{\n params: Readonly<{\n result: TNotification;\n subscription: number;\n }>;\n}>;\ntype SubscriptionId = number;\n\nfunction registerIterableCleanup(iterable: AsyncIterable<unknown>, cleanupFn: CallableFunction) {\n (async () => {\n try {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n for await (const _ of iterable);\n } catch {\n /* empty */\n } finally {\n // Run the cleanup function.\n cleanupFn();\n }\n })();\n}\n\nfunction createPendingRpcSubscription<TRpcSubscriptionMethods, TNotification>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n { params, subscribeMethodName, unsubscribeMethodName, responseTransformer }: RpcSubscription<TNotification>,\n): PendingRpcSubscription<TNotification> {\n return {\n async subscribe({ abortSignal }: SubscribeOptions): Promise<AsyncIterable<TNotification>> {\n abortSignal.throwIfAborted();\n let subscriptionId: number | undefined;\n function handleCleanup() {\n if (subscriptionId !== undefined) {\n const payload = createJsonRpcMessage(unsubscribeMethodName, [subscriptionId]);\n connection.send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED(payload).finally(() => {\n connectionAbortController.abort();\n });\n } else {\n connectionAbortController.abort();\n }\n }\n abortSignal.addEventListener('abort', handleCleanup);\n /**\n * STEP 1: Send the subscribe message.\n */\n const connectionAbortController = new AbortController();\n const subscribeMessage = createJsonRpcMessage(subscribeMethodName, params);\n const connection = await rpcConfig.transport({\n payload: subscribeMessage,\n signal: connectionAbortController.signal,\n });\n function handleConnectionCleanup() {\n abortSignal.removeEventListener('abort', handleCleanup);\n }\n registerIterableCleanup(connection, handleConnectionCleanup);\n /**\n * STEP 2: Wait for the acknowledgement from the server with the subscription id.\n */\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if ('id' in message && message.id === subscribeMessage.id) {\n if ('error' in message) {\n throw new SolanaJsonRpcError(message.error);\n } else {\n subscriptionId = message.result as SubscriptionId;\n break;\n }\n }\n }\n if (subscriptionId == null) {\n // TODO: Coded error.\n throw new Error('Failed to obtain a subscription id from the server');\n }\n /**\n * STEP 3: Return an iterable that yields notifications for this subscription id.\n */\n return {\n async *[Symbol.asyncIterator]() {\n for await (const message of connection as AsyncIterable<\n JsonRpcNotification<unknown> | JsonRpcResponse<SubscriptionId>\n >) {\n if (!('params' in message) || message.params.subscription !== subscriptionId) {\n continue;\n }\n const notification = message.params.result as TNotification;\n yield responseTransformer\n ? responseTransformer(notification, subscribeMethodName)\n : notification;\n }\n },\n };\n },\n };\n}\n\nfunction makeProxy<TRpcSubscriptionMethods>(\n rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n): RpcSubscriptions<TRpcSubscriptionMethods> {\n return new Proxy(rpcConfig.api, {\n defineProperty() {\n return false;\n },\n deleteProperty() {\n return false;\n },\n get(target, p, receiver) {\n return function (...rawParams: unknown[]) {\n const methodName = p.toString();\n const createRpcSubscription = Reflect.get(target, methodName, receiver);\n if (p.toString().endsWith('Notifications') === false && !createRpcSubscription) {\n // TODO: Coded error.\n throw new Error(\n \"Either the notification name must end in 'Notifications' or the API \" +\n 'must supply a subscription creator function to map between the ' +\n 'notification name and the subscribe/unsubscribe method names.',\n );\n }\n const newRequest = createRpcSubscription\n ? createRpcSubscription(...rawParams)\n : {\n params: rawParams,\n subscribeMethodName: methodName.replace(/Notifications$/, 'Subscribe'),\n unsubscribeMethodName: methodName.replace(/Notifications$/, 'Unsubscribe'),\n };\n return createPendingRpcSubscription(rpcConfig, newRequest);\n };\n },\n }) as RpcSubscriptions<TRpcSubscriptionMethods>;\n}\n\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportDevnet;\n }>,\n): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportTestnet;\n }>,\n): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransportMainnet;\n }>,\n): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(\n rpcConfig: Readonly<{\n api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;\n transport: IRpcWebSocketTransport;\n }>,\n): RpcSubscriptions<TRpcSubscriptionMethods>;\nexport function createJsonSubscriptionRpc<\n TRpcSubscriptionMethods,\n TConfig extends RpcSubscriptionConfig<TRpcSubscriptionMethods>,\n>(rpcConfig: TConfig): RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']> {\n return makeProxy(rpcConfig) as RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TConfig['transport']>;\n}\n","// TODO(https://github.com/solana-labs/solana-web3.js/issues/1787) Write HTTP/2 implementation.\nexport default globalThis.fetch; // The Fetch API is supported natively in Node 18+.\n","type SolanaHttpErrorDetails = Readonly<{\n statusCode: number;\n message: string;\n}>;\n\nexport class SolanaHttpError extends Error {\n readonly statusCode: number;\n constructor(details: SolanaHttpErrorDetails) {\n super(`HTTP error (${details.statusCode}): ${details.message}`);\n Error.captureStackTrace(this, this.constructor);\n this.statusCode = details.statusCode;\n }\n get name() {\n return 'SolanaHttpError';\n }\n}\n","export type AllowedHttpRequestHeaders = Readonly<\n { [headerName: string]: string } & {\n // Someone can still sneak a forbidden header past Typescript if they do something like\n // fOo-BaR, but at that point they deserve the runtime failure.\n [K in DisallowedHeaders | ForbiddenHeaders as\n | K // `Foo-Bar`\n | Capitalize<Lowercase<K>> // `Foo-bar`\n | Lowercase<K> // `foo-bar`\n | Uncapitalize<K> // `foo-Bar`\n // `FOO-BAR`\n | Uppercase<K>]?: never;\n }\n>;\n// These are headers that we simply don't allow the developer to override because they're\n// fundamental to the operation of the JSON-RPC transport.\ntype DisallowedHeaders = 'Accept' | 'Content-Length' | 'Content-Type' | 'Solana-Client';\ntype ForbiddenHeaders =\n | 'Accept-Charset'\n | 'Accept-Encoding'\n | 'Access-Control-Request-Headers'\n | 'Access-Control-Request-Method'\n | 'Connection'\n | 'Content-Length'\n | 'Cookie'\n | 'Date'\n | 'DNT'\n | 'Expect'\n | 'Host'\n | 'Keep-Alive'\n | 'Origin'\n | 'Permissions-Policy'\n // No currently available Typescript technique allows you to match on a prefix.\n // | 'Proxy-'\n // | 'Sec-'\n | 'Referer'\n | 'TE'\n | 'Trailer'\n | 'Transfer-Encoding'\n | 'Upgrade'\n | 'Via';\n\n// These are headers which are fundamental to the JSON-RPC transport, and must not be modified.\nconst DISALLOWED_HEADERS: Record<string, boolean> = {\n accept: true,\n 'content-length': true,\n 'content-type': true,\n};\n// https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name\nconst FORBIDDEN_HEADERS: Record<string, boolean> = {\n 'accept-charset': true,\n 'accept-encoding': true,\n 'access-control-request-headers': true,\n 'access-control-request-method': true,\n connection: true,\n 'content-length': true,\n cookie: true,\n date: true,\n dnt: true,\n expect: true,\n host: true,\n 'keep-alive': true,\n origin: true,\n 'permissions-policy': true,\n // No currently available Typescript technique allows you to match on a prefix.\n // 'proxy-':true,\n // 'sec-':true,\n referer: true,\n te: true,\n trailer: true,\n 'transfer-encoding': true,\n upgrade: true,\n via: true,\n};\n\nexport function assertIsAllowedHttpRequestHeaders(\n headers: Record<string, string>,\n): asserts headers is AllowedHttpRequestHeaders {\n const badHeaders = Object.keys(headers).filter(headerName => {\n const lowercaseHeaderName = headerName.toLowerCase();\n return (\n DISALLOWED_HEADERS[headerName.toLowerCase()] === true ||\n FORBIDDEN_HEADERS[headerName.toLowerCase()] === true ||\n lowercaseHeaderName.startsWith('proxy-') ||\n lowercaseHeaderName.startsWith('sec-')\n );\n });\n if (badHeaders.length > 0) {\n throw new Error(\n `${badHeaders.length > 1 ? 'These headers are' : 'This header is'} forbidden: ` +\n `\\`${badHeaders.join('`, `')}\\`. Learn more at ` +\n 'https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name.',\n );\n }\n}\n\n/**\n * Lowercasing header names makes it easier to override user-supplied headers, such as those defined\n * in the `DisallowedHeaders` type.\n */\nexport function 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","import { ClusterUrl } from '@solana/rpc-types';\nimport fetchImpl from 'fetch-impl';\n\nimport { IRpcTransport, IRpcTransportFromClusterUrl } from '../transport-types';\nimport { SolanaHttpError } from './http-transport-errors';\nimport {\n AllowedHttpRequestHeaders,\n assertIsAllowedHttpRequestHeaders,\n normalizeHeaders,\n} from './http-transport-headers';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n headers?: AllowedHttpRequestHeaders;\n url: TClusterUrl;\n}>;\n\nexport function createHttpTransport<TClusterUrl extends ClusterUrl>({\n headers,\n url,\n}: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl> {\n if (__DEV__ && headers) {\n assertIsAllowedHttpRequestHeaders(headers);\n }\n const customHeaders = headers && normalizeHeaders(headers);\n return async function makeHttpRequest<TResponse>({\n payload,\n signal,\n }: Parameters<IRpcTransport>[0]): Promise<TResponse> {\n const body = JSON.stringify(payload);\n const requestInfo = {\n body,\n headers: {\n ...customHeaders,\n // Keep these headers lowercase so they will override any user-supplied headers above.\n accept: 'application/json',\n 'content-length': body.length.toString(),\n 'content-type': 'application/json; charset=utf-8',\n },\n method: 'POST',\n signal,\n };\n const response = await fetchImpl(url, requestInfo);\n if (!response.ok) {\n throw new SolanaHttpError({\n message: response.statusText,\n statusCode: response.status,\n });\n }\n return (await response.json()) as TResponse;\n } as IRpcTransportFromClusterUrl<TClusterUrl>;\n}\n","// When building the browser bundle, this import gets replaced by `globalThis.WebSocket`.\nimport WebSocketImpl from 'ws';\n\nexport default WebSocketImpl;\n","import WebSocket from 'ws-impl';\n\ntype Config = Readonly<{\n sendBufferHighWatermark: number;\n signal: AbortSignal;\n url: string;\n}>;\ntype IteratorKey = symbol;\ntype IteratorState =\n | {\n __hasPolled: true;\n onMessage: Parameters<ConstructorParameters<typeof Promise>[0]>[0];\n onError: Parameters<ConstructorParameters<typeof Promise>[0]>[1];\n }\n | {\n __hasPolled: false;\n queuedMessages: unknown[];\n };\nexport type RpcWebSocketConnection = Readonly<{\n send(payload: unknown): Promise<void>;\n [Symbol.asyncIterator](): AsyncGenerator<unknown>;\n}>;\n\nconst EXPLICIT_ABORT_TOKEN = Symbol(\n __DEV__\n ? \"This symbol is thrown from a socket's iterator when the connection is explicitly aborted by the user\"\n : undefined,\n);\n\nexport async function createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n}: Config): Promise<RpcWebSocketConnection> {\n return new Promise((resolve, reject) => {\n signal.addEventListener('abort', handleAbort, { once: true });\n const iteratorState: Map<IteratorKey, IteratorState> = new Map();\n function errorAndClearAllIteratorStates(reason: unknown) {\n const errorCallbacks = [...iteratorState.values()]\n .filter((state): state is Extract<IteratorState, { __hasPolled: true }> => state.__hasPolled)\n .map(({ onError }) => onError);\n iteratorState.clear();\n errorCallbacks.forEach(cb => {\n try {\n cb(reason);\n } catch {\n /* empty */\n }\n });\n }\n function handleAbort() {\n errorAndClearAllIteratorStates(EXPLICIT_ABORT_TOKEN);\n if (webSocket.readyState !== WebSocket.CLOSED && webSocket.readyState !== WebSocket.CLOSING) {\n webSocket.close(1000);\n }\n }\n function handleClose(ev: CloseEvent) {\n bufferDrainWatcher?.onCancel();\n signal.removeEventListener('abort', handleAbort);\n webSocket.removeEventListener('close', handleClose);\n webSocket.removeEventListener('error', handleError);\n webSocket.removeEventListener('open', handleOpen);\n webSocket.removeEventListener('message', handleMessage);\n errorAndClearAllIteratorStates(ev);\n }\n function handleError(ev: Event) {\n if (!hasConnected) {\n reject(\n // TODO: Coded error\n new Error('WebSocket failed to connect', { cause: ev }),\n );\n }\n }\n let hasConnected = false;\n let bufferDrainWatcher: Readonly<{ onCancel(): void; promise: Promise<void> }> | undefined;\n function handleOpen() {\n hasConnected = true;\n resolve({\n async send(payload: unknown) {\n const message = JSON.stringify(payload);\n if (\n !bufferDrainWatcher &&\n webSocket.readyState === WebSocket.OPEN &&\n webSocket.bufferedAmount > sendBufferHighWatermark\n ) {\n let onCancel: () => void;\n const promise = new Promise<void>((resolve, reject) => {\n const intervalId = setInterval(() => {\n if (\n webSocket.readyState !== WebSocket.OPEN ||\n !(webSocket.bufferedAmount > sendBufferHighWatermark)\n ) {\n clearInterval(intervalId);\n bufferDrainWatcher = undefined;\n resolve();\n }\n }, 16);\n onCancel = () => {\n bufferDrainWatcher = undefined;\n clearInterval(intervalId);\n reject(\n // TODO: Coded error\n new Error('WebSocket was closed before payload could be sent'),\n );\n };\n });\n bufferDrainWatcher = {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n onCancel,\n promise,\n };\n }\n if (bufferDrainWatcher) {\n await bufferDrainWatcher.promise;\n }\n webSocket.send(message);\n },\n async *[Symbol.asyncIterator]() {\n const iteratorKey = Symbol();\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n try {\n while (true) {\n const state = iteratorState.get(iteratorKey);\n if (!state) {\n // There should always be state by now.\n throw new Error('Invariant: WebSocket message iterator is missing state storage');\n }\n if (state.__hasPolled) {\n // You should never be able to poll twice in a row.\n throw new Error(\n 'Invariant: WebSocket message iterator state is corrupt; ' +\n 'iterated without first resolving existing message promise',\n );\n }\n const queuedMessages = state.queuedMessages;\n if (queuedMessages.length) {\n state.queuedMessages = [];\n yield* queuedMessages;\n } else {\n try {\n yield await new Promise((resolve, reject) => {\n iteratorState.set(iteratorKey, {\n __hasPolled: true,\n onError: reject,\n onMessage: resolve,\n });\n });\n } catch (e) {\n if (e === EXPLICIT_ABORT_TOKEN) {\n return;\n } else {\n // TODO: Coded error.\n throw new Error('WebSocket connection closed', { cause: e });\n }\n }\n }\n }\n } finally {\n iteratorState.delete(iteratorKey);\n }\n },\n });\n }\n function handleMessage({ data }: MessageEvent) {\n const message = JSON.parse(data);\n iteratorState.forEach((state, iteratorKey) => {\n if (state.__hasPolled) {\n const { onMessage } = state;\n iteratorState.set(iteratorKey, { __hasPolled: false, queuedMessages: [] });\n onMessage(message);\n } else {\n state.queuedMessages.push(message);\n }\n });\n }\n const webSocket = new WebSocket(url);\n webSocket.addEventListener('close', handleClose);\n webSocket.addEventListener('error', handleError);\n webSocket.addEventListener('open', handleOpen);\n webSocket.addEventListener('message', handleMessage);\n });\n}\n","import { ClusterUrl } from '@solana/rpc-types';\n\nimport { IRpcWebSocketTransport, IRpcWebSocketTransportFromClusterUrl } from '../transport-types';\nimport { createWebSocketConnection } from './websocket-connection';\n\ntype Config<TClusterUrl extends ClusterUrl> = Readonly<{\n sendBufferHighWatermark: number;\n url: TClusterUrl;\n}>;\n\nexport function createWebSocketTransport<TClusterUrl extends ClusterUrl>({\n sendBufferHighWatermark,\n url,\n}: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl> {\n if (/^wss?:/i.test(url) === false) {\n const protocolMatch = url.match(/^([^:]+):/);\n throw new DOMException(\n protocolMatch\n ? `Failed to construct 'WebSocket': The URL's scheme must be either 'ws' or 'wss'. '${protocolMatch[1]}:' is not allowed.`\n : `Failed to construct 'WebSocket': The URL '${url}' is invalid.`,\n );\n }\n return async function sendWebSocketMessage({ payload, signal }: Parameters<IRpcWebSocketTransport>[0]) {\n signal?.throwIfAborted();\n const connection = await createWebSocketConnection({\n sendBufferHighWatermark,\n signal,\n url,\n });\n signal?.throwIfAborted();\n await connection.send(payload);\n return {\n [Symbol.asyncIterator]: connection[Symbol.asyncIterator].bind(connection),\n send_DO_NOT_USE_OR_YOU_WILL_BE_FIRED: connection.send.bind(connection),\n };\n } as IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;\n}\n"]}

@@ -1,5 +0,11 @@

export * from './json-rpc';
export * from './json-rpc-subscription';
export * from './transports/http/http-transport';
export * from './transports/websocket/websocket-transport';
export * from './apis/api-types.js';
export * from './apis/methods/methods-api.js';
export * from './apis/subscriptions/subscriptions-api.js';
export * from './json-rpc.js';
export type { SolanaJsonRpcErrorCode } from './json-rpc-errors.js';
export * from './json-rpc-subscription.js';
export * from './json-rpc-types.js';
export * from './transports/http/http-transport.js';
export * from './transports/transport-types.js';
export * from './transports/websocket/websocket-transport.js';
//# sourceMappingURL=index.d.ts.map

@@ -1,3 +0,20 @@

import { RpcSubscriptionConfig, RpcSubscriptions } from './json-rpc-types';
export declare function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(rpcConfig: RpcSubscriptionConfig<TRpcSubscriptionMethods>): RpcSubscriptions<TRpcSubscriptionMethods>;
import { IRpcSubscriptionsApi, RpcSubscriptions } from '@solana/rpc-types';
import { RpcSubscriptionsDevnet, RpcSubscriptionsMainnet, RpcSubscriptionsTestnet } from './json-rpc-types.js';
import { IRpcWebSocketTransport, IRpcWebSocketTransportDevnet, IRpcWebSocketTransportMainnet, IRpcWebSocketTransportTestnet } from './transports/transport-types.js';
export declare function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(rpcConfig: Readonly<{
api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;
transport: IRpcWebSocketTransportDevnet;
}>): RpcSubscriptionsDevnet<TRpcSubscriptionMethods>;
export declare function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(rpcConfig: Readonly<{
api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;
transport: IRpcWebSocketTransportTestnet;
}>): RpcSubscriptionsTestnet<TRpcSubscriptionMethods>;
export declare function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(rpcConfig: Readonly<{
api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;
transport: IRpcWebSocketTransportMainnet;
}>): RpcSubscriptionsMainnet<TRpcSubscriptionMethods>;
export declare function createJsonSubscriptionRpc<TRpcSubscriptionMethods>(rpcConfig: Readonly<{
api: IRpcSubscriptionsApi<TRpcSubscriptionMethods>;
transport: IRpcWebSocketTransport;
}>): RpcSubscriptions<TRpcSubscriptionMethods>;
//# sourceMappingURL=json-rpc-subscription.d.ts.map

@@ -1,699 +0,23 @@

import { IRpcTransport, IRpcWebSocketTransport } from './transports/transport-types';
/**
* Public RPC API.
*/
export type IRpcApi<TRpcMethods> = {
[MethodName in keyof TRpcMethods]: TRpcMethods[MethodName] extends Callable ? (...rawParams: unknown[]) => RpcRequest<ReturnType<TRpcMethods[MethodName]>> : never;
import { Rpc, RpcSubscriptions } from '@solana/rpc-types';
import { IRpcTransport, IRpcTransportDevnet, IRpcTransportMainnet, IRpcTransportTestnet, IRpcTransportWithCluster, IRpcWebSocketTransport, IRpcWebSocketTransportDevnet, IRpcWebSocketTransportMainnet, IRpcWebSocketTransportTestnet, IRpcWebSocketTransportWithCluster } from './transports/transport-types.js';
export type RpcDevnet<TRpcMethods> = Rpc<TRpcMethods> & {
'~cluster': 'devnet';
};
export type IRpcSubscriptionsApi<TRpcMethods> = {
[MethodName in keyof TRpcMethods]: TRpcMethods[MethodName] extends Callable ? (...rawParams: unknown[]) => RpcSubscription<ReturnType<TRpcMethods[MethodName]>> : never;
export type RpcTestnet<TRpcMethods> = Rpc<TRpcMethods> & {
'~cluster': 'testnet';
};
export type Rpc<TRpcMethods> = RpcMethods<TRpcMethods>;
export type RpcSubscriptions<TRpcSubscriptionMethods> = RpcSubscriptionMethods<TRpcSubscriptionMethods>;
export type RpcConfig<TRpcMethods> = Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransport;
}>;
export type RpcSubscriptionConfig<TRpcMethods> = Readonly<{
api: IRpcSubscriptionsApi<TRpcMethods>;
transport: IRpcWebSocketTransport;
}>;
/**
* Public pending RPC request API.
*/
export type RpcRequest<TResponse> = {
methodName: string;
params: unknown[];
responseProcessor?: (response: unknown) => TResponse;
export type RpcMainnet<TRpcMethods> = Rpc<TRpcMethods> & {
'~cluster': 'mainnet';
};
export type RpcSubscription<TResponse> = {
params: unknown[];
responseProcessor?: (response: unknown) => TResponse;
subscribeMethodName: string;
unsubscribeMethodName: string;
export type RpcFromTransport<TRpcMethods, TRpcTransport extends IRpcTransport | IRpcTransportWithCluster> = TRpcTransport extends IRpcTransportDevnet ? RpcDevnet<TRpcMethods> : TRpcTransport extends IRpcTransportTestnet ? RpcTestnet<TRpcMethods> : TRpcTransport extends IRpcTransportMainnet ? RpcMainnet<TRpcMethods> : Rpc<TRpcMethods>;
export type RpcSubscriptionsDevnet<TRpcSubscriptionMethods> = RpcSubscriptions<TRpcSubscriptionMethods> & {
'~cluster': 'devnet';
};
export type PendingRpcRequest<TResponse> = {
send(options?: SendOptions): Promise<TResponse>;
export type RpcSubscriptionsTestnet<TRpcSubscriptionMethods> = RpcSubscriptions<TRpcSubscriptionMethods> & {
'~cluster': 'testnet';
};
export type PendingRpcSubscription<TNotification> = {
subscribe(options: SubscribeOptions): Promise<AsyncIterable<TNotification>>;
export type RpcSubscriptionsMainnet<TRpcSubscriptionMethods> = RpcSubscriptions<TRpcSubscriptionMethods> & {
'~cluster': 'mainnet';
};
export type SendOptions = Readonly<{
abortSignal?: AbortSignal;
}>;
export type SubscribeOptions = Readonly<{
abortSignal: AbortSignal;
}>;
/**
* Private RPC-building types.
*/
type RpcMethods<TRpcMethods> = {
[TMethodName in keyof TRpcMethods]: PendingRpcRequestBuilder<ApiMethodImplementations<TRpcMethods, TMethodName>>;
};
type RpcSubscriptionMethods<TRpcSubscriptionMethods> = {
[TMethodName in keyof TRpcSubscriptionMethods]: PendingRpcSubscriptionBuilder<ApiMethodImplementations<TRpcSubscriptionMethods, TMethodName>>;
};
type ApiMethodImplementations<TRpcMethods, TMethod extends keyof TRpcMethods> = Overloads<TRpcMethods[TMethod]>;
type PendingRpcRequestBuilder<TMethodImplementations> = UnionToIntersection<Flatten<{
[P in keyof TMethodImplementations]: TMethodImplementations[P] extends Callable ? (...args: Parameters<TMethodImplementations[P]>) => PendingRpcRequest<ReturnType<TMethodImplementations[P]>> : never;
}>>;
type PendingRpcSubscriptionBuilder<TSubscriptionMethodImplementations> = UnionToIntersection<Flatten<{
[P in keyof TSubscriptionMethodImplementations]: TSubscriptionMethodImplementations[P] extends Callable ? (...args: Parameters<TSubscriptionMethodImplementations[P]>) => PendingRpcSubscription<ReturnType<TSubscriptionMethodImplementations[P]>> : never;
}>>;
/**
* Utility types that do terrible, awful things.
*/
type Callable = (...args: any[]) => any;
type Flatten<T> = T extends (infer Item)[] ? Item : never;
type Overloads<T> = T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
(...args: infer A20): infer R20;
(...args: infer A21): infer R21;
(...args: infer A22): infer R22;
(...args: infer A23): infer R23;
(...args: infer A24): infer R24;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19,
(...args: A20) => R20,
(...args: A21) => R21,
(...args: A22) => R22,
(...args: A23) => R23,
(...args: A24) => R24
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
(...args: infer A20): infer R20;
(...args: infer A21): infer R21;
(...args: infer A22): infer R22;
(...args: infer A23): infer R23;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19,
(...args: A20) => R20,
(...args: A21) => R21,
(...args: A22) => R22,
(...args: A23) => R23
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
(...args: infer A20): infer R20;
(...args: infer A21): infer R21;
(...args: infer A22): infer R22;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19,
(...args: A20) => R20,
(...args: A21) => R21,
(...args: A22) => R22
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
(...args: infer A20): infer R20;
(...args: infer A21): infer R21;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19,
(...args: A20) => R20,
(...args: A21) => R21
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
(...args: infer A20): infer R20;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19,
(...args: A20) => R20
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
(...args: infer A19): infer R19;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18,
(...args: A19) => R19
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
(...args: infer A18): infer R18;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17,
(...args: A18) => R18
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
(...args: infer A17): infer R17;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16,
(...args: A17) => R17
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
(...args: infer A16): infer R16;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15,
(...args: A16) => R16
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
(...args: infer A15): infer R15;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14,
(...args: A15) => R15
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
(...args: infer A14): infer R14;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13,
(...args: A14) => R14
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
(...args: infer A13): infer R13;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12,
(...args: A13) => R13
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
(...args: infer A12): infer R12;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11,
(...args: A12) => R12
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
(...args: infer A11): infer R11;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10,
(...args: A11) => R11
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
(...args: infer A10): infer R10;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9,
(...args: A10) => R10
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
(...args: infer A9): infer R9;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8,
(...args: A9) => R9
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
(...args: infer A8): infer R8;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7,
(...args: A8) => R8
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
(...args: infer A7): infer R7;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6,
(...args: A7) => R7
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
(...args: infer A6): infer R6;
} ? [
(...args: A1) => R1,
(...args: A2) => R2,
(...args: A3) => R3,
(...args: A4) => R4,
(...args: A5) => R5,
(...args: A6) => R6
] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
(...args: infer A5): infer R5;
} ? [(...args: A1) => R1, (...args: A2) => R2, (...args: A3) => R3, (...args: A4) => R4, (...args: A5) => R5] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
(...args: infer A4): infer R4;
} ? [(...args: A1) => R1, (...args: A2) => R2, (...args: A3) => R3, (...args: A4) => R4] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
(...args: infer A3): infer R3;
} ? [(...args: A1) => R1, (...args: A2) => R2, (...args: A3) => R3] : T extends {
(...args: infer A1): infer R1;
(...args: infer A2): infer R2;
} ? [(...args: A1) => R1, (...args: A2) => R2] : T extends {
(...args: infer A1): infer R1;
} ? [(...args: A1) => R1] : unknown;
type UnionToIntersection<T> = (T extends unknown ? (x: T) => unknown : never) extends (x: infer R) => unknown ? R : never;
export {};
export type RpcSubscriptionsFromTransport<TRpcSubscriptionMethods, TRpcTransport extends IRpcWebSocketTransport | IRpcWebSocketTransportWithCluster> = TRpcTransport extends IRpcWebSocketTransportDevnet ? RpcSubscriptionsDevnet<TRpcSubscriptionMethods> : TRpcTransport extends IRpcWebSocketTransportTestnet ? RpcSubscriptionsTestnet<TRpcSubscriptionMethods> : TRpcTransport extends IRpcWebSocketTransportMainnet ? RpcSubscriptionsMainnet<TRpcSubscriptionMethods> : RpcSubscriptions<TRpcSubscriptionMethods>;
//# sourceMappingURL=json-rpc-types.d.ts.map

@@ -1,2 +0,4 @@

import { Rpc, RpcConfig } from './json-rpc-types';
import { IRpcApi, Rpc } from '@solana/rpc-types';
import { RpcDevnet, RpcMainnet, RpcTestnet } from './json-rpc-types.js';
import { IRpcTransport, IRpcTransportDevnet, IRpcTransportMainnet, IRpcTransportTestnet } from './transports/transport-types.js';
interface IHasIdentifier {

@@ -14,4 +16,19 @@ readonly id: number;

}>;
export declare function createJsonRpc<TRpcMethods>(rpcConfig: RpcConfig<TRpcMethods>): Rpc<TRpcMethods>;
export declare function createJsonRpc<TRpcMethods>(rpcConfig: Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransportDevnet;
}>): RpcDevnet<TRpcMethods>;
export declare function createJsonRpc<TRpcMethods>(rpcConfig: Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransportTestnet;
}>): RpcTestnet<TRpcMethods>;
export declare function createJsonRpc<TRpcMethods>(rpcConfig: Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransportMainnet;
}>): RpcMainnet<TRpcMethods>;
export declare function createJsonRpc<TRpcMethods>(rpcConfig: Readonly<{
api: IRpcApi<TRpcMethods>;
transport: IRpcTransport;
}>): Rpc<TRpcMethods>;
export {};
//# sourceMappingURL=json-rpc.d.ts.map

@@ -1,14 +0,10 @@

/// <reference types="node" />
/// <reference types="node" />
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<{
import { ClusterUrl } from '@solana/rpc-types';
import { IRpcTransportFromClusterUrl } from '../transport-types.js';
import { AllowedHttpRequestHeaders } from './http-transport-headers.js';
type Config<TClusterUrl extends ClusterUrl> = Readonly<{
headers?: AllowedHttpRequestHeaders;
httpAgentNodeOnly?: NodeHttpAgent | NodeHttpsAgent | ((parsedUrl: URL) => NodeHttpAgent | NodeHttpsAgent);
url: string;
url: TClusterUrl;
}>;
export declare function createHttpTransport({ httpAgentNodeOnly, headers, url }: Config): IRpcTransport;
export declare function createHttpTransport<TClusterUrl extends ClusterUrl>({ headers, url, }: Config<TClusterUrl>): IRpcTransportFromClusterUrl<TClusterUrl>;
export {};
//# sourceMappingURL=http-transport.d.ts.map

@@ -1,2 +0,3 @@

import { RpcWebSocketConnection } from './websocket/websocket-connection';
import { ClusterUrl, DevnetUrl, MainnetUrl, TestnetUrl } from '@solana/rpc-types';
import { RpcWebSocketConnection } from './websocket/websocket-connection.js';
type RpcTransportConfig = Readonly<{

@@ -9,2 +10,13 @@ payload: unknown;

}
export type IRpcTransportDevnet = IRpcTransport & {
'~cluster': 'devnet';
};
export type IRpcTransportTestnet = IRpcTransport & {
'~cluster': 'testnet';
};
export type IRpcTransportMainnet = IRpcTransport & {
'~cluster': 'mainnet';
};
export type IRpcTransportWithCluster = IRpcTransportDevnet | IRpcTransportTestnet | IRpcTransportMainnet;
export type IRpcTransportFromClusterUrl<TClusterUrl extends ClusterUrl> = TClusterUrl extends DevnetUrl ? IRpcTransportDevnet : TClusterUrl extends TestnetUrl ? IRpcTransportTestnet : TClusterUrl extends MainnetUrl ? IRpcTransportMainnet : IRpcTransport;
type RpcWebSocketTransportConfig = Readonly<{

@@ -19,3 +31,14 @@ payload: unknown;

}
export type IRpcWebSocketTransportDevnet = IRpcWebSocketTransport & {
'~cluster': 'devnet';
};
export type IRpcWebSocketTransportTestnet = IRpcWebSocketTransport & {
'~cluster': 'testnet';
};
export type IRpcWebSocketTransportMainnet = IRpcWebSocketTransport & {
'~cluster': 'mainnet';
};
export type IRpcWebSocketTransportWithCluster = IRpcWebSocketTransportDevnet | IRpcWebSocketTransportTestnet | IRpcWebSocketTransportMainnet;
export type IRpcWebSocketTransportFromClusterUrl<TClusterUrl extends ClusterUrl> = TClusterUrl extends DevnetUrl ? IRpcWebSocketTransportDevnet : TClusterUrl extends TestnetUrl ? IRpcWebSocketTransportTestnet : TClusterUrl extends MainnetUrl ? IRpcWebSocketTransportMainnet : IRpcWebSocketTransport;
export {};
//# sourceMappingURL=transport-types.d.ts.map

@@ -1,8 +0,9 @@

import { IRpcWebSocketTransport } from '../transport-types';
type Config = Readonly<{
import { ClusterUrl } from '@solana/rpc-types';
import { IRpcWebSocketTransportFromClusterUrl } from '../transport-types.js';
type Config<TClusterUrl extends ClusterUrl> = Readonly<{
sendBufferHighWatermark: number;
url: string;
url: TClusterUrl;
}>;
export declare function createWebSocketTransport({ sendBufferHighWatermark, url }: Config): IRpcWebSocketTransport;
export declare function createWebSocketTransport<TClusterUrl extends ClusterUrl>({ sendBufferHighWatermark, url, }: Config<TClusterUrl>): IRpcWebSocketTransportFromClusterUrl<TClusterUrl>;
export {};
//# sourceMappingURL=websocket-transport.d.ts.map

@@ -1,2 +0,2 @@

Copyright (c) 2018 Solana Labs, Inc
Copyright (c) 2023 Solana Labs, Inc

@@ -3,0 +3,0 @@ Permission is hereby granted, free of charge, to any person obtaining

{
"name": "@solana/rpc-transport",
"version": "2.0.0-experimental.2cc3be5",
"version": "2.0.0-experimental.2d1d49c",
"description": "Network transports for accessing the Solana JSON RPC API",

@@ -48,22 +48,25 @@ "exports": {

],
"dependencies": {
"@solana/rpc-types": "2.0.0-development"
},
"devDependencies": {
"@solana/eslint-config-solana": "^1.0.2",
"@swc/jest": "^0.2.28",
"@types/jest": "^29.5.5",
"@types/node": "^20",
"@typescript-eslint/eslint-plugin": "^6.7.0",
"@swc/jest": "^0.2.29",
"@types/jest": "^29.5.11",
"@types/node": "18.11.19",
"@typescript-eslint/eslint-plugin": "^6.13.2",
"@typescript-eslint/parser": "^6.3.0",
"agadoo": "^3.0.0",
"eslint": "^8.45.0",
"eslint-plugin-jest": "^27.2.3",
"eslint-plugin-jest": "^27.4.2",
"eslint-plugin-sort-keys-fix": "^1.1.2",
"fast-stable-stringify": "^1.0.0",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.6.4",
"jest-environment-jsdom": "^29.7.0",
"jest-fetch-mock-fork": "^3.0.4",
"jest-runner-eslint": "^2.1.0",
"jest-runner-eslint": "^2.1.2",
"jest-runner-prettier": "^1.0.0",
"jest-websocket-mock": "^2.4.1",
"prettier": "^2.8",
"tsup": "7.2.0",
"jest-websocket-mock": "^2.5.0",
"prettier": "^3.1",
"tsup": "^8.0.1",
"typescript": "^5.2.2",

@@ -78,3 +81,2 @@ "version-from-git": "^1.1.1",

"peerDependencies": {
"node-fetch": "^2.6.7",
"ws": "^8.14.0"

@@ -92,6 +94,6 @@ },

"compile:js": "tsup --config build-scripts/tsup.config.package.ts",
"compile:typedefs": "tsc -p ./tsconfig.declarations.json",
"compile:typedefs": "tsc -p ./tsconfig.declarations.json && node node_modules/build-scripts/add-js-extension-to-types.mjs",
"dev": "jest -c node_modules/test-config/jest-dev.config.ts --rootDir . --watch",
"publish-packages": "pnpm publish --tag experimental --access public --no-git-checks",
"style:fix": "pnpm eslint --fix src/* && pnpm prettier -w src/*",
"publish-packages": "npm view $npm_package_name@$npm_package_version > /dev/null 2>&1 || pnpm publish --tag experimental --access public --no-git-checks",
"style:fix": "pnpm eslint --fix src/* && pnpm prettier -w src/* package.json",
"test:lint": "jest -c node_modules/test-config/jest-lint.config.ts --rootDir . --silent",

@@ -98,0 +100,0 @@ "test:prettier": "jest -c node_modules/test-config/jest-prettier.config.ts --rootDir . --silent",

@@ -58,3 +58,3 @@ [![npm][npm-image]][npm-url]

// Provide an optional function to modify the response.
responseProcessor: response => ({
responseTransformer: response => ({
confirmedBlocks: response,

@@ -61,0 +61,0 @@ queryRange: [startSlot, endSlot],