viem 2.9.23 → 2.9.25

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 (62) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/_cjs/actions/public/watchBlockNumber.js +20 -2
  3. package/_cjs/actions/public/watchBlockNumber.js.map +1 -1
  4. package/_cjs/actions/public/watchBlocks.js +20 -2
  5. package/_cjs/actions/public/watchBlocks.js.map +1 -1
  6. package/_cjs/actions/public/watchContractEvent.js +22 -4
  7. package/_cjs/actions/public/watchContractEvent.js.map +1 -1
  8. package/_cjs/actions/public/watchEvent.js +22 -4
  9. package/_cjs/actions/public/watchEvent.js.map +1 -1
  10. package/_cjs/chains/definitions/cyberTestnet.js +29 -0
  11. package/_cjs/chains/definitions/cyberTestnet.js.map +1 -0
  12. package/_cjs/chains/index.js +7 -5
  13. package/_cjs/chains/index.js.map +1 -1
  14. package/_cjs/clients/transports/fallback.js +2 -2
  15. package/_cjs/clients/transports/fallback.js.map +1 -1
  16. package/_cjs/errors/version.js +1 -1
  17. package/_esm/actions/public/waitForTransactionReceipt.js +1 -1
  18. package/_esm/actions/public/watchBlockNumber.js +20 -2
  19. package/_esm/actions/public/watchBlockNumber.js.map +1 -1
  20. package/_esm/actions/public/watchBlocks.js +20 -2
  21. package/_esm/actions/public/watchBlocks.js.map +1 -1
  22. package/_esm/actions/public/watchContractEvent.js +22 -4
  23. package/_esm/actions/public/watchContractEvent.js.map +1 -1
  24. package/_esm/actions/public/watchEvent.js +22 -4
  25. package/_esm/actions/public/watchEvent.js.map +1 -1
  26. package/_esm/chains/definitions/cyberTestnet.js +26 -0
  27. package/_esm/chains/definitions/cyberTestnet.js.map +1 -0
  28. package/_esm/chains/index.js +1 -0
  29. package/_esm/chains/index.js.map +1 -1
  30. package/_esm/clients/transports/fallback.js +2 -2
  31. package/_esm/clients/transports/fallback.js.map +1 -1
  32. package/_esm/errors/version.js +1 -1
  33. package/_types/actions/public/waitForTransactionReceipt.d.ts +1 -1
  34. package/_types/actions/public/watchBlockNumber.d.ts +2 -2
  35. package/_types/actions/public/watchBlockNumber.d.ts.map +1 -1
  36. package/_types/actions/public/watchBlocks.d.ts +2 -2
  37. package/_types/actions/public/watchBlocks.d.ts.map +1 -1
  38. package/_types/actions/public/watchContractEvent.d.ts.map +1 -1
  39. package/_types/actions/public/watchEvent.d.ts.map +1 -1
  40. package/_types/chains/definitions/cyberTestnet.d.ts +34 -0
  41. package/_types/chains/definitions/cyberTestnet.d.ts.map +1 -0
  42. package/_types/chains/index.d.ts +1 -0
  43. package/_types/chains/index.d.ts.map +1 -1
  44. package/_types/clients/transports/fallback.d.ts +5 -3
  45. package/_types/clients/transports/fallback.d.ts.map +1 -1
  46. package/_types/errors/version.d.ts +1 -1
  47. package/_types/types/transport.d.ts +6 -1
  48. package/_types/types/transport.d.ts.map +1 -1
  49. package/_types/types/utils.d.ts +11 -0
  50. package/_types/types/utils.d.ts.map +1 -1
  51. package/actions/public/waitForTransactionReceipt.ts +1 -1
  52. package/actions/public/watchBlockNumber.ts +36 -17
  53. package/actions/public/watchBlocks.ts +25 -5
  54. package/actions/public/watchContractEvent.ts +66 -48
  55. package/actions/public/watchEvent.ts +24 -5
  56. package/chains/definitions/cyberTestnet.ts +26 -0
  57. package/chains/index.ts +1 -0
  58. package/clients/transports/fallback.ts +16 -13
  59. package/errors/version.ts +1 -1
  60. package/package.json +1 -1
  61. package/types/transport.ts +17 -1
  62. package/types/utils.ts +16 -0
@@ -149,6 +149,17 @@ export type Prettify<T> = {
149
149
  * => { a: string, b: number }
150
150
  */
151
151
  export type RequiredBy<T, K extends keyof T> = Omit<T, K> & ExactRequired<Pick<T, K>>;
152
+ /**
153
+ * @description Returns truthy if `array` contains `value`.
154
+ *
155
+ * @example
156
+ * Some<[1, 2, 3], 2>
157
+ * => true
158
+ */
159
+ export type Some<array extends unknown[], value> = array extends [
160
+ value,
161
+ ...unknown[]
162
+ ] ? true : array extends [unknown, ...infer rest] ? Some<rest, value> : false;
152
163
  /**
153
164
  * @description Creates a type that extracts the values of T.
154
165
  *
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../types/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../types/utils.ts"],"names":[],"mappings":"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"}
@@ -88,7 +88,7 @@ export type WaitForTransactionReceiptErrorType =
88
88
  | ErrorType
89
89
 
90
90
  /**
91
- * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt). If the Transaction reverts, then the action will throw an error.
91
+ * Waits for the [Transaction](https://viem.sh/docs/glossary/terms#transaction) to be included on a [Block](https://viem.sh/docs/glossary/terms#block) (one confirmation), and then returns the [Transaction Receipt](https://viem.sh/docs/glossary/terms#transaction-receipt).
92
92
  *
93
93
  * - Docs: https://viem.sh/docs/actions/public/waitForTransactionReceipt
94
94
  * - Example: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions/sending-transactions
@@ -2,7 +2,7 @@ import type { Client } from '../../clients/createClient.js'
2
2
  import type { Transport } from '../../clients/transports/createTransport.js'
3
3
  import type { ErrorType } from '../../errors/utils.js'
4
4
  import type { Chain } from '../../types/chain.js'
5
- import type { GetTransportConfig } from '../../types/transport.js'
5
+ import type { HasTransportType } from '../../types/transport.js'
6
6
  import { hexToBigInt } from '../../utils/encoding/fromHex.js'
7
7
  import { getAction } from '../../utils/getAction.js'
8
8
  import { observe } from '../../utils/observe.js'
@@ -28,7 +28,7 @@ export type WatchBlockNumberParameters<
28
28
  /** The callback to call when an error occurred when trying to get for a new block. */
29
29
  onError?: ((error: Error) => void) | undefined
30
30
  } & (
31
- | (GetTransportConfig<TTransport>['type'] extends 'webSocket'
31
+ | (HasTransportType<TTransport, 'webSocket'> extends true
32
32
  ? {
33
33
  emitMissed?: undefined
34
34
  emitOnBegin?: undefined
@@ -91,8 +91,16 @@ export function watchBlockNumber<
91
91
  pollingInterval = client.pollingInterval,
92
92
  }: WatchBlockNumberParameters<TTransport>,
93
93
  ): WatchBlockNumberReturnType {
94
- const enablePolling =
95
- typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket'
94
+ const enablePolling = (() => {
95
+ if (typeof poll_ !== 'undefined') return poll_
96
+ if (client.transport.type === 'webSocket') return false
97
+ if (
98
+ client.transport.type === 'fallback' &&
99
+ client.transport.transports[0].config.type === 'webSocket'
100
+ )
101
+ return false
102
+ return true
103
+ })()
96
104
 
97
105
  let prevBlockNumber: GetBlockNumberReturnType | undefined
98
106
 
@@ -161,19 +169,30 @@ export function watchBlockNumber<
161
169
  let unsubscribe = () => (active = false)
162
170
  ;(async () => {
163
171
  try {
164
- const { unsubscribe: unsubscribe_ } =
165
- await client.transport.subscribe({
166
- params: ['newHeads'],
167
- onData(data: any) {
168
- if (!active) return
169
- const blockNumber = hexToBigInt(data.result?.number)
170
- emit.onBlockNumber(blockNumber, prevBlockNumber)
171
- prevBlockNumber = blockNumber
172
- },
173
- onError(error: Error) {
174
- emit.onError?.(error)
175
- },
176
- })
172
+ const transport = (() => {
173
+ if (client.transport.type === 'fallback') {
174
+ const transport = client.transport.transports.find(
175
+ (transport: ReturnType<Transport>) =>
176
+ transport.config.type === 'webSocket',
177
+ )
178
+ if (!transport) return client.transport
179
+ return transport.value
180
+ }
181
+ return client.transport
182
+ })()
183
+
184
+ const { unsubscribe: unsubscribe_ } = await transport.subscribe({
185
+ params: ['newHeads'],
186
+ onData(data: any) {
187
+ if (!active) return
188
+ const blockNumber = hexToBigInt(data.result?.number)
189
+ emit.onBlockNumber(blockNumber, prevBlockNumber)
190
+ prevBlockNumber = blockNumber
191
+ },
192
+ onError(error: Error) {
193
+ emit.onError?.(error)
194
+ },
195
+ })
177
196
  unsubscribe = unsubscribe_
178
197
  if (!active) unsubscribe()
179
198
  } catch (err) {
@@ -3,7 +3,7 @@ import type { Transport } from '../../clients/transports/createTransport.js'
3
3
  import type { ErrorType } from '../../errors/utils.js'
4
4
  import type { BlockTag } from '../../types/block.js'
5
5
  import type { Chain } from '../../types/chain.js'
6
- import type { GetTransportConfig } from '../../types/transport.js'
6
+ import type { HasTransportType } from '../../types/transport.js'
7
7
  import { formatBlock } from '../../utils/formatters/block.js'
8
8
  import { getAction } from '../../utils/getAction.js'
9
9
  import { observe } from '../../utils/observe.js'
@@ -40,7 +40,7 @@ export type WatchBlocksParameters<
40
40
  /** The callback to call when an error occurred when trying to get for a new block. */
41
41
  onError?: ((error: Error) => void) | undefined
42
42
  } & (
43
- | (GetTransportConfig<TTransport>['type'] extends 'webSocket'
43
+ | (HasTransportType<TTransport, 'webSocket'> extends true
44
44
  ? {
45
45
  blockTag?: undefined
46
46
  emitMissed?: undefined
@@ -116,8 +116,16 @@ export function watchBlocks<
116
116
  pollingInterval = client.pollingInterval,
117
117
  }: WatchBlocksParameters<TTransport, TChain, TIncludeTransactions, TBlockTag>,
118
118
  ): WatchBlocksReturnType {
119
- const enablePolling =
120
- typeof poll_ !== 'undefined' ? poll_ : client.transport.type !== 'webSocket'
119
+ const enablePolling = (() => {
120
+ if (typeof poll_ !== 'undefined') return poll_
121
+ if (client.transport.type === 'webSocket') return false
122
+ if (
123
+ client.transport.type === 'fallback' &&
124
+ client.transport.transports[0].config.type === 'webSocket'
125
+ )
126
+ return false
127
+ return true
128
+ })()
121
129
  const includeTransactions = includeTransactions_ ?? false
122
130
 
123
131
  let prevBlock:
@@ -199,7 +207,19 @@ export function watchBlocks<
199
207
  let unsubscribe = () => (active = false)
200
208
  ;(async () => {
201
209
  try {
202
- const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({
210
+ const transport = (() => {
211
+ if (client.transport.type === 'fallback') {
212
+ const transport = client.transport.transports.find(
213
+ (transport: ReturnType<Transport>) =>
214
+ transport.config.type === 'webSocket',
215
+ )
216
+ if (!transport) return client.transport
217
+ return transport.value
218
+ }
219
+ return client.transport
220
+ })()
221
+
222
+ const { unsubscribe: unsubscribe_ } = await transport.subscribe({
203
223
  params: ['newHeads'],
204
224
  onData(data: any) {
205
225
  if (!active) return
@@ -154,10 +154,17 @@ export function watchContractEvent<
154
154
  strict: strict_,
155
155
  } = parameters
156
156
 
157
- const enablePolling =
158
- typeof poll_ !== 'undefined'
159
- ? poll_
160
- : client.transport.type !== 'webSocket' || typeof fromBlock === 'number'
157
+ const enablePolling = (() => {
158
+ if (typeof poll_ !== 'undefined') return poll_
159
+ if (typeof fromBlock === 'bigint') return true
160
+ if (client.transport.type === 'webSocket') return false
161
+ if (
162
+ client.transport.type === 'fallback' &&
163
+ client.transport.transports[0].config.type === 'webSocket'
164
+ )
165
+ return false
166
+ return true
167
+ })()
161
168
 
162
169
  const pollContractEvent = () => {
163
170
  const strict = strict_ ?? false
@@ -289,6 +296,18 @@ export function watchContractEvent<
289
296
  return observe(observerId, { onLogs, onError }, (emit) => {
290
297
  ;(async () => {
291
298
  try {
299
+ const transport = (() => {
300
+ if (client.transport.type === 'fallback') {
301
+ const transport = client.transport.transports.find(
302
+ (transport: ReturnType<Transport>) =>
303
+ transport.config.type === 'webSocket',
304
+ )
305
+ if (!transport) return client.transport
306
+ return transport.value
307
+ }
308
+ return client.transport
309
+ })()
310
+
292
311
  const topics: LogTopic[] = eventName
293
312
  ? encodeEventTopics({
294
313
  abi: abi,
@@ -297,51 +316,50 @@ export function watchContractEvent<
297
316
  } as EncodeEventTopicsParameters)
298
317
  : []
299
318
 
300
- const { unsubscribe: unsubscribe_ } =
301
- await client.transport.subscribe({
302
- params: ['logs', { address, topics }],
303
- onData(data: any) {
304
- if (!active) return
305
- const log = data.result
306
- try {
307
- const { eventName, args } = decodeEventLog({
308
- abi: abi,
309
- data: log.data,
310
- topics: log.topics as any,
311
- strict: strict_,
312
- })
313
- const formatted = formatLog(log, {
314
- args,
315
- eventName: eventName as string,
316
- })
317
- emit.onLogs([formatted] as any)
318
- } catch (err) {
319
- let eventName: string | undefined
320
- let isUnnamed: boolean | undefined
321
- if (
322
- err instanceof DecodeLogDataMismatch ||
323
- err instanceof DecodeLogTopicsMismatch
324
- ) {
325
- // If strict mode is on, and log data/topics do not match event definition, skip.
326
- if (strict_) return
327
- eventName = err.abiItem.name
328
- isUnnamed = err.abiItem.inputs?.some(
329
- (x) => !('name' in x && x.name),
330
- )
331
- }
332
-
333
- // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).
334
- const formatted = formatLog(log, {
335
- args: isUnnamed ? [] : {},
336
- eventName,
337
- })
338
- emit.onLogs([formatted] as any)
319
+ const { unsubscribe: unsubscribe_ } = await transport.subscribe({
320
+ params: ['logs', { address, topics }],
321
+ onData(data: any) {
322
+ if (!active) return
323
+ const log = data.result
324
+ try {
325
+ const { eventName, args } = decodeEventLog({
326
+ abi: abi,
327
+ data: log.data,
328
+ topics: log.topics as any,
329
+ strict: strict_,
330
+ })
331
+ const formatted = formatLog(log, {
332
+ args,
333
+ eventName: eventName as string,
334
+ })
335
+ emit.onLogs([formatted] as any)
336
+ } catch (err) {
337
+ let eventName: string | undefined
338
+ let isUnnamed: boolean | undefined
339
+ if (
340
+ err instanceof DecodeLogDataMismatch ||
341
+ err instanceof DecodeLogTopicsMismatch
342
+ ) {
343
+ // If strict mode is on, and log data/topics do not match event definition, skip.
344
+ if (strict_) return
345
+ eventName = err.abiItem.name
346
+ isUnnamed = err.abiItem.inputs?.some(
347
+ (x) => !('name' in x && x.name),
348
+ )
339
349
  }
340
- },
341
- onError(error: Error) {
342
- emit.onError?.(error)
343
- },
344
- })
350
+
351
+ // Set args to empty if there is an error decoding (e.g. indexed/non-indexed params mismatch).
352
+ const formatted = formatLog(log, {
353
+ args: isUnnamed ? [] : {},
354
+ eventName,
355
+ })
356
+ emit.onLogs([formatted] as any)
357
+ }
358
+ },
359
+ onError(error: Error) {
360
+ emit.onError?.(error)
361
+ },
362
+ })
345
363
  unsubscribe = unsubscribe_
346
364
  if (!active) unsubscribe()
347
365
  } catch (err) {
@@ -172,10 +172,17 @@ export function watchEvent<
172
172
  strict: strict_,
173
173
  }: WatchEventParameters<TAbiEvent, TAbiEvents, TStrict, TTransport>,
174
174
  ): WatchEventReturnType {
175
- const enablePolling =
176
- typeof poll_ !== 'undefined'
177
- ? poll_
178
- : client.transport.type !== 'webSocket' || typeof fromBlock === 'bigint'
175
+ const enablePolling = (() => {
176
+ if (typeof poll_ !== 'undefined') return poll_
177
+ if (typeof fromBlock === 'bigint') return true
178
+ if (client.transport.type === 'webSocket') return false
179
+ if (
180
+ client.transport.type === 'fallback' &&
181
+ client.transport.transports[0].config.type === 'webSocket'
182
+ )
183
+ return false
184
+ return true
185
+ })()
179
186
  const strict = strict_ ?? false
180
187
 
181
188
  const pollEvent = () => {
@@ -296,6 +303,18 @@ export function watchEvent<
296
303
  let unsubscribe = () => (active = false)
297
304
  ;(async () => {
298
305
  try {
306
+ const transport = (() => {
307
+ if (client.transport.type === 'fallback') {
308
+ const transport = client.transport.transports.find(
309
+ (transport: ReturnType<Transport>) =>
310
+ transport.config.type === 'webSocket',
311
+ )
312
+ if (!transport) return client.transport
313
+ return transport.value
314
+ }
315
+ return client.transport
316
+ })()
317
+
299
318
  const events_ = events ?? (event ? [event] : undefined)
300
319
  let topics: LogTopic[] = []
301
320
  if (events_) {
@@ -311,7 +330,7 @@ export function watchEvent<
311
330
  if (event) topics = topics[0] as LogTopic[]
312
331
  }
313
332
 
314
- const { unsubscribe: unsubscribe_ } = await client.transport.subscribe({
333
+ const { unsubscribe: unsubscribe_ } = await transport.subscribe({
315
334
  params: ['logs', { address, topics }],
316
335
  onData(data: any) {
317
336
  if (!active) return
@@ -0,0 +1,26 @@
1
+ import { defineChain } from '../../utils/chain/defineChain.js'
2
+
3
+ export const cyberTestnet = /*#__PURE__*/ defineChain({
4
+ id: 111_557_560,
5
+ name: 'Cyber Testnet',
6
+ nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },
7
+ rpcUrls: {
8
+ default: {
9
+ http: ['https://cyber-testnet.alt.technology'],
10
+ },
11
+ },
12
+ blockExplorers: {
13
+ default: {
14
+ name: 'Blockscout',
15
+ url: 'https://cyber-testnet-explorer.alt.technology',
16
+ apiUrl: 'https://cyber-testnet-explorer.alt.technology/api',
17
+ },
18
+ },
19
+ contracts: {
20
+ multicall3: {
21
+ address: '0xffc391F0018269d4758AEA1a144772E8FB99545E',
22
+ blockCreated: 304545,
23
+ },
24
+ },
25
+ testnet: true,
26
+ })
package/chains/index.ts CHANGED
@@ -52,6 +52,7 @@ export { coreDao } from './definitions/coreDao.js'
52
52
  export { cronos } from './definitions/cronos.js'
53
53
  export { cronosTestnet } from './definitions/cronosTestnet.js'
54
54
  export { crossbell } from './definitions/crossbell.js'
55
+ export { cyberTestnet } from './definitions/cyberTestnet.js'
55
56
  export { darwinia } from './definitions/darwinia.js'
56
57
  export { defichainEvm } from './definitions/defichainEvm.js'
57
58
  export { defichainEvmTestnet } from './definitions/defichainEvmTestnet.js'
@@ -80,20 +80,23 @@ export type FallbackTransportConfig = {
80
80
  retryDelay?: TransportConfig['retryDelay'] | undefined
81
81
  }
82
82
 
83
- export type FallbackTransport = Transport<
84
- 'fallback',
85
- {
86
- onResponse: (fn: OnResponseFn) => void
87
- transports: ReturnType<Transport>[]
88
- }
89
- >
83
+ export type FallbackTransport<transports extends Transport[] = Transport[]> =
84
+ Transport<
85
+ 'fallback',
86
+ {
87
+ onResponse: (fn: OnResponseFn) => void
88
+ transports: {
89
+ [key in keyof transports]: ReturnType<transports[key]>
90
+ }
91
+ }
92
+ >
90
93
 
91
94
  export type FallbackTransportErrorType = CreateTransportErrorType | ErrorType
92
95
 
93
- export function fallback(
94
- transports_: Transport[],
96
+ export function fallback<const transports extends Transport[]>(
97
+ transports_: transports,
95
98
  config: FallbackTransportConfig = {},
96
- ): FallbackTransport {
99
+ ): FallbackTransport<transports> {
97
100
  const {
98
101
  key = 'fallback',
99
102
  name = 'Fallback',
@@ -101,7 +104,7 @@ export function fallback(
101
104
  retryCount,
102
105
  retryDelay,
103
106
  } = config
104
- return ({ chain, pollingInterval = 4_000, timeout, ...rest }) => {
107
+ return (({ chain, pollingInterval = 4_000, timeout, ...rest }) => {
105
108
  let transports = transports_
106
109
 
107
110
  let onResponse: OnResponseFn = () => {}
@@ -168,7 +171,7 @@ export function fallback(
168
171
  rankTransports({
169
172
  chain,
170
173
  interval: rankOptions.interval ?? pollingInterval,
171
- onTransports: (transports_) => (transports = transports_),
174
+ onTransports: (transports_) => (transports = transports_ as transports),
172
175
  sampleCount: rankOptions.sampleCount,
173
176
  timeout: rankOptions.timeout,
174
177
  transports,
@@ -176,7 +179,7 @@ export function fallback(
176
179
  })
177
180
  }
178
181
  return transport
179
- }
182
+ }) as FallbackTransport<transports>
180
183
  }
181
184
 
182
185
  function shouldThrow(error: Error) {
package/errors/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '2.9.23'
1
+ export const version = '2.9.25'
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "viem",
3
3
  "description": "TypeScript Interface for Ethereum",
4
- "version": "2.9.23",
4
+ "version": "2.9.25",
5
5
  "main": "./_cjs/index.js",
6
6
  "module": "./_esm/index.js",
7
7
  "types": "./_types/index.d.ts",
@@ -1,10 +1,12 @@
1
1
  import type { Transport } from '../clients/transports/createTransport.js'
2
+ import type { FallbackTransport } from '../clients/transports/fallback.js'
3
+ import type { Some } from './utils.js'
2
4
 
3
5
  export type GetTransportConfig<TTransport extends Transport> =
4
6
  ReturnType<TTransport>['config']
5
7
 
6
8
  export type GetPollOptions<transport extends Transport> =
7
- | (GetTransportConfig<transport>['type'] extends 'webSocket'
9
+ | (HasTransportType<transport, 'webSocket'> extends true
8
10
  ? {
9
11
  batch?: undefined
10
12
  /**
@@ -28,3 +30,17 @@ export type GetPollOptions<transport extends Transport> =
28
30
  */
29
31
  pollingInterval?: number | undefined
30
32
  }
33
+
34
+ export type HasTransportType<
35
+ transport extends Transport,
36
+ type extends string,
37
+ > = GetTransportConfig<transport>['type'] extends type
38
+ ? true
39
+ : transport extends FallbackTransport<infer transports extends Transport[]>
40
+ ? Some<
41
+ {
42
+ [key in keyof transports]: GetTransportConfig<transports[key]>['type']
43
+ },
44
+ type
45
+ >
46
+ : false
package/types/utils.ts CHANGED
@@ -191,6 +191,22 @@ export type Prettify<T> = {
191
191
  export type RequiredBy<T, K extends keyof T> = Omit<T, K> &
192
192
  ExactRequired<Pick<T, K>>
193
193
 
194
+ /**
195
+ * @description Returns truthy if `array` contains `value`.
196
+ *
197
+ * @example
198
+ * Some<[1, 2, 3], 2>
199
+ * => true
200
+ */
201
+ export type Some<array extends unknown[], value> = array extends [
202
+ value,
203
+ ...unknown[],
204
+ ]
205
+ ? true
206
+ : array extends [unknown, ...infer rest]
207
+ ? Some<rest, value>
208
+ : false
209
+
194
210
  /**
195
211
  * @description Creates a type that extracts the values of T.
196
212
  *