@solana/client 1.1.3 → 1.2.0

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.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/utils/cluster.ts","../../src/server/signers.ts"],"names":["fs"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import type { ClusterUrl } from '@solana/kit';\n\nexport type ClusterMoniker = 'mainnet' | 'mainnet-beta' | 'testnet' | 'devnet' | 'localnet' | 'localhost';\n\ntype ResolvedCluster = Readonly<{\n\tendpoint: ClusterUrl;\n\tmoniker: ClusterMoniker | 'custom';\n\twebsocketEndpoint: ClusterUrl;\n}>;\n\nfunction ensureHttpProtocol(endpoint: string): ClusterUrl {\n\tif (\n\t\tendpoint.startsWith('http://') ||\n\t\tendpoint.startsWith('https://') ||\n\t\tendpoint.startsWith('ws://') ||\n\t\tendpoint.startsWith('wss://')\n\t) {\n\t\treturn endpoint as ClusterUrl;\n\t}\n\treturn `https://${endpoint}` as ClusterUrl;\n}\n\nconst MONIKER_ENDPOINTS: Record<ClusterMoniker, Readonly<{ endpoint: ClusterUrl; websocketEndpoint: ClusterUrl }>> = {\n\tdevnet: {\n\t\tendpoint: 'https://api.devnet.solana.com',\n\t\twebsocketEndpoint: 'wss://api.devnet.solana.com',\n\t},\n\tlocalhost: {\n\t\tendpoint: 'http://127.0.0.1:8899',\n\t\twebsocketEndpoint: 'ws://127.0.0.1:8900',\n\t},\n\tlocalnet: {\n\t\tendpoint: 'http://127.0.0.1:8899',\n\t\twebsocketEndpoint: 'ws://127.0.0.1:8900',\n\t},\n\t'mainnet-beta': {\n\t\tendpoint: 'https://api.mainnet-beta.solana.com',\n\t\twebsocketEndpoint: 'wss://api.mainnet-beta.solana.com',\n\t},\n\tmainnet: {\n\t\tendpoint: 'https://api.mainnet-beta.solana.com',\n\t\twebsocketEndpoint: 'wss://api.mainnet-beta.solana.com',\n\t},\n\ttestnet: {\n\t\tendpoint: 'https://api.testnet.solana.com',\n\t\twebsocketEndpoint: 'wss://api.testnet.solana.com',\n\t},\n};\n\nfunction inferWebsocketEndpoint(endpoint: ClusterUrl): ClusterUrl {\n\tif (endpoint.startsWith('https://')) {\n\t\treturn endpoint.replace('https://', 'wss://') as ClusterUrl;\n\t}\n\tif (endpoint.startsWith('http://')) {\n\t\treturn endpoint.replace('http://', 'ws://') as ClusterUrl;\n\t}\n\tif (endpoint.startsWith('ws://') || endpoint.startsWith('wss://')) {\n\t\treturn endpoint;\n\t}\n\treturn endpoint;\n}\n\nexport function resolveCluster(\n\tconfig: Readonly<{ endpoint?: ClusterUrl; moniker?: ClusterMoniker; websocketEndpoint?: ClusterUrl }>,\n): ResolvedCluster {\n\tconst moniker = config.moniker ?? (config.endpoint ? 'custom' : 'devnet');\n\tconst mapped = moniker === 'custom' ? undefined : MONIKER_ENDPOINTS[moniker];\n\tconst endpoint = ensureHttpProtocol((config.endpoint ?? mapped?.endpoint) as ClusterUrl);\n\tconst rawWebsocket = config.websocketEndpoint ? ensureHttpProtocol(config.websocketEndpoint) : undefined;\n\tconst websocketEndpoint = inferWebsocketEndpoint(\n\t\t(rawWebsocket ?? mapped?.websocketEndpoint ?? endpoint) as ClusterUrl,\n\t) as ClusterUrl;\n\treturn {\n\t\tendpoint,\n\t\tmoniker,\n\t\twebsocketEndpoint,\n\t};\n}\n","import { promises as fs } from 'node:fs';\nimport { dirname } from 'node:path';\nimport { createKeyPairSignerFromBytes, createKeyPairSignerFromPrivateKeyBytes, type KeyPairSigner } from '@solana/kit';\nimport bs58 from 'bs58';\n\ntype PersistableKeypair = Readonly<{\n\tbase58SecretKey: string;\n\tpublicKey: Uint8Array;\n\tsecretKey: Uint8Array;\n\tsigner: KeyPairSigner;\n}>;\n\ntype KeypairLoadOptions = Readonly<{\n\textractable?: boolean;\n}>;\n\nfunction concatBytes(first: Uint8Array, second: Uint8Array): Uint8Array {\n\tconst result = new Uint8Array(first.length + second.length);\n\tresult.set(first, 0);\n\tresult.set(second, first.length);\n\treturn result;\n}\n\nasync function exportPublicKeyBytes(signer: KeyPairSigner): Promise<Uint8Array> {\n\tconst raw = await crypto.subtle.exportKey('raw', signer.keyPair.publicKey);\n\treturn new Uint8Array(raw);\n}\n\nasync function loadSignerFromBytes(bytes: Uint8Array, extractable: boolean): Promise<PersistableKeypair> {\n\tconst normalized = new Uint8Array(bytes);\n\tif (normalized.length !== 32 && normalized.length !== 64) {\n\t\tthrow new Error('Expected 32-byte private key or 64-byte secret key.');\n\t}\n\tconst signer =\n\t\tnormalized.length === 32\n\t\t\t? await createKeyPairSignerFromPrivateKeyBytes(normalized, extractable)\n\t\t\t: await createKeyPairSignerFromBytes(normalized, extractable);\n\tconst publicKey = await exportPublicKeyBytes(signer);\n\tconst secretKey = normalized.length === 64 ? normalized : concatBytes(normalized, publicKey);\n\treturn {\n\t\tbase58SecretKey: bs58.encode(secretKey),\n\t\tpublicKey,\n\t\tsecretKey,\n\t\tsigner,\n\t};\n}\n\nfunction parseKeyMaterial(raw: string): Uint8Array {\n\tconst trimmed = raw.trim();\n\ttry {\n\t\tconst parsed = JSON.parse(trimmed);\n\t\tif (Array.isArray(parsed)) {\n\t\t\treturn new Uint8Array(parsed);\n\t\t}\n\t} catch {\n\t\t// fall through to base58 parsing below\n\t}\n\ttry {\n\t\treturn bs58.decode(trimmed);\n\t} catch {\n\t\tthrow new Error('Could not parse key material. Expected a base58 string or JSON array.');\n\t}\n}\n\nasync function ensureParentDir(path: string): Promise<void> {\n\tawait fs.mkdir(dirname(path), { recursive: true });\n}\n\nexport async function generateKeypair(options: KeypairLoadOptions = {}): Promise<PersistableKeypair> {\n\tconst byteCount = 32;\n\tconst seed = new Uint8Array(byteCount);\n\tcrypto.getRandomValues(seed);\n\treturn loadSignerFromBytes(seed, options.extractable ?? true);\n}\n\nexport async function loadKeypairFromBytes(\n\tbytes: Uint8Array,\n\toptions: KeypairLoadOptions = {},\n): Promise<PersistableKeypair> {\n\treturn loadSignerFromBytes(bytes, options.extractable ?? true);\n}\n\nexport async function loadKeypairFromBase58(\n\tsecret: string,\n\toptions: KeypairLoadOptions = {},\n): Promise<PersistableKeypair> {\n\treturn loadSignerFromBytes(bs58.decode(secret), options.extractable ?? true);\n}\n\nexport async function loadKeypairFromEnv(\n\tvariableName: string,\n\toptions: KeypairLoadOptions = {},\n): Promise<PersistableKeypair> {\n\tconst value = process.env[variableName];\n\tif (!value) {\n\t\tthrow new Error(`Environment variable ${variableName} is not set.`);\n\t}\n\treturn loadSignerFromBytes(parseKeyMaterial(value), options.extractable ?? true);\n}\n\nexport async function loadKeypairFromFile(\n\tfilePath: string,\n\toptions: KeypairLoadOptions = {},\n): Promise<PersistableKeypair> {\n\tconst contents = await fs.readFile(filePath, 'utf8');\n\treturn loadSignerFromBytes(parseKeyMaterial(contents), options.extractable ?? true);\n}\n\nexport type SaveFormat = 'json' | 'base58';\n\nexport type SaveKeypairInput = Readonly<{\n\tformat?: SaveFormat;\n\tkeypair: Pick<PersistableKeypair, 'secretKey'> | PersistableKeypair;\n}>;\n\nexport async function saveKeypairToFile(filePath: string, input: SaveKeypairInput): Promise<void> {\n\tconst secretKey = new Uint8Array(input.keypair.secretKey);\n\tconst format = input.format ?? 'json';\n\tconst encoded = format === 'base58' ? bs58.encode(secretKey) : JSON.stringify(Array.from(secretKey));\n\tawait ensureParentDir(filePath);\n\tawait fs.writeFile(filePath, `${encoded}\\n`, { encoding: 'utf8', mode: 0o600 });\n}\n\nexport async function saveKeypairToEnvFile(\n\tenvPath: string,\n\tvariableName: string,\n\tinput: SaveKeypairInput,\n): Promise<void> {\n\tconst secretKey = new Uint8Array(input.keypair.secretKey);\n\tconst format = input.format ?? 'base58';\n\tconst encoded = format === 'base58' ? bs58.encode(secretKey) : JSON.stringify(Array.from(secretKey));\n\tawait ensureParentDir(envPath);\n\tawait fs.appendFile(envPath, `${variableName}=${encoded}\\n`, { encoding: 'utf8', mode: 0o600 });\n}\n\nexport type ServerKeypair = PersistableKeypair;\n"]}