@sip-protocol/sdk 0.7.3 → 0.8.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.
Files changed (263) hide show
  1. package/README.md +267 -0
  2. package/dist/{TransportWebUSB-TQ7WZ4LE.mjs → TransportWebUSB-YQMAGJAJ.mjs} +12 -9
  3. package/dist/browser.d.mts +10 -4
  4. package/dist/browser.d.ts +10 -4
  5. package/dist/browser.js +47556 -19603
  6. package/dist/browser.mjs +628 -48
  7. package/dist/chunk-4GRJ5MAW.mjs +152 -0
  8. package/dist/chunk-5D7A3L3W.mjs +717 -0
  9. package/dist/chunk-64AYA5F5.mjs +7834 -0
  10. package/dist/chunk-GMDGB22A.mjs +379 -0
  11. package/dist/chunk-I534WKN7.mjs +328 -0
  12. package/dist/chunk-IBZVA5Y7.mjs +1003 -0
  13. package/dist/chunk-PRRZAWJE.mjs +223 -0
  14. package/dist/{chunk-UJCSKKID.mjs → chunk-XGB3TDIC.mjs} +13 -1
  15. package/dist/{chunk-3M3HNQCW.mjs → chunk-YWGJ77A2.mjs} +28656 -13103
  16. package/dist/{chunk-6WGN57S2.mjs → chunk-Z3K7W5S3.mjs} +48 -0
  17. package/dist/constants-LHAAUC2T.mjs +51 -0
  18. package/dist/dist-2OGQ7FED.mjs +3957 -0
  19. package/dist/dist-IFHPYLDX.mjs +254 -0
  20. package/dist/fulfillment_proof-ANHVPKTB.mjs +21 -0
  21. package/dist/funding_proof-ICFZ5LHY.mjs +21 -0
  22. package/dist/{index-DIBZHOOQ.d.ts → index-DXh2IGkz.d.ts} +21239 -10304
  23. package/dist/{index-8MQz13eJ.d.mts → index-DeE1ZzA4.d.mts} +21239 -10304
  24. package/dist/index.d.mts +9 -3
  25. package/dist/index.d.ts +9 -3
  26. package/dist/index.js +48396 -19623
  27. package/dist/index.mjs +537 -19
  28. package/dist/interface-Bf7w1PLW.d.mts +679 -0
  29. package/dist/interface-Bf7w1PLW.d.ts +679 -0
  30. package/dist/{noir-DKfEzWy9.d.mts → noir-kzbLVTei.d.mts} +31 -21
  31. package/dist/{noir-DKfEzWy9.d.ts → noir-kzbLVTei.d.ts} +31 -21
  32. package/dist/proofs/halo2.d.mts +151 -0
  33. package/dist/proofs/halo2.d.ts +151 -0
  34. package/dist/proofs/halo2.js +350 -0
  35. package/dist/proofs/halo2.mjs +11 -0
  36. package/dist/proofs/kimchi.d.mts +160 -0
  37. package/dist/proofs/kimchi.d.ts +160 -0
  38. package/dist/proofs/kimchi.js +431 -0
  39. package/dist/proofs/kimchi.mjs +13 -0
  40. package/dist/proofs/noir.d.mts +1 -1
  41. package/dist/proofs/noir.d.ts +1 -1
  42. package/dist/proofs/noir.js +74 -18
  43. package/dist/proofs/noir.mjs +84 -24
  44. package/dist/solana-U3MEGU7W.mjs +280 -0
  45. package/dist/validity_proof-3POXLPNY.mjs +21 -0
  46. package/package.json +44 -11
  47. package/src/adapters/index.ts +41 -0
  48. package/src/adapters/jupiter.ts +571 -0
  49. package/src/adapters/near-intents.ts +135 -0
  50. package/src/advisor/advisor.ts +653 -0
  51. package/src/advisor/index.ts +54 -0
  52. package/src/advisor/tools.ts +303 -0
  53. package/src/advisor/types.ts +164 -0
  54. package/src/chains/ethereum/announcement.ts +536 -0
  55. package/src/chains/ethereum/bnb-optimizations.ts +474 -0
  56. package/src/chains/ethereum/commitment.ts +522 -0
  57. package/src/chains/ethereum/constants.ts +462 -0
  58. package/src/chains/ethereum/deployment.ts +596 -0
  59. package/src/chains/ethereum/gas-estimation.ts +538 -0
  60. package/src/chains/ethereum/index.ts +268 -0
  61. package/src/chains/ethereum/optimizations.ts +614 -0
  62. package/src/chains/ethereum/privacy-adapter.ts +855 -0
  63. package/src/chains/ethereum/registry.ts +584 -0
  64. package/src/chains/ethereum/rpc.ts +905 -0
  65. package/src/chains/ethereum/stealth.ts +491 -0
  66. package/src/chains/ethereum/token.ts +790 -0
  67. package/src/chains/ethereum/transfer.ts +637 -0
  68. package/src/chains/ethereum/types.ts +456 -0
  69. package/src/chains/ethereum/viewing-key.ts +455 -0
  70. package/src/chains/near/commitment.ts +608 -0
  71. package/src/chains/near/constants.ts +284 -0
  72. package/src/chains/near/function-call.ts +871 -0
  73. package/src/chains/near/history.ts +654 -0
  74. package/src/chains/near/implicit-account.ts +840 -0
  75. package/src/chains/near/index.ts +393 -0
  76. package/src/chains/near/native-transfer.ts +658 -0
  77. package/src/chains/near/nep141.ts +775 -0
  78. package/src/chains/near/privacy-adapter.ts +889 -0
  79. package/src/chains/near/resolver.ts +971 -0
  80. package/src/chains/near/rpc.ts +1016 -0
  81. package/src/chains/near/stealth.ts +419 -0
  82. package/src/chains/near/types.ts +317 -0
  83. package/src/chains/near/viewing-key.ts +876 -0
  84. package/src/chains/solana/anchor-transfer.ts +386 -0
  85. package/src/chains/solana/commitment.ts +577 -0
  86. package/src/chains/solana/constants.ts +126 -12
  87. package/src/chains/solana/ephemeral-keys.ts +543 -0
  88. package/src/chains/solana/index.ts +252 -1
  89. package/src/chains/solana/key-derivation.ts +418 -0
  90. package/src/chains/solana/kit-compat.ts +334 -0
  91. package/src/chains/solana/optimizations.ts +560 -0
  92. package/src/chains/solana/privacy-adapter.ts +605 -0
  93. package/src/chains/solana/providers/generic.ts +47 -6
  94. package/src/chains/solana/providers/helius-enhanced-types.ts +336 -0
  95. package/src/chains/solana/providers/helius-enhanced.ts +623 -0
  96. package/src/chains/solana/providers/helius.ts +186 -33
  97. package/src/chains/solana/providers/index.ts +31 -0
  98. package/src/chains/solana/providers/interface.ts +61 -18
  99. package/src/chains/solana/providers/quicknode.ts +409 -0
  100. package/src/chains/solana/providers/triton.ts +426 -0
  101. package/src/chains/solana/providers/webhook.ts +338 -67
  102. package/src/chains/solana/rpc-client.ts +1150 -0
  103. package/src/chains/solana/scan.ts +83 -66
  104. package/src/chains/solana/sol-transfer.ts +732 -0
  105. package/src/chains/solana/spl-transfer.ts +886 -0
  106. package/src/chains/solana/stealth-scanner.ts +703 -0
  107. package/src/chains/solana/sunspot-verifier.ts +453 -0
  108. package/src/chains/solana/transaction-builder.ts +755 -0
  109. package/src/chains/solana/transfer.ts +74 -5
  110. package/src/chains/solana/types.ts +57 -6
  111. package/src/chains/solana/utils.ts +110 -0
  112. package/src/chains/solana/viewing-key.ts +807 -0
  113. package/src/compliance/fireblocks.ts +921 -0
  114. package/src/compliance/index.ts +23 -0
  115. package/src/compliance/range-sas.ts +398 -33
  116. package/src/config/endpoints.ts +100 -0
  117. package/src/crypto.ts +11 -8
  118. package/src/errors.ts +82 -0
  119. package/src/evm/erc4337-relayer.ts +830 -0
  120. package/src/evm/index.ts +47 -0
  121. package/src/fees/calculator.ts +396 -0
  122. package/src/fees/index.ts +87 -0
  123. package/src/fees/near-contract.ts +429 -0
  124. package/src/fees/types.ts +268 -0
  125. package/src/index.ts +686 -1
  126. package/src/intent.ts +6 -3
  127. package/src/logger.ts +324 -0
  128. package/src/network/index.ts +80 -0
  129. package/src/network/proxy.ts +691 -0
  130. package/src/optimizations/index.ts +541 -0
  131. package/src/oracle/types.ts +1 -0
  132. package/src/privacy-backends/arcium-types.ts +727 -0
  133. package/src/privacy-backends/arcium.ts +719 -0
  134. package/src/privacy-backends/combined-privacy.ts +866 -0
  135. package/src/privacy-backends/cspl-token.ts +595 -0
  136. package/src/privacy-backends/cspl-types.ts +512 -0
  137. package/src/privacy-backends/cspl.ts +907 -0
  138. package/src/privacy-backends/health.ts +488 -0
  139. package/src/privacy-backends/inco-types.ts +323 -0
  140. package/src/privacy-backends/inco.ts +616 -0
  141. package/src/privacy-backends/index.ts +254 -4
  142. package/src/privacy-backends/interface.ts +649 -6
  143. package/src/privacy-backends/lru-cache.ts +343 -0
  144. package/src/privacy-backends/magicblock.ts +458 -0
  145. package/src/privacy-backends/mock.ts +258 -0
  146. package/src/privacy-backends/privacycash.ts +13 -17
  147. package/src/privacy-backends/private-swap.ts +570 -0
  148. package/src/privacy-backends/rate-limiter.ts +683 -0
  149. package/src/privacy-backends/registry.ts +414 -2
  150. package/src/privacy-backends/router.ts +283 -3
  151. package/src/privacy-backends/shadowwire.ts +449 -0
  152. package/src/privacy-backends/sip-native.ts +3 -0
  153. package/src/privacy-logger.ts +191 -0
  154. package/src/production-safety.ts +373 -0
  155. package/src/proofs/aggregator.ts +1029 -0
  156. package/src/proofs/browser-composer.ts +1150 -0
  157. package/src/proofs/browser.ts +113 -25
  158. package/src/proofs/cache/index.ts +127 -0
  159. package/src/proofs/cache/interface.ts +545 -0
  160. package/src/proofs/cache/key-generator.ts +188 -0
  161. package/src/proofs/cache/lru-cache.ts +481 -0
  162. package/src/proofs/cache/multi-tier-cache.ts +575 -0
  163. package/src/proofs/cache/persistent-cache.ts +788 -0
  164. package/src/proofs/compliance-proof.ts +872 -0
  165. package/src/proofs/composer/base.ts +923 -0
  166. package/src/proofs/composer/index.ts +25 -0
  167. package/src/proofs/composer/interface.ts +518 -0
  168. package/src/proofs/composer/types.ts +383 -0
  169. package/src/proofs/converters/halo2.ts +452 -0
  170. package/src/proofs/converters/index.ts +208 -0
  171. package/src/proofs/converters/interface.ts +363 -0
  172. package/src/proofs/converters/kimchi.ts +462 -0
  173. package/src/proofs/converters/noir.ts +451 -0
  174. package/src/proofs/fallback.ts +888 -0
  175. package/src/proofs/halo2.ts +42 -0
  176. package/src/proofs/index.ts +471 -0
  177. package/src/proofs/interface.ts +13 -0
  178. package/src/proofs/kimchi.ts +42 -0
  179. package/src/proofs/lazy.ts +1004 -0
  180. package/src/proofs/mock.ts +25 -1
  181. package/src/proofs/noir.ts +110 -29
  182. package/src/proofs/orchestrator.ts +960 -0
  183. package/src/proofs/parallel/concurrency.ts +297 -0
  184. package/src/proofs/parallel/dependency-graph.ts +602 -0
  185. package/src/proofs/parallel/executor.ts +420 -0
  186. package/src/proofs/parallel/index.ts +131 -0
  187. package/src/proofs/parallel/interface.ts +685 -0
  188. package/src/proofs/parallel/worker-pool.ts +644 -0
  189. package/src/proofs/providers/halo2.ts +560 -0
  190. package/src/proofs/providers/index.ts +34 -0
  191. package/src/proofs/providers/kimchi.ts +641 -0
  192. package/src/proofs/validator.ts +881 -0
  193. package/src/proofs/verifier.ts +867 -0
  194. package/src/quantum/index.ts +112 -0
  195. package/src/quantum/winternitz-vault.ts +639 -0
  196. package/src/quantum/wots.ts +611 -0
  197. package/src/settlement/backends/direct-chain.ts +1 -0
  198. package/src/settlement/index.ts +9 -0
  199. package/src/settlement/router.ts +732 -46
  200. package/src/solana/index.ts +72 -0
  201. package/src/solana/jito-relayer.ts +687 -0
  202. package/src/solana/noir-verifier-types.ts +430 -0
  203. package/src/solana/noir-verifier.ts +816 -0
  204. package/src/stealth/address-derivation.ts +193 -0
  205. package/src/stealth/ed25519.ts +431 -0
  206. package/src/stealth/index.ts +233 -0
  207. package/src/stealth/meta-address.ts +221 -0
  208. package/src/stealth/secp256k1.ts +368 -0
  209. package/src/stealth/utils.ts +194 -0
  210. package/src/stealth.ts +50 -1504
  211. package/src/sync/index.ts +106 -0
  212. package/src/sync/manager.ts +504 -0
  213. package/src/sync/mock-provider.ts +318 -0
  214. package/src/sync/oblivious.ts +625 -0
  215. package/src/tokens/index.ts +15 -0
  216. package/src/tokens/registry.ts +301 -0
  217. package/src/utils/deprecation.ts +94 -0
  218. package/src/utils/index.ts +9 -0
  219. package/src/wallet/ethereum/index.ts +68 -0
  220. package/src/wallet/ethereum/metamask-privacy.ts +420 -0
  221. package/src/wallet/ethereum/multi-wallet.ts +646 -0
  222. package/src/wallet/ethereum/privacy-adapter.ts +700 -0
  223. package/src/wallet/ethereum/types.ts +3 -1
  224. package/src/wallet/ethereum/walletconnect-adapter.ts +675 -0
  225. package/src/wallet/hardware/index.ts +10 -0
  226. package/src/wallet/hardware/ledger-privacy.ts +414 -0
  227. package/src/wallet/index.ts +71 -0
  228. package/src/wallet/near/adapter.ts +626 -0
  229. package/src/wallet/near/index.ts +86 -0
  230. package/src/wallet/near/meteor-wallet.ts +1153 -0
  231. package/src/wallet/near/my-near-wallet.ts +790 -0
  232. package/src/wallet/near/wallet-selector.ts +702 -0
  233. package/src/wallet/solana/adapter.ts +6 -4
  234. package/src/wallet/solana/index.ts +13 -0
  235. package/src/wallet/solana/privacy-adapter.ts +567 -0
  236. package/src/wallet/sui/types.ts +6 -4
  237. package/src/zcash/rpc-client.ts +13 -6
  238. package/dist/chunk-2XIVXWHA.mjs +0 -1930
  239. package/dist/chunk-3INS3PR5.mjs +0 -884
  240. package/dist/chunk-3OVABDRH.mjs +0 -17096
  241. package/dist/chunk-7RFRWDCW.mjs +0 -1504
  242. package/dist/chunk-DLDWZFYC.mjs +0 -1495
  243. package/dist/chunk-E6SZWREQ.mjs +0 -57
  244. package/dist/chunk-F6F73W35.mjs +0 -16166
  245. package/dist/chunk-G33LB27A.mjs +0 -16166
  246. package/dist/chunk-HGU6HZRC.mjs +0 -231
  247. package/dist/chunk-L2K34JCU.mjs +0 -1496
  248. package/dist/chunk-OFDBEIEK.mjs +0 -16166
  249. package/dist/chunk-SF7YSLF5.mjs +0 -1515
  250. package/dist/chunk-SN4ZDTVW.mjs +0 -16166
  251. package/dist/chunk-WWUSGOXE.mjs +0 -17129
  252. package/dist/constants-VOI7BSLK.mjs +0 -27
  253. package/dist/index-B71aXVzk.d.ts +0 -13264
  254. package/dist/index-BYZbDjal.d.ts +0 -11390
  255. package/dist/index-CHB3KuOB.d.mts +0 -11859
  256. package/dist/index-CzWPI6Le.d.ts +0 -11859
  257. package/dist/index-pOIIuwfV.d.mts +0 -13264
  258. package/dist/index-xbWjohNq.d.mts +0 -11390
  259. package/dist/solana-4O4K45VU.mjs +0 -46
  260. package/dist/solana-5EMCTPTS.mjs +0 -46
  261. package/dist/solana-NDABAZ6P.mjs +0 -56
  262. package/dist/solana-Q4NAVBTS.mjs +0 -46
  263. 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
+ }