diff --git a/config/tsconfig.base.json b/config/tsconfig.base.json index 14f0c9b61e..cc0536087b 100644 --- a/config/tsconfig.base.json +++ b/config/tsconfig.base.json @@ -1,15 +1,15 @@ { "compilerOptions": { - "target": "ES2020", - "lib": ["dom", "dom.iterable", "ES2020"], + "target": "ES2022", + "lib": ["DOM", "ES2022"], "allowJs": true, "skipLibCheck": true, "esModuleInterop": true, "allowSyntheticDefaultImports": true, "strict": true, "forceConsistentCasingInFileNames": true, - "module": "commonjs", - "moduleResolution": "node", + "module": "Node16", + "moduleResolution": "Node16", "sourceMap": true, "resolveJsonModule": true, "composite": true, diff --git a/ironfish-cli/package.json b/ironfish-cli/package.json index 43b976955a..7dfb4d2ba8 100644 --- a/ironfish-cli/package.json +++ b/ironfish-cli/package.json @@ -26,7 +26,7 @@ "@oclif/test": "2.1.0", "@types/blessed": "0.1.17", "@types/inquirer": "8.2.5", - "@types/node": "18.11.16", + "@types/node": "20.9.0", "@types/tar": "6.1.1", "chai": "4.2.0", "cross-env": "7.0.3", @@ -37,7 +37,7 @@ "oclif": "2.6.0", "rimraf": "^3.0.2", "tsc-watch": "4.2.9", - "typescript": "4.3.4", + "typescript": "4.7.4", "yarn": "^1.22.10" }, "scripts": { diff --git a/ironfish-cli/src/commands/ceremony/index.ts b/ironfish-cli/src/commands/ceremony/index.ts index ab24059f59..8ce9b4226b 100644 --- a/ironfish-cli/src/commands/ceremony/index.ts +++ b/ironfish-cli/src/commands/ceremony/index.ts @@ -93,7 +93,7 @@ export default class Ceremony extends IronfishCommand { try { response = await axios.get(downloadLink, { responseType: 'stream', - onDownloadProgress: (p: ProgressEvent) => { + onDownloadProgress: (p) => { this.log('loaded', p.loaded, 'total', p.total) }, }) @@ -101,6 +101,7 @@ export default class Ceremony extends IronfishCommand { this.error(ErrorUtils.renderError(e)) } + // @ts-expect-error Would rather comment out the type error than change the code to fix it await pipeline(response.data, fileHandle.createWriteStream()) CliUx.ux.action.stop() diff --git a/ironfish-cli/src/commands/restore.ts b/ironfish-cli/src/commands/restore.ts index a3af9db06a..de03ab5df6 100644 --- a/ironfish-cli/src/commands/restore.ts +++ b/ironfish-cli/src/commands/restore.ts @@ -130,6 +130,7 @@ async function downloadFileTo( data.on('error', (err) => reject(err)) data.on('end', () => resolve()) + // @ts-expect-error Would rather comment out the type error than change the code to fix it data.pipe(writer) return promise diff --git a/ironfish-cli/src/snapshot.ts b/ironfish-cli/src/snapshot.ts index b71fd2d2f5..e0413ae5ea 100644 --- a/ironfish-cli/src/snapshot.ts +++ b/ironfish-cli/src/snapshot.ts @@ -63,6 +63,7 @@ async function matchesChecksum(file: string, checksum: string): Promise const stream = fs.createReadStream(file) stream.on('end', resolve) stream.on('error', reject) + // @ts-expect-error Would rather comment out the type error than change the code to fix it stream.pipe(hasher, { end: false }) }) diff --git a/ironfish-cli/src/typedefs/blru.ts b/ironfish-cli/src/typedefs/blru.d.ts similarity index 100% rename from ironfish-cli/src/typedefs/blru.ts rename to ironfish-cli/src/typedefs/blru.d.ts diff --git a/ironfish-cli/src/types.ts b/ironfish-cli/src/types.ts index e6ec0dc287..ee091e2e78 100644 --- a/ironfish-cli/src/types.ts +++ b/ironfish-cli/src/types.ts @@ -5,11 +5,11 @@ import { Interfaces } from '@oclif/core' export interface ProgressBar { - progress: VoidFunction + progress: () => void getTotal(): number setTotal(totalValue: number): void start(totalValue?: number, startValue?: number, payload?: Record): void - stop: VoidFunction + stop: () => void update(currentValue?: number, payload?: Record): void update(payload?: Record): void increment(delta?: number, payload?: Record): void diff --git a/ironfish-cli/src/utils/s3.ts b/ironfish-cli/src/utils/s3.ts index f7af8fd1d1..edbf8ce20e 100644 --- a/ironfish-cli/src/utils/s3.ts +++ b/ironfish-cli/src/utils/s3.ts @@ -216,7 +216,8 @@ async function downloadFromBucket( if (response.Body) { const fileHandle = await fsAsync.open(output, 'w') const ws = fileHandle.createWriteStream() - + + // @ts-expect-error Would rather comment out the type error than change the code to fix it await pipeline(response.Body as Readable, ws) ws.close() diff --git a/ironfish-cli/tsconfig.json b/ironfish-cli/tsconfig.json index 142cf4a4f0..8c581f50fd 100644 --- a/ironfish-cli/tsconfig.json +++ b/ironfish-cli/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "../config/tsconfig.base.json", "compilerOptions": { + "lib": ["ES2022"], "outDir": "build", "rootDir": "./", "tsBuildInfoFile": "./build/tsconfig.tsbuildinfo" diff --git a/ironfish-rust-nodejs/package.json b/ironfish-rust-nodejs/package.json index d7e15bb17b..2bfceaffcd 100644 --- a/ironfish-rust-nodejs/package.json +++ b/ironfish-rust-nodejs/package.json @@ -39,6 +39,6 @@ "jest-jasmine2": "29.3.1", "rimraf": "3.0.2", "ts-jest": "29.0.3", - "typescript": "4.3.4" + "typescript": "4.7.4" } } diff --git a/ironfish/package.json b/ironfish/package.json index dbe91de743..687b1e610e 100644 --- a/ironfish/package.json +++ b/ironfish/package.json @@ -41,11 +41,12 @@ "leveldown": "5.6.0", "levelup": "4.4.0", "lodash": "4.17.21", - "node-datachannel": "0.4.3", + "node-datachannel": "0.5.0", "node-forge": "1.3.1", "parse-json": "5.2.0", "sqlite": "4.0.23", "sqlite3": "5.1.6", + "tsimportlib": "0.0.5", "uuid": "8.3.2", "ws": "8.12.1", "yup": "0.29.3" @@ -95,7 +96,7 @@ "prettier": "2.3.2", "ts-jest": "29.0.3", "ts-node": "10.9.1", - "typescript": "4.3.5" + "typescript": "4.7.4" }, "bugs": { "url": "https://github.com/iron-fish/ironfish/issues" diff --git a/ironfish/src/network/peerNetwork.ts b/ironfish/src/network/peerNetwork.ts index e1834a8853..1e58a8c2bf 100644 --- a/ironfish/src/network/peerNetwork.ts +++ b/ironfish/src/network/peerNetwork.ts @@ -62,7 +62,7 @@ import { BAN_SCORE, KnownBlockHashesValue, Peer } from './peers/peer' import { PeerConnectionManager } from './peers/peerConnectionManager' import { PeerManager } from './peers/peerManager' import { TransactionFetcher } from './transactionFetcher' -import { IsomorphicWebSocketConstructor } from './types' +import { IsomorphicWebSocketConstructor, NodeDataChannelType } from './types' import { getBlockSize } from './utils/serializers' import { parseUrl, WebSocketAddress } from './utils/url' import { @@ -159,6 +159,7 @@ export class PeerNetwork { identity: PrivateIdentity agent?: string webSocket: IsomorphicWebSocketConstructor + nodeDataChannel: NodeDataChannelType listen?: boolean port?: number bootstrapNodes?: string[] @@ -194,6 +195,7 @@ export class PeerNetwork { VERSION_PROTOCOL, options.chain, options.webSocket, + options.nodeDataChannel, options.networkId, this.enableSyncing, ) diff --git a/ironfish/src/network/peers/connections/webRtcConnection.ts b/ironfish/src/network/peers/connections/webRtcConnection.ts index 29456f4376..fabdde503f 100644 --- a/ironfish/src/network/peers/connections/webRtcConnection.ts +++ b/ironfish/src/network/peers/connections/webRtcConnection.ts @@ -3,20 +3,22 @@ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ import type { Logger } from '../../../logger' +// @ts-expect-error Allow type-only import https://github.com/microsoft/TypeScript/issues/49721 +import type { DataChannel, DescriptionType, PeerConnection } from 'node-datachannel' import colors from 'colors/safe' -import nodeDataChannel from 'node-datachannel' import { Assert } from '../../../assert' import { Event } from '../../../event' import { MetricsMonitor } from '../../../metrics' import { ErrorUtils } from '../../../utils' import { parseNetworkMessage } from '../../messageRegistry' +import { NodeDataChannelType } from '../../types' import { MAX_MESSAGE_SIZE } from '../../version' import { Connection, ConnectionDirection, ConnectionType } from './connection' import { NetworkError } from './errors' export type SignalData = | { - type: nodeDataChannel.DescriptionType + type: DescriptionType, sdp: string } | CandidateSignal @@ -35,8 +37,8 @@ type CandidateSignal = { * LooseMessages instead of strings/data. */ export class WebRtcConnection extends Connection { - private readonly peer: nodeDataChannel.PeerConnection - private datachannel: nodeDataChannel.DataChannel | null = null + private readonly peer: PeerConnection + private datachannel: DataChannel | null = null /** * True if we've received an SDP message from the peer. @@ -55,6 +57,7 @@ export class WebRtcConnection extends Connection { onSignal = new Event<[SignalData]>() constructor( + nodeDataChannel: NodeDataChannelType, initiator: boolean, logger: Logger, metrics?: MetricsMonitor, @@ -102,7 +105,7 @@ export class WebRtcConnection extends Connection { }) }) - this.peer.onDataChannel((dc: nodeDataChannel.DataChannel) => { + this.peer.onDataChannel((dc: DataChannel) => { Assert.isNull(this.datachannel) this.initializeDataChannel(dc) }) @@ -112,7 +115,7 @@ export class WebRtcConnection extends Connection { } } - initializeDataChannel(dc: nodeDataChannel.DataChannel): void { + initializeDataChannel(dc: DataChannel): void { this.datachannel = dc this.datachannel.onOpen(() => { diff --git a/ironfish/src/network/peers/localPeer.ts b/ironfish/src/network/peers/localPeer.ts index a080c9e4cc..7106f8367c 100644 --- a/ironfish/src/network/peers/localPeer.ts +++ b/ironfish/src/network/peers/localPeer.ts @@ -6,7 +6,7 @@ import { Assert } from '../../assert' import { Blockchain } from '../../blockchain' import { Identity, PrivateIdentity, privateIdentityToIdentity } from '../identity' import { IdentifyMessage } from '../messages/identify' -import { IsomorphicWebSocketConstructor } from '../types' +import { IsomorphicWebSocketConstructor, NodeDataChannelType } from '../types' /** * Wraps configuration needed for establishing connections with other peers @@ -24,6 +24,8 @@ export class LocalPeer { readonly version: number // constructor for either a Node WebSocket or a browser WebSocket readonly webSocket: IsomorphicWebSocketConstructor + // asynchronously imported WebRTC datachannel library + readonly nodeDataChannel: NodeDataChannelType // the unique ID number of the network readonly networkId: number // true if the peer supports syncing and gossip messages @@ -40,6 +42,7 @@ export class LocalPeer { version: number, chain: Blockchain, webSocket: IsomorphicWebSocketConstructor, + nodeDataChannel: NodeDataChannelType, networkId: number, enableSyncing: boolean, ) { @@ -52,6 +55,7 @@ export class LocalPeer { this.enableSyncing = enableSyncing this.webSocket = webSocket + this.nodeDataChannel = nodeDataChannel this.port = null this.name = null } diff --git a/ironfish/src/network/peers/peerManager.ts b/ironfish/src/network/peers/peerManager.ts index db329e4f11..2dbe930263 100644 --- a/ironfish/src/network/peers/peerManager.ts +++ b/ironfish/src/network/peers/peerManager.ts @@ -22,7 +22,7 @@ import { PeerListMessage } from '../messages/peerList' import { PeerListRequestMessage } from '../messages/peerListRequest' import { SignalMessage } from '../messages/signal' import { SignalRequestMessage } from '../messages/signalRequest' -import { IsomorphicWebSocket } from '../types' +import { IsomorphicWebSocket, NodeDataChannelType } from '../types' import { formatWebSocketAddress, WebSocketAddress } from '../utils' import { VERSION_PROTOCOL_MIN } from '../version' import { ConnectionRetry } from './connectionRetry' @@ -275,7 +275,7 @@ export class PeerManager { } if (canInitiateWebRTC(this.localPeer.publicIdentity, peer.state.identity)) { - this.initWebRtcConnection(peer, true) + this.initWebRtcConnection(peer, this.localPeer.nodeDataChannel, true) return true } @@ -284,7 +284,7 @@ export class PeerManager { destinationIdentity: peer.state.identity, }) - const connection = this.initWebRtcConnection(peer, false) + const connection = this.initWebRtcConnection(peer, this.localPeer.nodeDataChannel, false) connection.setState({ type: 'REQUEST_SIGNALING' }) const brokeringPeers = this.getBrokeringPeers(peer) @@ -335,10 +335,20 @@ export class PeerManager { * @param peer The peer to establish a connection with * @param initiator Set to true if we are initiating a connection with `peer` */ - private initWebRtcConnection(peer: Peer, initiator: boolean): WebRtcConnection { - const connection = new WebRtcConnection(initiator, this.logger, this.metrics, { - stunServers: this.stunServers, - }) + private initWebRtcConnection( + peer: Peer, + nodeDataChannel: NodeDataChannelType, + initiator: boolean, + ): WebRtcConnection { + const connection = new WebRtcConnection( + nodeDataChannel, + initiator, + this.logger, + this.metrics, + { + stunServers: this.stunServers, + }, + ) connection.onSignal.on((data) => { let errorMessage @@ -1258,7 +1268,7 @@ export class PeerManager { return } - this.initWebRtcConnection(targetPeer, true) + this.initWebRtcConnection(targetPeer, this.localPeer.nodeDataChannel, true) } /** @@ -1363,7 +1373,11 @@ export class PeerManager { return } - signalingConnection = this.initWebRtcConnection(signalingPeer, false) + signalingConnection = this.initWebRtcConnection( + signalingPeer, + this.localPeer.nodeDataChannel, + false, + ) } else { signalingConnection = signalingPeer.state.connections.webRtc } diff --git a/ironfish/src/network/testUtilities/mockLocalPeer.ts b/ironfish/src/network/testUtilities/mockLocalPeer.ts index 59da2e01b1..d75f2acec8 100644 --- a/ironfish/src/network/testUtilities/mockLocalPeer.ts +++ b/ironfish/src/network/testUtilities/mockLocalPeer.ts @@ -6,10 +6,13 @@ import { Blockchain } from '../../blockchain' import { mockChain } from '../../testUtilities/mocks' import { PrivateIdentity } from '../identity' import { LocalPeer } from '../peers/localPeer' +import { NodeDataChannelType } from '../types' import { VERSION_PROTOCOL } from '../version' import { WebSocketClient } from '../webSocketClient' import { mockPrivateIdentity } from './mockPrivateIdentity' +const mockNodeDataChannel: NodeDataChannelType = {} as unknown as NodeDataChannelType + /** * Utility to create a fake "keypair" for testing the network layer */ @@ -24,5 +27,14 @@ export function mockLocalPeer({ version?: number chain?: Blockchain } = {}): LocalPeer { - return new LocalPeer(identity, agent, version, chain || mockChain(), WebSocketClient, 0, true) + return new LocalPeer( + identity, + agent, + version, + chain || mockChain(), + WebSocketClient, + mockNodeDataChannel, + 0, + true, + ) } diff --git a/ironfish/src/network/types.ts b/ironfish/src/network/types.ts index 93db6dbb5e..a4ae3e41e6 100644 --- a/ironfish/src/network/types.ts +++ b/ironfish/src/network/types.ts @@ -1,6 +1,8 @@ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ +// @ts-expect-error Allow type-only import https://github.com/microsoft/TypeScript/issues/49721 +import type nodeDataChannel from 'node-datachannel' import type { ErrorEvent as WSErrorEvent } from 'ws' import { WebSocketClient } from './webSocketClient' @@ -34,6 +36,7 @@ export enum NetworkMessageType { NewTransactions = 83, } +export type NodeDataChannelType = typeof nodeDataChannel export type IsomorphicWebSocketConstructor = typeof WebSocket | typeof WebSocketClient export type IsomorphicWebSocket = WebSocket | WebSocketClient export type IsomorphicWebSocketErrorEvent = WSErrorEvent diff --git a/ironfish/src/network/webSocketClient.ts b/ironfish/src/network/webSocketClient.ts index c045facca2..880a74610d 100644 --- a/ironfish/src/network/webSocketClient.ts +++ b/ironfish/src/network/webSocketClient.ts @@ -12,7 +12,7 @@ import { WEBSOCKET_OPTIONS } from './webSocketServer' */ export class WebSocketClient extends WSWebSocket { constructor( - address: string | URL, + address: string, protocols?: string | string[], options?: WSWebSocket.ClientOptions | http.ClientRequestArgs, ) { diff --git a/ironfish/src/node.ts b/ironfish/src/node.ts index 1cd4eab4d9..8eb1deca72 100644 --- a/ironfish/src/node.ts +++ b/ironfish/src/node.ts @@ -22,7 +22,7 @@ import { MetricsMonitor } from './metrics' import { Migrator } from './migrations' import { MiningManager } from './mining' import { PeerNetwork, PrivateIdentity, privateIdentityToIdentity } from './network' -import { IsomorphicWebSocketConstructor } from './network/types' +import { IsomorphicWebSocketConstructor, NodeDataChannelType } from './network/types' import { getNetworkDefinition } from './networkDefinition' import { Package } from './package' import { Platform } from './platform' @@ -71,6 +71,7 @@ export class FullNode { workerPool, logger, webSocket, + nodeDataChannel, privateIdentity, peerStore, networkId, @@ -88,6 +89,7 @@ export class FullNode { workerPool: WorkerPool logger: Logger webSocket: IsomorphicWebSocketConstructor + nodeDataChannel: NodeDataChannelType privateIdentity?: PrivateIdentity peerStore: PeerStore networkId: number @@ -150,6 +152,7 @@ export class FullNode { bootstrapNodes: config.getArray('bootstrapNodes'), stunServers: config.getArray('p2pStunServers'), webSocket: webSocket, + nodeDataChannel: nodeDataChannel, node: this, chain: chain, metrics: this.metrics, @@ -300,6 +303,8 @@ export class FullNode { logger, }) + const nodeDataChannel = await import('node-datachannel') + const node = new FullNode({ pkg, chain, @@ -313,6 +318,7 @@ export class FullNode { workerPool, logger, webSocket, + nodeDataChannel, privateIdentity, peerStore, networkId: networkDefinition.id, diff --git a/ironfish/src/storage/database/errors.ts b/ironfish/src/storage/database/errors.ts index f2934b6b9f..f167cb2271 100644 --- a/ironfish/src/storage/database/errors.ts +++ b/ironfish/src/storage/database/errors.ts @@ -17,7 +17,7 @@ export class DuplicateKeyError extends Error { export class DatabaseOpenError extends Error { name = this.constructor.name - constructor(message?: string, error?: Error) { + constructor(message?: string, error?: { message: string; stack?: string }) { super(message ?? error?.message) if (error && error.stack) { diff --git a/ironfish/src/testUtilities/utils.ts b/ironfish/src/testUtilities/utils.ts index 9f12d67331..8ec58dc20d 100644 --- a/ironfish/src/testUtilities/utils.ts +++ b/ironfish/src/testUtilities/utils.ts @@ -9,6 +9,7 @@ import path from 'path' import { v4 as uuid } from 'uuid' import { Assert } from '../assert' import { Transaction } from '../primitives' +import { SetTimeoutToken } from '../utils/types' import { Account, Wallet } from '../wallet' import { createRawTransaction } from './helpers/transaction' @@ -88,7 +89,7 @@ export function mockImplementationShuffle( ): () => void { type PromiseResolve = (result: Promise) => void const buffer: [TArgs, PromiseResolve][] = [] - let lastTimeout: number | null = null + let lastTimeout: SetTimeoutToken | null = null let lastSend: number | null = null mock.mockImplementation((...args: TArgs): Promise => { @@ -117,7 +118,7 @@ export function mockImplementationShuffle( } // Start the debounce timer - lastTimeout = setTimeout(send, time) as unknown as number + lastTimeout = setTimeout(send, time) }) return promise.then((r) => r) diff --git a/ironfish/src/typedefs/blru.ts b/ironfish/src/typedefs/blru.d.ts similarity index 100% rename from ironfish/src/typedefs/blru.ts rename to ironfish/src/typedefs/blru.d.ts diff --git a/package.json b/package.json index 44d978adf4..92d99e0274 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "node-gyp": "8.4.1", "prettier": "2.3.2", "ts-jest": "29.0.3", - "typescript": "4.3.4" + "typescript": "4.7.4" }, "resolutions": { "axios": "0.21.4", diff --git a/yarn.lock b/yarn.lock index 8a1663c68d..e070dc2f70 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3790,10 +3790,12 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42" integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw== -"@types/node@18.11.16": - version "18.11.16" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.16.tgz#966cae211e970199559cfbd295888fca189e49af" - integrity sha512-6T7P5bDkRhqRxrQtwj7vru+bWTpelgtcETAZEUSdq0YISKz8WKdoBukQLYQQ6DFHvU9JRsbFq0JH5C51X2ZdnA== +"@types/node@20.9.0": + version "20.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.9.0.tgz#bfcdc230583aeb891cf51e73cfdaacdd8deae298" + integrity sha512-nekiGu2NDb1BcVofVcEKMIwzlx4NjHlcjhoxxKBNLtz15Y1z7MYf549DFvkHSId02Ax6kGwWntIBPC3l/JZcmw== + dependencies: + undici-types "~5.26.4" "@types/node@^14.0.1": version "14.18.51" @@ -8921,13 +8923,19 @@ node-cleanup@^2.1.2: resolved "https://registry.yarnpkg.com/node-cleanup/-/node-cleanup-2.1.2.tgz#7ac19abd297e09a7f72a71545d951b517e4dde2c" integrity sha1-esGavSl+Caf3KnFUXZUbUX5N3iw= -node-datachannel@0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/node-datachannel/-/node-datachannel-0.4.3.tgz#56a18cc62df4727f4483309b7b0bb86d5173ba27" - integrity sha512-I2SYzgqNd5gX8B+hQcff0qpGGwNiHZnXJNgsFyW0UXk1A3fbC/4L1PhSKGSuc7z0+Bk3raMN939E0KroJ5CJhA== +node-datachannel@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/node-datachannel/-/node-datachannel-0.5.0.tgz#158d1be9ba4de554b832eecfe319b80bf6eed9f1" + integrity sha512-B7164CUhXPuMZAmX5wUUq0jp0SDc1BcCgpA7oFjqe4jSdlq1WUH3a4xu4u3CcWMbNqKVSO1OBWisPkjnpTfo1Q== dependencies: + node-domexception "^2.0.1" prebuild-install "^7.0.1" +node-domexception@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-2.0.1.tgz#83b0d101123b5bbf91018fd569a58b88ae985e5b" + integrity sha512-M85rnSC7WQ7wnfQTARPT4LrK7nwCHLdDFOCcItZMhTQjyCebJH8GciKqYJNgaOFZs9nFmTmd/VMyi3OW5jA47w== + node-fetch@^2.6.1: version "2.6.11" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.11.tgz#cde7fc71deef3131ef80a738919f999e6edfff25" @@ -11113,6 +11121,11 @@ tsconfig-paths@^4.1.2: minimist "^1.2.6" strip-bom "^3.0.0" +tsimportlib@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/tsimportlib/-/tsimportlib-0.0.5.tgz#6ba8497a19b7dd5a9198209d9b167c9eb84d7fb1" + integrity sha512-qWQv/C3YB4Pwj77Z2HlORfy5EsWHcSYt66VQlMM0xZiKXwtoe1SxfpzmHX62sdJgzU6esrBGtyRIlx6O2OFPrQ== + tslib@^1.11.1, tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -11211,15 +11224,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.4.tgz#3f85b986945bcf31071decdd96cf8bfa65f9dcbc" - integrity sha512-uauPG7XZn9F/mo+7MrsRjyvbxFpzemRjKEZXS4AK83oP2KKOJPvb+9cO/gmnv8arWZvhnjVOXz7B49m1l0e9Ew== - -typescript@4.3.5: - version "4.3.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.3.5.tgz#4d1c37cc16e893973c45a06886b7113234f119f4" - integrity sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA== +typescript@4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== "typescript@^3 || ^4": version "4.8.3" @@ -11246,6 +11254,11 @@ unbox-primitive@^1.0.1: resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230"