@solana/rpc-transformers 2.0.0-experimental.f45e92a → 2.0.0-experimental.fa2293f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/index.native.js.map +1 -1
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.js.map +1 -1
- package/dist/types/default-commitment.d.ts +1 -1
- package/dist/types/default-commitment.d.ts.map +1 -1
- package/dist/types/tree-traversal.d.ts +1 -1
- package/dist/types/tree-traversal.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n params: unknown[];\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPathWildcard | number | string | KeyPath>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<string | number | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n params: unknown[];\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<number | string | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n params: unknown[];\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPathWildcard | number | string | KeyPath>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<string | number | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n params: unknown[];\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<number | string | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
package/dist/index.native.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n params: unknown[];\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPathWildcard | number | string | KeyPath>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<string | number | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n params: unknown[];\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<number | string | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
package/dist/index.node.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":";AASO,SAAS,uBAAuB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAAW;AACP,QAAM,wBAAwB,OAAO,6BAA6B;AAClE;AAAA;AAAA,IAEI,0BAA0B;AAAA,IAEzB,yBAAyB,OAAO,0BAA0B,YAAY,CAAC,MAAM,QAAQ,qBAAqB;AAAA,IAC7G;AACE;AAAA;AAAA,MAEI,yBACA,0BAA0B;AAAA,MAC5B;AACE,UACI,CAAC,sBAAsB,sBAA4D,KACnF,sBAAsB,sBAA4D,MAAM,aAC1F;AAEE,cAAM,aAAa,CAAC,GAAG,MAAM;AAC7B,cAAM;AAAA,UACF,CAAC,sBAA4D,GAAG;AAAA;AAAA,UAChE,GAAG;AAAA,QACP,IAAI;AACJ,YAAI,OAAO,KAAK,IAAI,EAAE,SAAS,GAAG;AAC9B,qBAAW,6BAA6B,IAAI;AAAA,QAChD,OAAO;AACH,cAAI,kCAAkC,WAAW,SAAS,GAAG;AACzD,uBAAW;AAAA,UACf,OAAO;AACH,uBAAW,6BAA6B,IAAI;AAAA,UAChD;AAAA,QACJ;AACA,eAAO;AAAA,MACX;AAAA,IACJ,WAAW,uBAAuB,aAAa;AAE3C,YAAM,aAAa,CAAC,GAAG,MAAM;AAC7B,iBAAW,6BAA6B,IAAI;AAAA,QACxC,GAAG;AAAA,QACH,CAAC,sBAAsB,GAAG;AAAA,MAC9B;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AACA,SAAO;AACX;;;ACzDO,SAAS,6BAA6B,OAAyB;AAClE,SAAO,OAAO,UAAU;AAAA;AAAA;AAAA;AAAA,IAIlB,OAAO,KAAK;AAAA,MACZ;AACV;;;ACLO,SAAS,8BAA8B,mBAA2C;AACrF,SAAO,CAAI,OAAU,EAAE,QAAQ,MAAyB;AACpD,QAAI,OAAO,UAAU,UAAU;AAC3B,UAAI,sBAAsB,QAAQ,OAAO,oBAAoB,QAAQ,CAAC,OAAO,mBAAmB;AAC5F,0BAAkB,SAAgC,KAAK;AAAA,MAC3D;AAAA,IACJ;AACA,WAAO;AAAA,EACX;AACJ;;;ACbO,IAAM,oCAA4D;AAAA,EACrE,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,gBAAgB;AAAA,EAChB,oBAAoB;AAAA,EACpB,WAAW;AAAA,EACX,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,oBAAoB;AAAA,EACpB,6BAA6B;AAAA,EAC7B,mCAAmC;AAAA,EACnC,yBAAyB;AAAA,EACzB,cAAc;AAAA,EACd,8BAA8B;AAAA,EAC9B,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT,sBAAsB;AAAA,EACtB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,mBAAmB;AAAA,EACnB,mCAAmC;AAAA,EACnC,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB,oBAAoB;AAAA,EACpB,yBAAyB;AAAA,EACzB,SAAS;AAAA,EACT,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,2BAA2B;AAAA,EAC3B,WAAW;AAAA,EACX,wBAAwB;AAAA,EACxB,4BAA4B;AAAA,EAC5B,yBAAyB;AAAA,EACzB,yBAAyB;AAAA,EACzB,gBAAgB;AAAA,EAChB,gBAAgB;AAAA,EAChB,qBAAqB;AAAA,EACrB,iBAAiB;AAAA,EACjB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,sBAAsB;AAAA,EACtB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,wBAAwB;AAAA,EACxB,qBAAqB;AACzB;;;AC9CO,IAAM,mBAAmB,CAAC;AAO1B,SAAS,cAAc,UAAyB;AACnD,SAAO,SAAS,SAAwC,MAAe,OAAwB;AAC3F,QAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,aAAO,KAAK,IAAI,CAAC,SAAS,OAAO;AAC7B,cAAM,YAAY;AAAA,UACd,GAAG;AAAA,UACH,SAAS,CAAC,GAAG,MAAM,SAAS,EAAE;AAAA,QAClC;AACA,eAAO,SAAS,SAAS,SAAS;AAAA,MACtC,CAAC;AAAA,IACL,WAAW,OAAO,SAAS,YAAY,SAAS,MAAM;AAClD,YAAM,MAAiD,CAAC;AACxD,iBAAW,YAAY,MAAM;AACzB,YAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,QAAQ,GAAG;AACvD;AAAA,QACJ;AACA,cAAM,YAAY;AAAA,UACd,GAAG;AAAA,UACH,SAAS,CAAC,GAAG,MAAM,SAAS,QAAQ;AAAA,QACxC;AACA,YAAI,QAAQ,IAAI,SAAS,KAAK,QAA6B,GAAG,SAAS;AAAA,MAC3E;AACA,aAAO;AAAA,IACX,OAAO;AACH,aAAO,SAAS,OAAO,CAAC,KAAK,cAAc,UAAU,KAAK,KAAK,GAAG,IAAI;AAAA,IAC1E;AAAA,EACJ;AACJ;;;ACxBO,SAAS,wCAAwC,QAAkC;AACtF,QAAM,oBAAoB,QAAQ;AAClC,QAAM,wBAAwB,QAAQ;AACtC,SAAO,CAAI,WAAc,eAAuB;AAC5C,UAAM,WAAW,cAAc;AAAA,MAC3B,GAAI,wBACE,CAAC,8BAA8B,IAAI,SAAS,sBAAsB,YAAY,GAAG,IAAI,CAAC,CAAC,IACvF,CAAC;AAAA,MACP;AAAA,IACJ,CAAC;AACD,UAAM,eAAe;AAAA,MACjB,SAAS,CAAC;AAAA,IACd;AACA,UAAM,gBAAgB,SAAS,WAAW,YAAY;AACtD,QAAI,CAAC,MAAM,QAAQ,aAAa,GAAG;AAC/B,aAAO;AAAA,IACX;AACA,UAAM,gCAAgC,kCAAkC,UAAU;AAClF,QAAI,iCAAiC,MAAM;AACvC,aAAO;AAAA,IACX;AACA,WAAO,uBAAuB;AAAA,MAC1B,wBAAwB,eAAe,oBAAoB,wBAAwB;AAAA,MACnF;AAAA,MACA,oBAAoB;AAAA,MACpB,QAAQ;AAAA,IACZ,CAAC;AAAA,EACL;AACJ;;;ACvCA,SAAS,4BAA4B,SAAkB,wBAA4C;AAC/F,SAAO,uBAAuB,KAAK,uBAAqB;AACpD,QAAI,kBAAkB,WAAW,QAAQ,QAAQ;AAC7C,aAAO;AAAA,IACX;AACA,aAAS,KAAK,QAAQ,SAAS,GAAG,MAAM,GAAG,MAAM;AAC7C,YAAM,cAAc,QAAQ,EAAE;AAC9B,YAAM,wBAAwB,kBAAkB,EAAE;AAClD,UACI,0BAA0B,gBACzB,0BAA0B,oBAAoB,OAAO,gBAAgB,WACxE;AACE,eAAO;AAAA,MACX;AAAA,IACJ;AACA,WAAO;AAAA,EACX,CAAC;AACL;AAEO,SAAS,uBAAuB,wBAA4C;AAC/E,SAAO,SAAS,2BAA2B,OAAgB,EAAE,QAAQ,GAAmB;AACpF,QACI,OAAO,UAAU,YACjB,OAAO,UAAU,KAAK,KACtB,CAAC,4BAA4B,SAAS,sBAAsB,GAC9D;AAIE,aAAO,OAAO,KAAK;AAAA,IACvB,OAAO;AACH,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;;;AC5BO,SAAS,0CAAgD,QAA0C;AACtG,SAAO,CAAI,aAAsB,eAA+B;AAC5D,UAAM,WACF,QAAQ,0BAA0B,aAAa,OAAO,uBAAuB,UAAU,IAAI;AAC/F,UAAM,WAAW,cAAc,CAAC,uBAAuB,YAAY,CAAC,CAAC,CAAC,CAAC;AACvE,UAAM,eAAe;AAAA,MACjB,SAAS,CAAC;AAAA,IACd;AACA,WAAO,SAAS,aAAa,YAAY;AAAA,EAC7C;AACJ;;;ACbO,IAAM,iCAAiC;AAAA;AAAA,EAE1C,CAAC,QAAQ,UAAU,QAAQ,eAAe,UAAU;AAAA,EACpD,CAAC,QAAQ,UAAU,QAAQ,eAAe,UAAU;AAAA,EACpD,CAAC,QAAQ,UAAU,QAAQ,qBAAqB,UAAU;AAAA,EAC1D,CAAC,QAAQ,UAAU,QAAQ,qBAAqB,UAAU;AAAA,EAC1D,CAAC,QAAQ,UAAU,QAAQ,mBAAmB,UAAU;AAAA,EACxD,CAAC,QAAQ,UAAU,QAAQ,mBAAmB,UAAU;AAAA,EACxD,CAAC,QAAQ,UAAU,QAAQ,cAAc,kBAAkB,SAAS,oBAAoB,wBAAwB;AAAA,EAChH,CAAC,QAAQ,UAAU,QAAQ,cAAc,kBAAkB,SAAS,oBAAoB,wBAAwB;AAAA,EAChH,CAAC,QAAQ,UAAU,QAAQ,cAAc,kBAAkB,SAAS,sBAAsB;AAAA,EAC1F,CAAC,QAAQ,UAAU,QAAQ,cAAc,kBAAkB,SAAS,aAAa;AACrF;AACO,IAAM,4BAA4B;AAAA,EACrC,GAAG;AAAA;AAAA,EAEH,CAAC,QAAQ,UAAU,QAAQ,4BAA4B;AAAA;AAAA,EAEvD,CAAC,QAAQ,UAAU,QAAQ,cAAc;AAAA,EACzC,CAAC,QAAQ,UAAU,QAAQ,oBAAoB;AAAA;AAAA,EAE/C,CAAC,QAAQ,UAAU,QAAQ,UAAU;AAAA;AAAA,EAErC,CAAC,QAAQ,UAAU,QAAQ,oBAAoB;AAAA,EAC/C,CAAC,QAAQ,UAAU,QAAQ,iBAAiB;AAAA;AAAA,EAE5C,CAAC,QAAQ,UAAU,QAAQ,SAAS,cAAc,oBAAoB;AAAA;AAAA,EAEtE,CAAC,QAAQ,UAAU,QAAQ,oBAAoB;AAAA,EAC/C,CAAC,QAAQ,UAAU,QAAQ,aAAa;AAAA;AAAA,EAExC,CAAC,QAAQ,UAAU,QAAQ,YAAY;AAAA,EACvC,CAAC,QAAQ,UAAU,QAAQ,SAAS,kBAAkB,mBAAmB;AAC7E","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n params: unknown[];\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPathWildcard | number | string | KeyPath>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<string | number | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n params: unknown[];\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<number | string | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
package/dist/index.node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n params: unknown[];\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPathWildcard | number | string | KeyPath>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<string | number | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/default-commitment.ts","../src/params-transformer-bigint-downcast.ts","../src/params-transformer-integer-overflow.ts","../src/params-transformer-options-object-position-config.ts","../src/tree-traversal.ts","../src/params-transformer.ts","../src/response-transformer-bigint-upcast.ts","../src/response-transformer.ts","../src/response-transformer-allowed-numeric-values.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Commitment } from '@solana/rpc-types';\n\ntype Config = Readonly<{\n commitmentPropertyName: string;\n optionsObjectPositionInParams: number;\n overrideCommitment?: Commitment;\n params: unknown[];\n}>;\n\nexport function applyDefaultCommitment({\n commitmentPropertyName,\n params,\n optionsObjectPositionInParams,\n overrideCommitment,\n}: Config) {\n const paramInTargetPosition = params[optionsObjectPositionInParams];\n if (\n // There's no config.\n paramInTargetPosition === undefined ||\n // There is a config object.\n (paramInTargetPosition && typeof paramInTargetPosition === 'object' && !Array.isArray(paramInTargetPosition))\n ) {\n if (\n // The config object already has a commitment set.\n paramInTargetPosition &&\n commitmentPropertyName in paramInTargetPosition\n ) {\n if (\n !paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] ||\n paramInTargetPosition[commitmentPropertyName as keyof typeof paramInTargetPosition] === 'finalized'\n ) {\n // Delete the commitment property; `finalized` is already the server default.\n const nextParams = [...params];\n const {\n [commitmentPropertyName as keyof typeof paramInTargetPosition]: _, // eslint-disable-line @typescript-eslint/no-unused-vars\n ...rest\n } = paramInTargetPosition;\n if (Object.keys(rest).length > 0) {\n nextParams[optionsObjectPositionInParams] = rest;\n } else {\n if (optionsObjectPositionInParams === nextParams.length - 1) {\n nextParams.length--;\n } else {\n nextParams[optionsObjectPositionInParams] = undefined;\n }\n }\n return nextParams;\n }\n } else if (overrideCommitment !== 'finalized') {\n // Apply the default commitment.\n const nextParams = [...params];\n nextParams[optionsObjectPositionInParams] = {\n ...paramInTargetPosition,\n [commitmentPropertyName]: overrideCommitment,\n };\n return nextParams;\n }\n }\n return params;\n}\n","export function downcastNodeToNumberIfBigint(value: bigint): number;\nexport function downcastNodeToNumberIfBigint<T>(value: T): T;\nexport function downcastNodeToNumberIfBigint(value: unknown): unknown {\n return typeof value === 'bigint'\n ? // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the Solana\n // JSON RPC implementation so that we can throw away this entire patcher instead of unsafely\n // downcasting `bigints` to `numbers`.\n Number(value)\n : value;\n}\n","import { KeyPath, TraversalState } from './tree-traversal';\n\ntype IntegerOverflowHandler = (keyPath: KeyPath, value: bigint) => void;\n\nexport function getIntegerOverflowNodeVisitor(onIntegerOverflow: IntegerOverflowHandler) {\n return <T>(value: T, { keyPath }: TraversalState): T => {\n if (typeof value === 'bigint') {\n if (onIntegerOverflow && (value > Number.MAX_SAFE_INTEGER || value < -Number.MAX_SAFE_INTEGER)) {\n onIntegerOverflow(keyPath as (number | string)[], value);\n }\n }\n return value;\n };\n}\n","export const OPTIONS_OBJECT_POSITION_BY_METHOD: Record<string, number> = {\n accountNotifications: 1,\n blockNotifications: 1,\n getAccountInfo: 1,\n getBalance: 1,\n getBlock: 1,\n getBlockHeight: 0,\n getBlockProduction: 0,\n getBlocks: 2,\n getBlocksWithLimit: 2,\n getConfirmedBlock: 1,\n getConfirmedBlocks: 1,\n getConfirmedBlocksWithLimit: 2,\n getConfirmedSignaturesForAddress2: 1,\n getConfirmedTransaction: 1,\n getEpochInfo: 0,\n getFeeCalculatorForBlockhash: 1,\n getFeeForMessage: 1,\n getFees: 1,\n getInflationGovernor: 0,\n getInflationReward: 1,\n getLargestAccounts: 0,\n getLatestBlockhash: 0,\n getLeaderSchedule: 1,\n getMinimumBalanceForRentExemption: 1,\n getMultipleAccounts: 1,\n getProgramAccounts: 1,\n getRecentBlockhash: 1,\n getSignaturesForAddress: 1,\n getSlot: 0,\n getSlotLeader: 0,\n getStakeActivation: 1,\n getStakeMinimumDelegation: 0,\n getSupply: 0,\n getTokenAccountBalance: 1,\n getTokenAccountsByDelegate: 2,\n getTokenAccountsByOwner: 2,\n getTokenLargestAccounts: 1,\n getTokenSupply: 1,\n getTransaction: 1,\n getTransactionCount: 0,\n getVoteAccounts: 0,\n isBlockhashValid: 1,\n logsNotifications: 1,\n programNotifications: 1,\n requestAirdrop: 2,\n sendTransaction: 1,\n signatureNotifications: 1,\n simulateTransaction: 1,\n};\n","export type KeyPathWildcard = { readonly __brand: unique symbol };\nexport type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;\n\nexport const KEYPATH_WILDCARD = {} as KeyPathWildcard;\n\ntype NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;\nexport type TraversalState = Readonly<{\n keyPath: KeyPath;\n}>;\n\nexport function getTreeWalker(visitors: NodeVisitor[]) {\n return function traverse<TState extends TraversalState>(node: unknown, state: TState): unknown {\n if (Array.isArray(node)) {\n return node.map((element, ii) => {\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, ii],\n };\n return traverse(element, nextState);\n });\n } else if (typeof node === 'object' && node !== null) {\n const out: Record<number | string | symbol, unknown> = {};\n for (const propName in node) {\n if (!Object.prototype.hasOwnProperty.call(node, propName)) {\n continue;\n }\n const nextState = {\n ...state,\n keyPath: [...state.keyPath, propName],\n };\n out[propName] = traverse(node[propName as keyof typeof node], nextState);\n }\n return out;\n } else {\n return visitors.reduce((acc, visitNode) => visitNode(acc, state), node);\n }\n };\n}\n","import { Commitment } from '@solana/rpc-types';\n\nimport { applyDefaultCommitment } from './default-commitment';\nimport { downcastNodeToNumberIfBigint } from './params-transformer-bigint-downcast';\nimport { getIntegerOverflowNodeVisitor } from './params-transformer-integer-overflow';\nimport { OPTIONS_OBJECT_POSITION_BY_METHOD } from './params-transformer-options-object-position-config';\nimport { getTreeWalker, KeyPath } from './tree-traversal';\n\nexport type ParamsTransformerConfig = Readonly<{\n defaultCommitment?: Commitment;\n onIntegerOverflow?: (methodName: string, keyPath: KeyPath, value: bigint) => void;\n}>;\n\nexport function getDefaultParamsTransformerForSolanaRpc(config?: ParamsTransformerConfig) {\n const defaultCommitment = config?.defaultCommitment;\n const handleIntegerOverflow = config?.onIntegerOverflow;\n return <T>(rawParams: T, methodName: string) => {\n const traverse = getTreeWalker([\n ...(handleIntegerOverflow\n ? [getIntegerOverflowNodeVisitor((...args) => handleIntegerOverflow(methodName, ...args))]\n : []),\n downcastNodeToNumberIfBigint,\n ]);\n const initialState = {\n keyPath: [],\n };\n const patchedParams = traverse(rawParams, initialState);\n if (!Array.isArray(patchedParams)) {\n return patchedParams;\n }\n const optionsObjectPositionInParams = OPTIONS_OBJECT_POSITION_BY_METHOD[methodName];\n if (optionsObjectPositionInParams == null) {\n return patchedParams;\n }\n return applyDefaultCommitment({\n commitmentPropertyName: methodName === 'sendTransaction' ? 'preflightCommitment' : 'commitment',\n optionsObjectPositionInParams,\n overrideCommitment: defaultCommitment,\n params: patchedParams,\n });\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD, TraversalState } from './tree-traversal';\n\nfunction keyPathIsAllowedToBeNumeric(keyPath: KeyPath, allowedNumericKeyPaths: readonly KeyPath[]) {\n return allowedNumericKeyPaths.some(prohibitedKeyPath => {\n if (prohibitedKeyPath.length !== keyPath.length) {\n return false;\n }\n for (let ii = keyPath.length - 1; ii >= 0; ii--) {\n const keyPathPart = keyPath[ii];\n const prohibitedKeyPathPart = prohibitedKeyPath[ii];\n if (\n prohibitedKeyPathPart !== keyPathPart &&\n (prohibitedKeyPathPart !== KEYPATH_WILDCARD || typeof keyPathPart !== 'number')\n ) {\n return false;\n }\n }\n return true;\n });\n}\n\nexport function getBigIntUpcastVisitor(allowedNumericKeyPaths: readonly KeyPath[]) {\n return function upcastNodeToBigIntIfNumber(value: unknown, { keyPath }: TraversalState) {\n if (\n typeof value === 'number' &&\n Number.isInteger(value) &&\n !keyPathIsAllowedToBeNumeric(keyPath, allowedNumericKeyPaths)\n ) {\n // FIXME(solana-labs/solana/issues/30341) Create a data type to represent u64 in the\n // Solana JSON RPC implementation so that we can throw away this entire patcher instead\n // of unsafely upcasting `numbers` to `bigints`.\n return BigInt(value);\n } else {\n return value;\n }\n };\n}\n","import { AllowedNumericKeypaths } from './response-transformer-allowed-numeric-values';\nimport { getBigIntUpcastVisitor } from './response-transformer-bigint-upcast';\nimport { getTreeWalker } from './tree-traversal';\n\nexport type ResponseTransformerConfig<TApi> = Readonly<{\n allowedNumericKeyPaths?: AllowedNumericKeypaths<TApi>;\n}>;\n\nexport function getDefaultResponseTransformerForSolanaRpc<TApi>(config?: ResponseTransformerConfig<TApi>) {\n return <T>(rawResponse: unknown, methodName?: keyof TApi): T => {\n const keyPaths =\n config?.allowedNumericKeyPaths && methodName ? config.allowedNumericKeyPaths[methodName] : undefined;\n const traverse = getTreeWalker([getBigIntUpcastVisitor(keyPaths ?? [])]);\n const initialState = {\n keyPath: [],\n };\n return traverse(rawResponse, initialState) as T;\n };\n}\n","import { KeyPath, KEYPATH_WILDCARD } from './tree-traversal';\n\nexport type AllowedNumericKeypaths<TApi> = Partial<Record<keyof TApi, readonly KeyPath[]>>;\n\n// Numeric values nested in `jsonParsed` accounts\nexport const jsonParsedTokenAccountsConfigs = [\n // parsed Token/Token22 token account\n ['data', 'parsed', 'info', 'tokenAmount', 'decimals'],\n ['data', 'parsed', 'info', 'tokenAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'decimals'],\n ['data', 'parsed', 'info', 'rentExemptReserve', 'uiAmount'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'decimals'],\n ['data', 'parsed', 'info', 'delegatedAmount', 'uiAmount'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'olderTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'newerTransferFee', 'transferFeeBasisPoints'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'preUpdateAverageRate'],\n ['data', 'parsed', 'info', 'extensions', KEYPATH_WILDCARD, 'state', 'currentRate'],\n];\nexport const jsonParsedAccountsConfigs = [\n ...jsonParsedTokenAccountsConfigs,\n // parsed AddressTableLookup account\n ['data', 'parsed', 'info', 'lastExtendedSlotStartIndex'],\n // parsed Config account\n ['data', 'parsed', 'info', 'slashPenalty'],\n ['data', 'parsed', 'info', 'warmupCooldownRate'],\n // parsed Token/Token22 mint account\n ['data', 'parsed', 'info', 'decimals'],\n // parsed Token/Token22 multisig account\n ['data', 'parsed', 'info', 'numRequiredSigners'],\n ['data', 'parsed', 'info', 'numValidSigners'],\n // parsed Stake account\n ['data', 'parsed', 'info', 'stake', 'delegation', 'warmupCooldownRate'],\n // parsed Sysvar rent account\n ['data', 'parsed', 'info', 'exemptionThreshold'],\n ['data', 'parsed', 'info', 'burnPercent'],\n // parsed Vote account\n ['data', 'parsed', 'info', 'commission'],\n ['data', 'parsed', 'info', 'votes', KEYPATH_WILDCARD, 'confirmationCount'],\n];\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Commitment } from '@solana/rpc-types';
|
|
2
2
|
type Config = Readonly<{
|
|
3
|
-
params: unknown[];
|
|
4
3
|
commitmentPropertyName: string;
|
|
5
4
|
optionsObjectPositionInParams: number;
|
|
6
5
|
overrideCommitment?: Commitment;
|
|
6
|
+
params: unknown[];
|
|
7
7
|
}>;
|
|
8
8
|
export declare function applyDefaultCommitment({ commitmentPropertyName, params, optionsObjectPositionInParams, overrideCommitment, }: Config): unknown[];
|
|
9
9
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-commitment.d.ts","sourceRoot":"","sources":["../../src/default-commitment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,KAAK,MAAM,GAAG,QAAQ,CAAC;IACnB,
|
|
1
|
+
{"version":3,"file":"default-commitment.d.ts","sourceRoot":"","sources":["../../src/default-commitment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,KAAK,MAAM,GAAG,QAAQ,CAAC;IACnB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,6BAA6B,EAAE,MAAM,CAAC;IACtC,kBAAkB,CAAC,EAAE,UAAU,CAAC;IAChC,MAAM,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC,CAAC;AAEH,wBAAgB,sBAAsB,CAAC,EACnC,sBAAsB,EACtB,MAAM,EACN,6BAA6B,EAC7B,kBAAkB,GACrB,EAAE,MAAM,aA6CR"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export type KeyPathWildcard = {
|
|
2
2
|
readonly __brand: unique symbol;
|
|
3
3
|
};
|
|
4
|
-
export type KeyPath = ReadonlyArray<KeyPathWildcard | number | string
|
|
4
|
+
export type KeyPath = ReadonlyArray<KeyPath | KeyPathWildcard | number | string>;
|
|
5
5
|
export declare const KEYPATH_WILDCARD: KeyPathWildcard;
|
|
6
6
|
type NodeVisitor = <TState extends TraversalState>(value: unknown, state: TState) => unknown;
|
|
7
7
|
export type TraversalState = Readonly<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree-traversal.d.ts","sourceRoot":"","sources":["../../src/tree-traversal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"tree-traversal.d.ts","sourceRoot":"","sources":["../../src/tree-traversal.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,MAAM,CAAA;CAAE,CAAC;AAClE,MAAM,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,GAAG,eAAe,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC;AAEjF,eAAO,MAAM,gBAAgB,iBAAwB,CAAC;AAEtD,KAAK,WAAW,GAAG,CAAC,MAAM,SAAS,cAAc,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAC7F,MAAM,MAAM,cAAc,GAAG,QAAQ,CAAC;IAClC,OAAO,EAAE,OAAO,CAAC;CACpB,CAAC,CAAC;AAEH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE;;UACa,OAAO,oBAAkB,OAAO,CA0BjG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@solana/rpc-transformers",
|
|
3
|
-
"version": "2.0.0-experimental.
|
|
3
|
+
"version": "2.0.0-experimental.fa2293f",
|
|
4
4
|
"description": "Reusable transformers for patching RPC inputs and outputs",
|
|
5
5
|
"exports": {
|
|
6
6
|
"browser": {
|
|
@@ -46,9 +46,9 @@
|
|
|
46
46
|
"maintained node versions"
|
|
47
47
|
],
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@solana/rpc-spec": "2.0.0-experimental.
|
|
50
|
-
"@solana/rpc-subscriptions-spec": "2.0.0-experimental.
|
|
51
|
-
"@solana/rpc-types": "2.0.0-experimental.
|
|
49
|
+
"@solana/rpc-spec": "2.0.0-experimental.fa2293f",
|
|
50
|
+
"@solana/rpc-subscriptions-spec": "2.0.0-experimental.fa2293f",
|
|
51
|
+
"@solana/rpc-types": "2.0.0-experimental.fa2293f"
|
|
52
52
|
},
|
|
53
53
|
"bundlewatch": {
|
|
54
54
|
"defaultCompression": "gzip",
|
|
@@ -60,18 +60,18 @@
|
|
|
60
60
|
},
|
|
61
61
|
"scripts": {
|
|
62
62
|
"compile:js": "tsup --config build-scripts/tsup.config.package.ts",
|
|
63
|
-
"compile:typedefs": "tsc -p ./tsconfig.declarations.json && node node_modules/@solana/build-scripts/add-js-extension-to-types.mjs",
|
|
64
|
-
"dev": "jest -c node_modules/@solana/test-config/jest-dev.config.ts --rootDir . --watch",
|
|
63
|
+
"compile:typedefs": "tsc -p ./tsconfig.declarations.json && node ../../node_modules/@solana/build-scripts/add-js-extension-to-types.mjs",
|
|
64
|
+
"dev": "jest -c ../../node_modules/@solana/test-config/jest-dev.config.ts --rootDir . --watch",
|
|
65
65
|
"publish-impl": "npm view $npm_package_name@$npm_package_version > /dev/null 2>&1 || pnpm publish --tag experimental --access public --no-git-checks",
|
|
66
66
|
"publish-packages": "pnpm prepublishOnly && pnpm publish-impl",
|
|
67
67
|
"style:fix": "pnpm eslint --fix src/* && pnpm prettier -w src/* package.json",
|
|
68
|
-
"test:lint": "jest -c node_modules/@solana/test-config/jest-lint.config.ts --rootDir . --silent",
|
|
69
|
-
"test:prettier": "jest -c node_modules/@solana/test-config/jest-prettier.config.ts --rootDir . --silent",
|
|
68
|
+
"test:lint": "jest -c ../../node_modules/@solana/test-config/jest-lint.config.ts --rootDir . --silent",
|
|
69
|
+
"test:prettier": "jest -c ../../node_modules/@solana/test-config/jest-prettier.config.ts --rootDir . --silent",
|
|
70
70
|
"test:treeshakability:browser": "agadoo dist/index.browser.js",
|
|
71
71
|
"test:treeshakability:native": "agadoo dist/index.native.js",
|
|
72
72
|
"test:treeshakability:node": "agadoo dist/index.node.js",
|
|
73
73
|
"test:typecheck": "tsc --noEmit",
|
|
74
|
-
"test:unit:browser": "jest -c node_modules/@solana/test-config/jest-unit.config.browser.ts --rootDir . --silent",
|
|
75
|
-
"test:unit:node": "jest -c node_modules/@solana/test-config/jest-unit.config.node.ts --rootDir . --silent"
|
|
74
|
+
"test:unit:browser": "jest -c ../../node_modules/@solana/test-config/jest-unit.config.browser.ts --rootDir . --silent",
|
|
75
|
+
"test:unit:node": "jest -c ../../node_modules/@solana/test-config/jest-unit.config.node.ts --rootDir . --silent"
|
|
76
76
|
}
|
|
77
77
|
}
|