@sip-protocol/sdk 0.7.3 → 0.7.4
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/LICENSE +21 -0
- package/README.md +267 -0
- package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
- package/dist/browser.d.mts +10 -4
- package/dist/browser.d.ts +10 -4
- package/dist/browser.js +47556 -19603
- package/dist/browser.mjs +628 -48
- package/dist/chunk-4GRJ5MAW.mjs +152 -0
- package/dist/chunk-5D7A3L3W.mjs +717 -0
- package/dist/chunk-64AYA5F5.mjs +7834 -0
- package/dist/chunk-GMDGB22A.mjs +379 -0
- package/dist/chunk-I534WKN7.mjs +328 -0
- package/dist/chunk-IBZVA5Y7.mjs +1003 -0
- package/dist/chunk-PRRZAWJE.mjs +223 -0
- package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
- package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
- package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
- package/dist/constants-LHAAUC2T.mjs +51 -0
- package/dist/dist-2OGQ7FED.mjs +3957 -0
- package/dist/dist-IFHPYLDX.mjs +254 -0
- package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
- package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
- package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
- package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
- package/dist/index.d.mts +9 -3
- package/dist/index.d.ts +9 -3
- package/dist/index.js +48396 -19623
- package/dist/index.mjs +537 -19
- package/dist/interface-Bf7w1PLW.d.mts +679 -0
- package/dist/interface-Bf7w1PLW.d.ts +679 -0
- package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
- package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
- package/dist/proofs/halo2.d.mts +151 -0
- package/dist/proofs/halo2.d.ts +151 -0
- package/dist/proofs/halo2.js +350 -0
- package/dist/proofs/halo2.mjs +11 -0
- package/dist/proofs/kimchi.d.mts +160 -0
- package/dist/proofs/kimchi.d.ts +160 -0
- package/dist/proofs/kimchi.js +431 -0
- package/dist/proofs/kimchi.mjs +13 -0
- package/dist/proofs/noir.d.mts +1 -1
- package/dist/proofs/noir.d.ts +1 -1
- package/dist/proofs/noir.js +74 -18
- package/dist/proofs/noir.mjs +84 -24
- package/dist/solana-U3MEGU7W.mjs +280 -0
- package/dist/validity_proof-3POXLPNY.mjs +21 -0
- package/package.json +54 -21
- package/src/adapters/index.ts +41 -0
- package/src/adapters/jupiter.ts +571 -0
- package/src/adapters/near-intents.ts +135 -0
- package/src/advisor/advisor.ts +653 -0
- package/src/advisor/index.ts +54 -0
- package/src/advisor/tools.ts +303 -0
- package/src/advisor/types.ts +164 -0
- package/src/chains/ethereum/announcement.ts +536 -0
- package/src/chains/ethereum/bnb-optimizations.ts +474 -0
- package/src/chains/ethereum/commitment.ts +522 -0
- package/src/chains/ethereum/constants.ts +462 -0
- package/src/chains/ethereum/deployment.ts +596 -0
- package/src/chains/ethereum/gas-estimation.ts +538 -0
- package/src/chains/ethereum/index.ts +268 -0
- package/src/chains/ethereum/optimizations.ts +614 -0
- package/src/chains/ethereum/privacy-adapter.ts +855 -0
- package/src/chains/ethereum/registry.ts +584 -0
- package/src/chains/ethereum/rpc.ts +905 -0
- package/src/chains/ethereum/stealth.ts +491 -0
- package/src/chains/ethereum/token.ts +790 -0
- package/src/chains/ethereum/transfer.ts +637 -0
- package/src/chains/ethereum/types.ts +456 -0
- package/src/chains/ethereum/viewing-key.ts +455 -0
- package/src/chains/near/commitment.ts +608 -0
- package/src/chains/near/constants.ts +284 -0
- package/src/chains/near/function-call.ts +871 -0
- package/src/chains/near/history.ts +654 -0
- package/src/chains/near/implicit-account.ts +840 -0
- package/src/chains/near/index.ts +393 -0
- package/src/chains/near/native-transfer.ts +658 -0
- package/src/chains/near/nep141.ts +775 -0
- package/src/chains/near/privacy-adapter.ts +889 -0
- package/src/chains/near/resolver.ts +971 -0
- package/src/chains/near/rpc.ts +1016 -0
- package/src/chains/near/stealth.ts +419 -0
- package/src/chains/near/types.ts +317 -0
- package/src/chains/near/viewing-key.ts +876 -0
- package/src/chains/solana/anchor-transfer.ts +386 -0
- package/src/chains/solana/commitment.ts +577 -0
- package/src/chains/solana/constants.ts +126 -12
- package/src/chains/solana/ephemeral-keys.ts +543 -0
- package/src/chains/solana/index.ts +252 -1
- package/src/chains/solana/key-derivation.ts +418 -0
- package/src/chains/solana/kit-compat.ts +334 -0
- package/src/chains/solana/optimizations.ts +560 -0
- package/src/chains/solana/privacy-adapter.ts +605 -0
- package/src/chains/solana/providers/generic.ts +47 -6
- package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
- package/src/chains/solana/providers/helius-enhanced.ts +623 -0
- package/src/chains/solana/providers/helius.ts +186 -33
- package/src/chains/solana/providers/index.ts +31 -0
- package/src/chains/solana/providers/interface.ts +61 -18
- package/src/chains/solana/providers/quicknode.ts +409 -0
- package/src/chains/solana/providers/triton.ts +426 -0
- package/src/chains/solana/providers/webhook.ts +338 -67
- package/src/chains/solana/rpc-client.ts +1150 -0
- package/src/chains/solana/scan.ts +83 -66
- package/src/chains/solana/sol-transfer.ts +732 -0
- package/src/chains/solana/spl-transfer.ts +886 -0
- package/src/chains/solana/stealth-scanner.ts +703 -0
- package/src/chains/solana/sunspot-verifier.ts +453 -0
- package/src/chains/solana/transaction-builder.ts +755 -0
- package/src/chains/solana/transfer.ts +74 -5
- package/src/chains/solana/types.ts +57 -6
- package/src/chains/solana/utils.ts +110 -0
- package/src/chains/solana/viewing-key.ts +807 -0
- package/src/compliance/fireblocks.ts +921 -0
- package/src/compliance/index.ts +23 -0
- package/src/compliance/range-sas.ts +398 -33
- package/src/config/endpoints.ts +100 -0
- package/src/crypto.ts +11 -8
- package/src/errors.ts +82 -0
- package/src/evm/erc4337-relayer.ts +830 -0
- package/src/evm/index.ts +47 -0
- package/src/fees/calculator.ts +396 -0
- package/src/fees/index.ts +87 -0
- package/src/fees/near-contract.ts +429 -0
- package/src/fees/types.ts +268 -0
- package/src/index.ts +686 -1
- package/src/intent.ts +6 -3
- package/src/logger.ts +324 -0
- package/src/network/index.ts +80 -0
- package/src/network/proxy.ts +691 -0
- package/src/optimizations/index.ts +541 -0
- package/src/oracle/types.ts +1 -0
- package/src/privacy-backends/arcium-types.ts +727 -0
- package/src/privacy-backends/arcium.ts +719 -0
- package/src/privacy-backends/combined-privacy.ts +866 -0
- package/src/privacy-backends/cspl-token.ts +595 -0
- package/src/privacy-backends/cspl-types.ts +512 -0
- package/src/privacy-backends/cspl.ts +907 -0
- package/src/privacy-backends/health.ts +488 -0
- package/src/privacy-backends/inco-types.ts +323 -0
- package/src/privacy-backends/inco.ts +616 -0
- package/src/privacy-backends/index.ts +254 -4
- package/src/privacy-backends/interface.ts +649 -6
- package/src/privacy-backends/lru-cache.ts +343 -0
- package/src/privacy-backends/magicblock.ts +458 -0
- package/src/privacy-backends/mock.ts +258 -0
- package/src/privacy-backends/privacycash.ts +13 -17
- package/src/privacy-backends/private-swap.ts +570 -0
- package/src/privacy-backends/rate-limiter.ts +683 -0
- package/src/privacy-backends/registry.ts +414 -2
- package/src/privacy-backends/router.ts +283 -3
- package/src/privacy-backends/shadowwire.ts +449 -0
- package/src/privacy-backends/sip-native.ts +3 -0
- package/src/privacy-logger.ts +191 -0
- package/src/production-safety.ts +373 -0
- package/src/proofs/aggregator.ts +1029 -0
- package/src/proofs/browser-composer.ts +1150 -0
- package/src/proofs/browser.ts +113 -25
- package/src/proofs/cache/index.ts +127 -0
- package/src/proofs/cache/interface.ts +545 -0
- package/src/proofs/cache/key-generator.ts +188 -0
- package/src/proofs/cache/lru-cache.ts +481 -0
- package/src/proofs/cache/multi-tier-cache.ts +575 -0
- package/src/proofs/cache/persistent-cache.ts +788 -0
- package/src/proofs/compliance-proof.ts +872 -0
- package/src/proofs/composer/base.ts +923 -0
- package/src/proofs/composer/index.ts +25 -0
- package/src/proofs/composer/interface.ts +518 -0
- package/src/proofs/composer/types.ts +383 -0
- package/src/proofs/converters/halo2.ts +452 -0
- package/src/proofs/converters/index.ts +208 -0
- package/src/proofs/converters/interface.ts +363 -0
- package/src/proofs/converters/kimchi.ts +462 -0
- package/src/proofs/converters/noir.ts +451 -0
- package/src/proofs/fallback.ts +888 -0
- package/src/proofs/halo2.ts +42 -0
- package/src/proofs/index.ts +471 -0
- package/src/proofs/interface.ts +13 -0
- package/src/proofs/kimchi.ts +42 -0
- package/src/proofs/lazy.ts +1004 -0
- package/src/proofs/mock.ts +25 -1
- package/src/proofs/noir.ts +110 -29
- package/src/proofs/orchestrator.ts +960 -0
- package/src/proofs/parallel/concurrency.ts +297 -0
- package/src/proofs/parallel/dependency-graph.ts +602 -0
- package/src/proofs/parallel/executor.ts +420 -0
- package/src/proofs/parallel/index.ts +131 -0
- package/src/proofs/parallel/interface.ts +685 -0
- package/src/proofs/parallel/worker-pool.ts +644 -0
- package/src/proofs/providers/halo2.ts +560 -0
- package/src/proofs/providers/index.ts +34 -0
- package/src/proofs/providers/kimchi.ts +641 -0
- package/src/proofs/validator.ts +881 -0
- package/src/proofs/verifier.ts +867 -0
- package/src/quantum/index.ts +112 -0
- package/src/quantum/winternitz-vault.ts +639 -0
- package/src/quantum/wots.ts +611 -0
- package/src/settlement/backends/direct-chain.ts +1 -0
- package/src/settlement/index.ts +9 -0
- package/src/settlement/router.ts +732 -46
- package/src/solana/index.ts +72 -0
- package/src/solana/jito-relayer.ts +687 -0
- package/src/solana/noir-verifier-types.ts +430 -0
- package/src/solana/noir-verifier.ts +816 -0
- package/src/stealth/address-derivation.ts +193 -0
- package/src/stealth/ed25519.ts +431 -0
- package/src/stealth/index.ts +233 -0
- package/src/stealth/meta-address.ts +221 -0
- package/src/stealth/secp256k1.ts +368 -0
- package/src/stealth/utils.ts +194 -0
- package/src/stealth.ts +50 -1504
- package/src/sync/index.ts +106 -0
- package/src/sync/manager.ts +504 -0
- package/src/sync/mock-provider.ts +318 -0
- package/src/sync/oblivious.ts +625 -0
- package/src/tokens/index.ts +15 -0
- package/src/tokens/registry.ts +301 -0
- package/src/utils/deprecation.ts +94 -0
- package/src/utils/index.ts +9 -0
- package/src/wallet/ethereum/index.ts +68 -0
- package/src/wallet/ethereum/metamask-privacy.ts +420 -0
- package/src/wallet/ethereum/multi-wallet.ts +646 -0
- package/src/wallet/ethereum/privacy-adapter.ts +700 -0
- package/src/wallet/ethereum/types.ts +3 -1
- package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
- package/src/wallet/hardware/index.ts +10 -0
- package/src/wallet/hardware/ledger-privacy.ts +414 -0
- package/src/wallet/index.ts +71 -0
- package/src/wallet/near/adapter.ts +626 -0
- package/src/wallet/near/index.ts +86 -0
- package/src/wallet/near/meteor-wallet.ts +1153 -0
- package/src/wallet/near/my-near-wallet.ts +790 -0
- package/src/wallet/near/wallet-selector.ts +702 -0
- package/src/wallet/solana/adapter.ts +6 -4
- package/src/wallet/solana/index.ts +13 -0
- package/src/wallet/solana/privacy-adapter.ts +567 -0
- package/src/wallet/sui/types.ts +6 -4
- package/src/zcash/rpc-client.ts +13 -6
- package/dist/chunk-2XIVXWHA.mjs +0 -1930
- package/dist/chunk-3INS3PR5.mjs +0 -884
- package/dist/chunk-3OVABDRH.mjs +0 -17096
- package/dist/chunk-7RFRWDCW.mjs +0 -1504
- package/dist/chunk-DLDWZFYC.mjs +0 -1495
- package/dist/chunk-E6SZWREQ.mjs +0 -57
- package/dist/chunk-F6F73W35.mjs +0 -16166
- package/dist/chunk-G33LB27A.mjs +0 -16166
- package/dist/chunk-HGU6HZRC.mjs +0 -231
- package/dist/chunk-L2K34JCU.mjs +0 -1496
- package/dist/chunk-OFDBEIEK.mjs +0 -16166
- package/dist/chunk-SF7YSLF5.mjs +0 -1515
- package/dist/chunk-SN4ZDTVW.mjs +0 -16166
- package/dist/chunk-WWUSGOXE.mjs +0 -17129
- package/dist/constants-VOI7BSLK.mjs +0 -27
- package/dist/index-B71aXVzk.d.ts +0 -13264
- package/dist/index-BYZbDjal.d.ts +0 -11390
- package/dist/index-CHB3KuOB.d.mts +0 -11859
- package/dist/index-CzWPI6Le.d.ts +0 -11859
- package/dist/index-pOIIuwfV.d.mts +0 -13264
- package/dist/index-xbWjohNq.d.mts +0 -11390
- package/dist/solana-4O4K45VU.mjs +0 -46
- package/dist/solana-5EMCTPTS.mjs +0 -46
- package/dist/solana-NDABAZ6P.mjs +0 -56
- package/dist/solana-Q4NAVBTS.mjs +0 -46
- package/dist/solana-ZYO63LY5.mjs +0 -46
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @solana/kit Compatibility Bridge
|
|
3
|
+
*
|
|
4
|
+
* Provides type converters and utilities for bridging between
|
|
5
|
+
* @solana/web3.js and @solana/kit during incremental migration.
|
|
6
|
+
*
|
|
7
|
+
* This module enables file-by-file migration while keeping all tests passing.
|
|
8
|
+
*
|
|
9
|
+
* @module chains/solana/kit-compat
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import {
|
|
13
|
+
address as kitAddress,
|
|
14
|
+
createSolanaRpc,
|
|
15
|
+
createSolanaRpcSubscriptions,
|
|
16
|
+
type Address,
|
|
17
|
+
type Rpc,
|
|
18
|
+
type RpcSubscriptions,
|
|
19
|
+
type SolanaRpcApi,
|
|
20
|
+
type SolanaRpcSubscriptionsApi,
|
|
21
|
+
type Blockhash,
|
|
22
|
+
type Commitment as KitCommitment,
|
|
23
|
+
} from '@solana/kit'
|
|
24
|
+
import {
|
|
25
|
+
fromLegacyPublicKey,
|
|
26
|
+
fromLegacyKeypair,
|
|
27
|
+
fromLegacyTransactionInstruction,
|
|
28
|
+
fromVersionedTransaction,
|
|
29
|
+
} from '@solana/compat'
|
|
30
|
+
import {
|
|
31
|
+
Connection,
|
|
32
|
+
PublicKey,
|
|
33
|
+
Keypair,
|
|
34
|
+
type Commitment,
|
|
35
|
+
type TransactionInstruction,
|
|
36
|
+
type VersionedTransaction,
|
|
37
|
+
} from '@solana/web3.js'
|
|
38
|
+
|
|
39
|
+
// ─── Type Re-exports ─────────────────────────────────────────────────────────
|
|
40
|
+
|
|
41
|
+
export type {
|
|
42
|
+
Address,
|
|
43
|
+
Rpc,
|
|
44
|
+
RpcSubscriptions,
|
|
45
|
+
SolanaRpcApi,
|
|
46
|
+
SolanaRpcSubscriptionsApi,
|
|
47
|
+
Blockhash,
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// ─── Address Converters ──────────────────────────────────────────────────────
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Convert a web3.js PublicKey to a kit Address
|
|
54
|
+
*
|
|
55
|
+
* @param pubkey - web3.js PublicKey or string
|
|
56
|
+
* @returns kit Address
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```typescript
|
|
60
|
+
* const pubkey = new PublicKey('1234..5678')
|
|
61
|
+
* const addr = toAddress(pubkey)
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export function toAddress(pubkey: PublicKey | string): Address {
|
|
65
|
+
if (typeof pubkey === 'string') {
|
|
66
|
+
return kitAddress(pubkey)
|
|
67
|
+
}
|
|
68
|
+
return fromLegacyPublicKey(pubkey)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Convert a kit Address to a web3.js PublicKey
|
|
73
|
+
*
|
|
74
|
+
* @param addr - kit Address (string)
|
|
75
|
+
* @returns web3.js PublicKey
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const addr: Address = '1234..5678'
|
|
80
|
+
* const pubkey = toPublicKey(addr)
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
export function toPublicKey(addr: Address): PublicKey {
|
|
84
|
+
return new PublicKey(addr)
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Create a kit Address from a base58 string
|
|
89
|
+
*
|
|
90
|
+
* @param base58 - Base58 encoded address
|
|
91
|
+
* @returns kit Address
|
|
92
|
+
*/
|
|
93
|
+
export function createAddress(base58: string): Address {
|
|
94
|
+
return kitAddress(base58)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
// ─── Keypair Converters ──────────────────────────────────────────────────────
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Convert a web3.js Keypair to a kit CryptoKeyPair
|
|
101
|
+
*
|
|
102
|
+
* @param keypair - web3.js Keypair
|
|
103
|
+
* @returns Promise<CryptoKeyPair>
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* const keypair = Keypair.generate()
|
|
108
|
+
* const cryptoKeyPair = await toKeyPair(keypair)
|
|
109
|
+
* ```
|
|
110
|
+
*/
|
|
111
|
+
export async function toKeyPair(keypair: Keypair): Promise<CryptoKeyPair> {
|
|
112
|
+
return fromLegacyKeypair(keypair)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// ─── Instruction Converters ──────────────────────────────────────────────────
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Convert a web3.js TransactionInstruction to kit instruction format
|
|
119
|
+
*
|
|
120
|
+
* @param instruction - web3.js TransactionInstruction
|
|
121
|
+
* @returns kit instruction
|
|
122
|
+
*/
|
|
123
|
+
export function toKitInstruction(instruction: TransactionInstruction) {
|
|
124
|
+
return fromLegacyTransactionInstruction(instruction)
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// ─── Transaction Converters ──────────────────────────────────────────────────
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Convert a web3.js VersionedTransaction to kit format
|
|
131
|
+
*
|
|
132
|
+
* @param transaction - web3.js VersionedTransaction
|
|
133
|
+
* @returns kit transaction
|
|
134
|
+
*/
|
|
135
|
+
export function toKitTransaction(transaction: VersionedTransaction) {
|
|
136
|
+
return fromVersionedTransaction(transaction)
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
// ─── RPC Client Factory ──────────────────────────────────────────────────────
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Dual RPC client that provides both kit's modern RPC and legacy Connection
|
|
143
|
+
*
|
|
144
|
+
* This allows gradual migration - use rpc for new code, legacyConnection for
|
|
145
|
+
* code that still depends on web3.js patterns.
|
|
146
|
+
*/
|
|
147
|
+
export interface DualRpcClient {
|
|
148
|
+
/** Modern kit RPC client */
|
|
149
|
+
rpc: Rpc<SolanaRpcApi>
|
|
150
|
+
/** Modern kit RPC subscriptions client */
|
|
151
|
+
rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>
|
|
152
|
+
/** Legacy web3.js Connection for backward compatibility */
|
|
153
|
+
legacyConnection: Connection
|
|
154
|
+
/** HTTP endpoint */
|
|
155
|
+
endpoint: string
|
|
156
|
+
/** WebSocket endpoint */
|
|
157
|
+
wsEndpoint: string
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Create a dual RPC client that provides both kit and legacy Connection
|
|
162
|
+
*
|
|
163
|
+
* @param endpoint - HTTP RPC endpoint
|
|
164
|
+
* @param wsEndpoint - WebSocket endpoint (optional, derived from HTTP if not provided)
|
|
165
|
+
* @param commitment - Default commitment level
|
|
166
|
+
* @returns DualRpcClient with both modern and legacy APIs
|
|
167
|
+
*
|
|
168
|
+
* @example
|
|
169
|
+
* ```typescript
|
|
170
|
+
* const client = createDualRpcClient('https://api.devnet.solana.com')
|
|
171
|
+
*
|
|
172
|
+
* // Use kit's modern API
|
|
173
|
+
* const { value: balance } = await client.rpc.getBalance(addr).send()
|
|
174
|
+
*
|
|
175
|
+
* // Use legacy Connection when needed
|
|
176
|
+
* const balance2 = await client.legacyConnection.getBalance(pubkey)
|
|
177
|
+
* ```
|
|
178
|
+
*/
|
|
179
|
+
export function createDualRpcClient(
|
|
180
|
+
endpoint: string,
|
|
181
|
+
wsEndpoint?: string,
|
|
182
|
+
commitment: Commitment = 'confirmed'
|
|
183
|
+
): DualRpcClient {
|
|
184
|
+
// Derive WebSocket endpoint if not provided
|
|
185
|
+
const derivedWsEndpoint = wsEndpoint ?? deriveWsEndpoint(endpoint)
|
|
186
|
+
|
|
187
|
+
// Create kit RPC clients
|
|
188
|
+
const rpc = createSolanaRpc(endpoint)
|
|
189
|
+
const rpcSubscriptions = createSolanaRpcSubscriptions(derivedWsEndpoint)
|
|
190
|
+
|
|
191
|
+
// Create legacy Connection
|
|
192
|
+
const legacyConnection = new Connection(endpoint, {
|
|
193
|
+
commitment,
|
|
194
|
+
wsEndpoint: derivedWsEndpoint,
|
|
195
|
+
})
|
|
196
|
+
|
|
197
|
+
return {
|
|
198
|
+
rpc,
|
|
199
|
+
rpcSubscriptions,
|
|
200
|
+
legacyConnection,
|
|
201
|
+
endpoint,
|
|
202
|
+
wsEndpoint: derivedWsEndpoint,
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/**
|
|
207
|
+
* Derive WebSocket endpoint from HTTP endpoint
|
|
208
|
+
*/
|
|
209
|
+
function deriveWsEndpoint(httpEndpoint: string): string {
|
|
210
|
+
const url = new URL(httpEndpoint)
|
|
211
|
+
url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:'
|
|
212
|
+
return url.toString()
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// ─── Commitment Conversion ───────────────────────────────────────────────────
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Convert web3.js Commitment to kit Commitment
|
|
219
|
+
* Both use the same string literals, so this is mainly for type safety
|
|
220
|
+
*/
|
|
221
|
+
export function toKitCommitment(commitment: Commitment): KitCommitment {
|
|
222
|
+
return commitment as KitCommitment
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// ─── Blockhash Utilities ─────────────────────────────────────────────────────
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Create a typed Blockhash from a string
|
|
229
|
+
*/
|
|
230
|
+
export function createBlockhash(hash: string): Blockhash {
|
|
231
|
+
return hash as Blockhash
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
/**
|
|
235
|
+
* Convert kit blockhash response to legacy format
|
|
236
|
+
*/
|
|
237
|
+
export function toBlockhashInfo(kitResponse: {
|
|
238
|
+
value: { blockhash: Blockhash; lastValidBlockHeight: bigint }
|
|
239
|
+
}): { blockhash: string; lastValidBlockHeight: number } {
|
|
240
|
+
return {
|
|
241
|
+
blockhash: kitResponse.value.blockhash,
|
|
242
|
+
lastValidBlockHeight: Number(kitResponse.value.lastValidBlockHeight),
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// ─── Amount Conversion ───────────────────────────────────────────────────────
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Lamports per SOL constant
|
|
250
|
+
* Replace LAMPORTS_PER_SOL from web3.js
|
|
251
|
+
*/
|
|
252
|
+
export const LAMPORTS_PER_SOL = 1_000_000_000n
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Convert SOL to lamports (bigint)
|
|
256
|
+
*/
|
|
257
|
+
export function solToLamports(sol: number): bigint {
|
|
258
|
+
return BigInt(Math.round(sol * Number(LAMPORTS_PER_SOL)))
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Convert lamports to SOL (number)
|
|
263
|
+
*/
|
|
264
|
+
export function lamportsToSol(lamports: bigint | number): number {
|
|
265
|
+
return Number(lamports) / Number(LAMPORTS_PER_SOL)
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
// ─── Type Guards ─────────────────────────────────────────────────────────────
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Check if a value is a kit Address
|
|
272
|
+
*/
|
|
273
|
+
export function isAddress(value: unknown): value is Address {
|
|
274
|
+
return typeof value === 'string' && value.length >= 32 && value.length <= 44
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Check if a value is a web3.js PublicKey
|
|
279
|
+
*/
|
|
280
|
+
export function isPublicKey(value: unknown): value is PublicKey {
|
|
281
|
+
return value instanceof PublicKey
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// ─── Migration Helpers ───────────────────────────────────────────────────────
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* Normalize an address input to both formats
|
|
288
|
+
* Useful during migration when code may receive either type
|
|
289
|
+
*/
|
|
290
|
+
export function normalizeAddress(input: PublicKey | Address | string): {
|
|
291
|
+
address: Address
|
|
292
|
+
publicKey: PublicKey
|
|
293
|
+
base58: string
|
|
294
|
+
} {
|
|
295
|
+
let base58: string
|
|
296
|
+
if (input instanceof PublicKey) {
|
|
297
|
+
base58 = input.toBase58()
|
|
298
|
+
} else {
|
|
299
|
+
base58 = input
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
return {
|
|
303
|
+
address: kitAddress(base58),
|
|
304
|
+
publicKey: new PublicKey(base58),
|
|
305
|
+
base58,
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
* Create kit-compatible RPC response helpers
|
|
311
|
+
*/
|
|
312
|
+
export const RpcHelpers = {
|
|
313
|
+
/**
|
|
314
|
+
* Extract value from kit RPC response
|
|
315
|
+
* kit returns { value: T, context: { slot } }
|
|
316
|
+
*/
|
|
317
|
+
getValue<T>(response: { value: T }): T {
|
|
318
|
+
return response.value
|
|
319
|
+
},
|
|
320
|
+
|
|
321
|
+
/**
|
|
322
|
+
* Extract slot from kit RPC response context
|
|
323
|
+
*/
|
|
324
|
+
getSlot(response: { context: { slot: bigint } }): bigint {
|
|
325
|
+
return response.context.slot
|
|
326
|
+
},
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Convert bigint slot to number (for legacy compatibility)
|
|
330
|
+
*/
|
|
331
|
+
getSlotNumber(response: { context: { slot: bigint } }): number {
|
|
332
|
+
return Number(response.context.slot)
|
|
333
|
+
},
|
|
334
|
+
}
|