diff --git a/apps/browser-extension-wallet/package.json b/apps/browser-extension-wallet/package.json index ccd48510c..e9009885b 100644 --- a/apps/browser-extension-wallet/package.json +++ b/apps/browser-extension-wallet/package.json @@ -41,15 +41,15 @@ }, "dependencies": { "@ant-design/icons": "^4.7.0", - "@cardano-sdk/cardano-services-client": "0.21.7", + "@cardano-sdk/cardano-services-client": "0.22.0", "@cardano-sdk/core": "0.41.2", "@cardano-sdk/dapp-connector": "0.12.42", "@cardano-sdk/input-selection": "0.13.25", "@cardano-sdk/tx-construction": "0.21.10", "@cardano-sdk/util": "0.15.5", "@cardano-sdk/util-rxjs": "0.7.38", - "@cardano-sdk/wallet": "0.44.17", - "@cardano-sdk/web-extension": "0.34.16", + "@cardano-sdk/wallet": "0.44.18", + "@cardano-sdk/web-extension": "0.34.17", "@emurgo/cip14-js": "~3.0.1", "@input-output-hk/lace-ui-toolkit": "1.21.0", "@lace/cardano": "0.1.0", diff --git a/apps/browser-extension-wallet/src/config.ts b/apps/browser-extension-wallet/src/config.ts index 096b63afe..614c2ba8f 100644 --- a/apps/browser-extension-wallet/src/config.ts +++ b/apps/browser-extension-wallet/src/config.ts @@ -1,4 +1,5 @@ /* eslint-disable no-magic-numbers */ +import { BlockfrostClientConfig } from '@cardano-sdk/cardano-services-client'; import { Milliseconds } from '@cardano-sdk/core'; import { Wallet } from '@lace/cardano'; import { EnvironmentTypes } from '@stores'; @@ -13,6 +14,8 @@ type CExplorerUrlPaths = { Policy: string; }; +type BlockfrostEndpoint = Omit; + export type Config = { TOAST_DURATION: number; CHAIN: Wallet.ChainName; @@ -20,7 +23,7 @@ export type Config = { WALLET_SYNC_TIMEOUT: number; WALLET_INTERVAL: number; CARDANO_SERVICES_URLS: ByNetwork; - BLOCKFROST_CONFIGS: ByNetwork; + BLOCKFROST_CONFIGS: ByNetwork; BLOCKFROST_RATE_LIMIT_CONFIG: Wallet.RateLimiterConfig; ADA_PRICE_CHECK_INTERVAL: number; TOKEN_PRICE_CHECK_INTERVAL: number; @@ -64,7 +67,7 @@ const envChecks = (chosenChain: Wallet.ChainName): void => { } }; -const getBlockfrostConfigs = (): ByNetwork => ({ +const getBlockfrostConfigs = (): ByNetwork => ({ Mainnet: { baseUrl: process.env.BLOCKFROST_URL_MAINNET, projectId: process.env.BLOCKFROST_PROJECT_ID_MAINNET diff --git a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts index c7e91bd00..20ac32585 100644 --- a/apps/browser-extension-wallet/src/lib/scripts/background/config.ts +++ b/apps/browser-extension-wallet/src/lib/scripts/background/config.ts @@ -8,6 +8,7 @@ import { ExperimentName } from '@providers/ExperimentsProvider/types'; import { logger } from '@lace/common'; import { config } from '@src/config'; import Bottleneck from 'bottleneck'; +import { RateLimiter } from '@cardano-sdk/cardano-services-client'; export const backgroundServiceProperties: RemoteApiProperties = { requestMessage$: RemoteApiPropertyType.HotObservable, @@ -31,7 +32,7 @@ export const backgroundServiceProperties: RemoteApiProperties const { BLOCKFROST_CONFIGS, BLOCKFROST_RATE_LIMIT_CONFIG } = config(); // Important to use the same rateLimiter object for all networks, // because Blockfrost rate limit is per IP address, not per project id -const rateLimiter: Wallet.RateLimiter = new Bottleneck({ +const rateLimiter: RateLimiter = new Bottleneck({ reservoir: BLOCKFROST_RATE_LIMIT_CONFIG.size, reservoirIncreaseAmount: BLOCKFROST_RATE_LIMIT_CONFIG.increaseAmount, reservoirIncreaseInterval: BLOCKFROST_RATE_LIMIT_CONFIG.increaseInterval, @@ -52,7 +53,8 @@ export const getProviders = async (chainName: Wallet.ChainName): Promise { - const [lastMintedTx] = await fetchSequentially({ - haveEnoughItems: (items: Responses['asset_history']): boolean => items.length > 0, - paginationOptions: { order: 'desc' }, - request: (queryString) => this.request(`assets/${assetId}/history?${queryString}`), - responseTranslator: (response): Responses['asset_history'] => response.filter((tx) => tx.action === 'minted') - }); - - return lastMintedTx || undefined; - } - - private mapNftMetadata(asset: Responses['asset']): Asset.NftMetadata | null { - const image = this.metadatumToString( - (asset.onchain_metadata?.image as string | string[] | undefined) || asset.metadata?.logo - ); - const name = (asset.onchain_metadata?.name as string | undefined) || asset.metadata?.name; - if (!image || !name) return null; - try { - return { - image: Asset.Uri(image), - version: '1.0', - name, - description: this.metadatumToString( - (asset.onchain_metadata?.description as string | string[] | undefined) || asset.metadata?.description - ), - otherProperties: this.mapNftMetadataOtherProperties(asset.onchain_metadata), - files: Array.isArray(asset.onchain_metadata?.files) - ? asset.onchain_metadata.files - .map((file): Asset.NftMetadataFile | null => { - const mediaType = file.mediaType as string | undefined; - const fileName = file.name as string | undefined; - const src = file.src as string | undefined; - if (!src || !mediaType) return null; - try { - return { - name: fileName, - src: Asset.Uri(src), - mediaType: Asset.MediaType(mediaType), - otherProperties: this.mapNftMetadataOtherProperties(file) - }; - } catch { - return null; - } - }) - // eslint-disable-next-line unicorn/no-array-callback-reference - .filter(isNotNil) - : undefined, - mediaType: asset.onchain_metadata?.mediaType - ? Asset.ImageMediaType(asset.onchain_metadata.mediaType as string) - : undefined - }; - } catch { - return null; - } - } - - private asString = (metadatum: unknown) => (typeof metadatum === 'string' ? metadatum : undefined); - - private metadatumToString = (metadatum: Cardano.Metadatum | undefined): string | undefined => { - let stringMetadatum: string | undefined; - if (Array.isArray(metadatum)) { - const result = metadatum - .map((metadata) => this.asString(metadata)) // eslint-disable-next-line unicorn/no-array-callback-reference - .filter(isNotNil); - stringMetadatum = result.join(''); - } else { - stringMetadatum = this.asString(metadatum); - } - - return stringMetadatum; - }; - - private objToMetadatum(obj: unknown): Cardano.Metadatum { - if (typeof obj === 'string') return obj; - if (typeof obj === 'number') return BigInt(obj); - if (typeof obj === 'object') { - if (Array.isArray(obj)) { - return obj.map((item) => this.objToMetadatum(item)); - } - return new Map(Object.entries(obj).map(([key, value]) => [key, this.objToMetadatum(value)])); - } - return ''; - } - - private mapNftMetadataOtherProperties( - metadata: Responses['asset']['onchain_metadata'] - ): Map | undefined { - if (!metadata) { - return; - } - const otherProperties = Object.entries( - omit(metadata, ['name', 'image', 'description', 'mediaType', 'files', 'version']) - ); - if (otherProperties.length === 0) return; - // eslint-disable-next-line consistent-return - return new Map(otherProperties.map(([key, value]) => [key, this.objToMetadatum(value)])); - } - - private mapTokenMetadata(assetId: Cardano.AssetId, asset: Responses['asset']): Asset.TokenMetadata { - return { - decimals: asset.metadata?.decimals, - desc: this.metadatumToString( - asset.metadata?.description || (asset.onchain_metadata?.description as string | string[] | undefined) - ), - assetId, - icon: this.metadatumToString( - asset.metadata?.logo || (asset.onchain_metadata?.image as string | string[] | undefined) - ), - name: asset.metadata?.name || (asset.onchain_metadata?.name as string | undefined), - ticker: asset.metadata?.ticker, - url: asset.metadata?.url, - version: '1.0' - }; - } - - async getAsset({ assetId, extraData }: GetAssetArgs): Promise { - try { - const response = await this.request(`assets/${assetId.toString()}`); - const name = Cardano.AssetId.getAssetName(assetId); - const policyId = Cardano.PolicyId(response.policy_id); - const quantity = BigInt(response.quantity); - return { - assetId, - fingerprint: Cardano.AssetFingerprint(response.fingerprint), - name, - nftMetadata: extraData?.nftMetadata ? this.mapNftMetadata(response) : null, - policyId, - quantity, - supply: quantity, - tokenMetadata: extraData?.tokenMetadata ? this.mapTokenMetadata(assetId, response) : null - }; - } catch (error) { - throw this.toProviderError(error); - } - } - - getAssets({ assetIds, extraData }: GetAssetsArgs): Promise { - return Promise.all(assetIds.map((assetId) => this.getAsset({ assetId, extraData }))); - } -} diff --git a/packages/cardano/src/wallet/lib/blockfrost/blockfrost-client.ts b/packages/cardano/src/wallet/lib/blockfrost/blockfrost-client.ts deleted file mode 100644 index 226a928d8..000000000 --- a/packages/cardano/src/wallet/lib/blockfrost/blockfrost-client.ts +++ /dev/null @@ -1,75 +0,0 @@ -import { catchError, firstValueFrom, switchMap, throwError } from 'rxjs'; -import { fromFetch } from 'rxjs/fetch'; -import { CustomError } from 'ts-custom-error'; - -export type BlockfrostClientConfig = { - projectId: string; - baseUrl: string; -}; - -export type RateLimiter = { - schedule: (task: () => Promise) => Promise; -}; - -export type BlockfrostClientDependencies = { - rateLimiter: RateLimiter; -}; - -export class BlockfrostError extends CustomError { - constructor(public status?: number, public body?: string, public innerError?: unknown) { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const message: string | null = body || (innerError as any)?.message; - super(`Blockfrost error with status '${status}': ${message}`); - } -} - -export class BlockfrostClient { - private rateLimiter: RateLimiter; - private baseUrl: string; - private requestInit: RequestInit; - - constructor( - { projectId, baseUrl }: BlockfrostClientConfig, - { rateLimiter }: BlockfrostClientDependencies, - private apiVersion = 'v0' - ) { - this.rateLimiter = rateLimiter; - // eslint-disable-next-line camelcase - this.requestInit = { headers: { project_id: projectId } }; - this.baseUrl = baseUrl; - } - - /** - * @param endpoint e.g. 'blocks/latest' - * @throws {BlockfrostError} - */ - public request(endpoint: string): Promise { - return this.rateLimiter.schedule(() => - firstValueFrom( - fromFetch(`${this.baseUrl}/api/${this.apiVersion}/${endpoint}`, this.requestInit).pipe( - switchMap(async (response): Promise => { - if (response.ok) { - try { - return await response.json(); - } catch { - throw new BlockfrostError(response.status, 'Failed to parse json'); - } - } - try { - const body = await response.text(); - throw new BlockfrostError(response.status, body); - } catch { - throw new BlockfrostError(response.status); - } - }), - catchError((err) => { - if (err instanceof BlockfrostError) { - return throwError(() => err); - } - return throwError(() => new BlockfrostError(undefined, undefined, err)); - }) - ) - ) - ); - } -} diff --git a/packages/cardano/src/wallet/lib/blockfrost/blockfrost-provider.ts b/packages/cardano/src/wallet/lib/blockfrost/blockfrost-provider.ts deleted file mode 100644 index a185cdd62..000000000 --- a/packages/cardano/src/wallet/lib/blockfrost/blockfrost-provider.ts +++ /dev/null @@ -1,57 +0,0 @@ -/* eslint-disable no-magic-numbers */ -import { HealthCheckResponse, Provider, ProviderError, ProviderFailure } from '@cardano-sdk/core'; -import { BlockfrostClient, BlockfrostError } from './blockfrost-client'; -import type { AsyncReturnType } from 'type-fest'; -import type { BlockFrostAPI } from '@blockfrost/blockfrost-js'; - -const toProviderFailure = (status: number | undefined): ProviderFailure => { - switch (status) { - case 400: - return ProviderFailure.BadRequest; - case 403: - return ProviderFailure.Forbidden; - case 404: - return ProviderFailure.NotFound; - case 402: - case 418: - case 425: - case 429: - return ProviderFailure.ServerUnavailable; - case 500: - return ProviderFailure.Unhealthy; - default: - return ProviderFailure.Unknown; - } -}; - -export abstract class BlockfrostProvider implements Provider { - constructor(private client: BlockfrostClient) {} - - /** - * @param endpoint e.g. 'blocks/latest' - * @throws {ProviderError} - */ - protected async request(endpoint: string): Promise { - try { - return await this.client.request(endpoint); - } catch (error) { - throw this.toProviderError(error); - } - } - - async healthCheck(): Promise { - try { - const result = await this.client.request>('health'); - return { ok: result.is_healthy }; - } catch (error) { - return { ok: false, reason: this.toProviderError(error).message }; - } - } - - protected toProviderError(error: unknown): ProviderError { - if (error instanceof BlockfrostError) { - return new ProviderError(toProviderFailure(error.status), error); - } - return new ProviderError(ProviderFailure.Unknown, error); - } -} diff --git a/packages/cardano/src/wallet/lib/blockfrost/index.ts b/packages/cardano/src/wallet/lib/blockfrost/index.ts deleted file mode 100644 index d973f9d11..000000000 --- a/packages/cardano/src/wallet/lib/blockfrost/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export * from './blockfrost-client'; -export * from './blockfrost-asset-provider'; diff --git a/packages/cardano/src/wallet/lib/blockfrost/util.ts b/packages/cardano/src/wallet/lib/blockfrost/util.ts deleted file mode 100644 index c01867e6d..000000000 --- a/packages/cardano/src/wallet/lib/blockfrost/util.ts +++ /dev/null @@ -1,40 +0,0 @@ -/* eslint-disable camelcase */ -import { PaginationOptions } from '@blockfrost/blockfrost-js/lib/types'; -import { ProviderError, ProviderFailure } from '@cardano-sdk/core'; - -// eslint-disable-next-line no-magic-numbers -const isNotFoundError = (error: unknown) => error instanceof ProviderError && error.reason === ProviderFailure.NotFound; - -// copied from @cardano-sdk/cardano-services and updated to use custom blockfrost client instead of blockfrost-js -export const fetchSequentially = async ( - props: { - request: (queryString: string) => Promise; - responseTranslator?: (response: Response[]) => Item[]; - /** - * @returns true to indicatate that current result set should be returned - */ - haveEnoughItems?: (items: Item[]) => boolean; - paginationOptions?: PaginationOptions; - }, - page = 1, - accumulated: Item[] = [] -): Promise => { - // eslint-disable-next-line no-magic-numbers - const count = props.paginationOptions.count || 100; - const order = props.paginationOptions.order || 'asc'; - try { - const response = await props.request(`count=${count}&page=${page}&order=${order}`); - const maybeTranslatedResponse = props.responseTranslator ? props.responseTranslator(response) : response; - const newAccumulatedItems = [...accumulated, ...maybeTranslatedResponse] as Item[]; - const haveEnoughItems = props.haveEnoughItems?.(newAccumulatedItems); - if (response.length === count && !haveEnoughItems) { - return fetchSequentially(props, page + 1, newAccumulatedItems); - } - return newAccumulatedItems; - } catch (error) { - if (isNotFoundError(error)) { - return []; - } - throw error; - } -}; diff --git a/packages/cardano/src/wallet/lib/providers.ts b/packages/cardano/src/wallet/lib/providers.ts index 6272e2768..10a0b870c 100644 --- a/packages/cardano/src/wallet/lib/providers.ts +++ b/packages/cardano/src/wallet/lib/providers.ts @@ -25,10 +25,12 @@ import { stakePoolHttpProvider, utxoHttpProvider, TxSubmitApiProvider, - txSubmitHttpProvider + txSubmitHttpProvider, + BlockfrostClientConfig, + RateLimiter, + BlockfrostClient, + BlockfrostAssetProvider } from '@cardano-sdk/cardano-services-client'; -import { BlockfrostClient, BlockfrostClientConfig, RateLimiter } from './blockfrost/blockfrost-client'; -import { BlockfrostAssetProvider } from './blockfrost'; import { RemoteApiProperties, RemoteApiPropertyType } from '@cardano-sdk/web-extension'; const createTxSubmitProvider = ( @@ -120,7 +122,7 @@ export const createProviders = ({ rateLimiter: blockfrostConfig.rateLimiter }); const assetProvider = useBlockfrostAssetProvider - ? composeProviders(new BlockfrostAssetProvider(blockfrostClient), cardanoServicesAssetProvider) + ? composeProviders(new BlockfrostAssetProvider(blockfrostClient, logger), cardanoServicesAssetProvider) : cardanoServicesAssetProvider; const chainHistoryProvider = chainHistoryHttpProvider(httpProviderConfig); const rewardsProvider = rewardsHttpProvider(httpProviderConfig); diff --git a/packages/core/package.json b/packages/core/package.json index 7f2245f37..6c1a8a01e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -43,8 +43,8 @@ }, "dependencies": { "@ant-design/icons": "^4.7.0", - "@cardano-sdk/wallet": "0.44.17", - "@cardano-sdk/web-extension": "0.34.16", + "@cardano-sdk/wallet": "0.44.18", + "@cardano-sdk/web-extension": "0.34.17", "@input-output-hk/lace-ui-toolkit": "1.19.0", "@lace/cardano": "0.1.0", "@lace/common": "0.1.0", diff --git a/packages/nami/package.json b/packages/nami/package.json index 30f5415d9..046a4178c 100644 --- a/packages/nami/package.json +++ b/packages/nami/package.json @@ -62,7 +62,7 @@ "@cardano-sdk/crypto": "0.1.30", "@cardano-sdk/tx-construction": "0.21.10", "@cardano-sdk/util": "0.15.5", - "@cardano-sdk/web-extension": "0.34.16", + "@cardano-sdk/web-extension": "0.34.17", "@chakra-ui/css-reset": "1.0.0", "@chakra-ui/icons": "1.0.13", "@chakra-ui/react": "1.6.4", diff --git a/packages/staking/package.json b/packages/staking/package.json index c8e1174ea..4c8927b4d 100644 --- a/packages/staking/package.json +++ b/packages/staking/package.json @@ -80,8 +80,8 @@ "@cardano-sdk/input-selection": "0.13.25", "@cardano-sdk/tx-construction": "0.21.10", "@cardano-sdk/util": "0.15.5", - "@cardano-sdk/wallet": "0.44.17", - "@cardano-sdk/web-extension": "0.34.16", + "@cardano-sdk/wallet": "0.44.18", + "@cardano-sdk/web-extension": "0.34.17", "@storybook/addon-actions": "^7.6.7", "@storybook/addon-essentials": "^7.6.7", "@storybook/addon-interactions": "^7.6.7", @@ -129,8 +129,8 @@ "@cardano-sdk/input-selection": "0.13.25", "@cardano-sdk/tx-construction": "0.21.10", "@cardano-sdk/util": "0.15.5", - "@cardano-sdk/wallet": "0.44.17", - "@cardano-sdk/web-extension": "0.34.16", + "@cardano-sdk/wallet": "0.44.18", + "@cardano-sdk/web-extension": "0.34.17", "@lace/cardano": "^0.1.0", "@lace/common": "^0.1.0", "@lace/core": "0.1.0", diff --git a/yarn.lock b/yarn.lock index 9864c8f2f..75bac45f7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9109,9 +9109,9 @@ __metadata: languageName: node linkType: hard -"@cardano-sdk/cardano-services-client@npm:0.21.7": - version: 0.21.7 - resolution: "@cardano-sdk/cardano-services-client@npm:0.21.7" +"@cardano-sdk/cardano-services-client@npm:0.22.0": + version: 0.22.0 + resolution: "@cardano-sdk/cardano-services-client@npm:0.22.0" dependencies: "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/util": ~0.15.5 @@ -9119,9 +9119,12 @@ __metadata: class-validator: ^0.14.0 isomorphic-ws: ^5.0.0 json-bigint: ~1.0.0 + lodash: ^4.17.21 + rxjs: ^7.4.0 + ts-custom-error: ^3.2.0 ts-log: ^2.2.4 ws: ^8.17.1 - checksum: f1cea57221eca3413377507d04efe4adc8439b7ed49166d56016b5a85c7043d2bc418060660c27014a5e6c382e2360236bf8ebf17dd3887d5a22cb562ff15978 + checksum: 9df5408c02dde5acdbe1a5bb5ca7cc79b3adff15a37c174e330413fb7b89daf8716f6e7b2a6adb3a65715c6d717ef8eca3949030cac963e52e0c82e8aeccab72 languageName: node linkType: hard @@ -9269,15 +9272,15 @@ __metadata: languageName: node linkType: hard -"@cardano-sdk/ogmios@npm:~0.18.9": - version: 0.18.9 - resolution: "@cardano-sdk/ogmios@npm:0.18.9" +"@cardano-sdk/ogmios@npm:~0.18.10": + version: 0.18.10 + resolution: "@cardano-sdk/ogmios@npm:0.18.10" dependencies: "@cardano-ogmios/client": 6.5.0 "@cardano-ogmios/schema": 6.5.0 "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/crypto": ~0.1.30 - "@cardano-sdk/projection": ~0.12.9 + "@cardano-sdk/projection": ~0.12.10 "@cardano-sdk/util": ~0.15.5 backoff-rxjs: ^7.0.0 buffer: 5.7.1 @@ -9286,17 +9289,17 @@ __metadata: nanoid: ^3.1.31 rxjs: ^7.4.0 ts-log: ^2.2.3 - checksum: 8da911c56f71ad6675c665bb939e9a148f723c7b2f3c90297d3a913e7f52637cd752cf7493a04ca190a8fcbec9e42f6ffd151f5789c6765ff8b4ab816edef727 + checksum: 1919686ade496d5bb27d02c59eb9eed28ef71e34ce60f2bb4fe8c4dbe0152f5fdcc627e9f03ec16465b6140a9edb11ae0bd261f844fe89ac6d1ca5b10a130b2a languageName: node linkType: hard -"@cardano-sdk/projection@npm:~0.12.9": - version: 0.12.9 - resolution: "@cardano-sdk/projection@npm:0.12.9" +"@cardano-sdk/projection@npm:~0.12.10": + version: 0.12.10 + resolution: "@cardano-sdk/projection@npm:0.12.10" dependencies: "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/crypto": ~0.1.30 - "@cardano-sdk/ogmios": ~0.18.9 + "@cardano-sdk/ogmios": ~0.18.10 "@cardano-sdk/util": ~0.15.5 "@cardano-sdk/util-rxjs": ~0.7.38 lodash: ^4.17.21 @@ -9304,7 +9307,7 @@ __metadata: ts-custom-error: ^3.2.0 ts-log: ^2.2.4 tsc-alias: ^1.8.10 - checksum: a0d4e3cb28ca9d6e1711772295fc364590482073c47ec8f99a935da133dd978bb23c5860099057545440870c73092759ce413c04bb2551ceb6e27bf2b0a50358 + checksum: 0791c6808386241ec806ccf2e40063c4d939d10e31b175e51bcdf9f303c749f1e0f6cb9f43e938cae99587ed37a95cca65b6aafb9d9a24d0e7220bf124323cf1 languageName: node linkType: hard @@ -9327,14 +9330,14 @@ __metadata: languageName: node linkType: hard -"@cardano-sdk/util-dev@npm:0.23.9": - version: 0.23.9 - resolution: "@cardano-sdk/util-dev@npm:0.23.9" +"@cardano-sdk/util-dev@npm:0.23.10": + version: 0.23.10 + resolution: "@cardano-sdk/util-dev@npm:0.23.10" dependencies: "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/crypto": ~0.1.30 "@cardano-sdk/key-management": ~0.24.8 - "@cardano-sdk/projection": ~0.12.9 + "@cardano-sdk/projection": ~0.12.10 "@cardano-sdk/util": ~0.15.5 "@types/dockerode": ^3.3.8 axios: ^1.7.4 @@ -9348,7 +9351,7 @@ __metadata: lodash: ^4.17.21 rxjs: ^7.4.0 ts-log: ^2.2.4 - checksum: 16f9d4e8d4d5e93d007aaeeaf8e4469b9a3c9189ad19f897b40d34dd9e2d5191f8b8a38ff48991500cbfdbcf5fc5cbb0bf49a5e30d08a4e40f085bbcad1d166c + checksum: 71618da49217627bfacd3eac36a94a8ea9fdd942aaf0f7b5ec693dd63dd9a560413d5c839f1f66d684cf70e566a62ff51c2f4d4dd88412bc0ea4735ab591a94a languageName: node linkType: hard @@ -9377,9 +9380,9 @@ __metadata: languageName: node linkType: hard -"@cardano-sdk/wallet@npm:0.44.17, @cardano-sdk/wallet@npm:~0.44.17": - version: 0.44.17 - resolution: "@cardano-sdk/wallet@npm:0.44.17" +"@cardano-sdk/wallet@npm:0.44.18, @cardano-sdk/wallet@npm:~0.44.18": + version: 0.44.18 + resolution: "@cardano-sdk/wallet@npm:0.44.18" dependencies: "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/crypto": ~0.1.30 @@ -9401,13 +9404,13 @@ __metadata: ts-custom-error: ^3.2.0 ts-log: ^2.2.3 uuid: ^8.3.2 - checksum: e40fcc7dbf24289e51bff62dad6e4d48c938492110ad0deeee4b4521a0fb510414fde8cf1e4dca412d86c388fe334f2b18925de2814cad79301831055b73ec24 + checksum: 1743bd0117bfd33dcc039735af7d5eb8779e0c6474e5a79aa2f55e0d3a862983976f6f1d680b243506b243bfe73e5aaba03144031c4090f3220f80a8b4cef807 languageName: node linkType: hard -"@cardano-sdk/web-extension@npm:0.34.16": - version: 0.34.16 - resolution: "@cardano-sdk/web-extension@npm:0.34.16" +"@cardano-sdk/web-extension@npm:0.34.17": + version: 0.34.17 + resolution: "@cardano-sdk/web-extension@npm:0.34.17" dependencies: "@cardano-sdk/core": ~0.41.2 "@cardano-sdk/crypto": ~0.1.30 @@ -9418,7 +9421,7 @@ __metadata: "@cardano-sdk/tx-construction": ~0.21.10 "@cardano-sdk/util": ~0.15.5 "@cardano-sdk/util-rxjs": ~0.7.38 - "@cardano-sdk/wallet": ~0.44.17 + "@cardano-sdk/wallet": ~0.44.18 backoff-rxjs: ^7.0.0 lodash: ^4.17.21 rxjs: ^7.4.0 @@ -9426,7 +9429,7 @@ __metadata: ts-log: ^2.2.3 uuid: ^8.3.2 webextension-polyfill: ^0.8.0 - checksum: 2a8776d221548708368b5f02970936d9f75cf2ec55e0d4414ca1aac2babbe0063d098a6f7c78b8ce19cd8b10b2e8d21a0ec85a004215a0ff483d71cc619d92f7 + checksum: bad27049d1f510d6bcb50c9667c09ec31cc36da576cee66872a4f3bd719f870113660948998068cc44fef0ef028e14b847b802a6607fc2b70c7dc5366e4f7af3 languageName: node linkType: hard @@ -13492,7 +13495,7 @@ __metadata: resolution: "@lace/browser-extension-wallet@workspace:apps/browser-extension-wallet" dependencies: "@ant-design/icons": ^4.7.0 - "@cardano-sdk/cardano-services-client": 0.21.7 + "@cardano-sdk/cardano-services-client": 0.22.0 "@cardano-sdk/core": 0.41.2 "@cardano-sdk/dapp-connector": 0.12.42 "@cardano-sdk/hardware-ledger": 0.12.10 @@ -13500,8 +13503,8 @@ __metadata: "@cardano-sdk/tx-construction": 0.21.10 "@cardano-sdk/util": 0.15.5 "@cardano-sdk/util-rxjs": 0.7.38 - "@cardano-sdk/wallet": 0.44.17 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/wallet": 0.44.18 + "@cardano-sdk/web-extension": 0.34.17 "@emurgo/cardano-message-signing-asmjs": 1.0.1 "@emurgo/cip14-js": ~3.0.1 "@input-output-hk/lace-ui-toolkit": 1.21.0 @@ -13579,7 +13582,7 @@ __metadata: resolution: "@lace/cardano@workspace:packages/cardano" dependencies: "@blockfrost/blockfrost-js": ^5.5.0 - "@cardano-sdk/cardano-services-client": 0.21.7 + "@cardano-sdk/cardano-services-client": 0.22.0 "@cardano-sdk/core": 0.41.2 "@cardano-sdk/crypto": 0.1.30 "@cardano-sdk/hardware-ledger": 0.12.10 @@ -13587,9 +13590,9 @@ __metadata: "@cardano-sdk/key-management": 0.24.8 "@cardano-sdk/tx-construction": 0.21.10 "@cardano-sdk/util": 0.15.5 - "@cardano-sdk/util-dev": 0.23.9 - "@cardano-sdk/wallet": 0.44.17 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/util-dev": 0.23.10 + "@cardano-sdk/wallet": 0.44.18 + "@cardano-sdk/web-extension": 0.34.17 "@emurgo/cardano-message-signing-browser": 1.0.1 "@lace/common": 0.1.0 "@ledgerhq/devices": ^8.2.1 @@ -13654,8 +13657,8 @@ __metadata: "@babel/preset-env": ^7.22.20 "@babel/preset-react": ^7.22.15 "@babel/preset-typescript": ^7.22.15 - "@cardano-sdk/wallet": 0.44.17 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/wallet": 0.44.18 + "@cardano-sdk/web-extension": 0.34.17 "@input-output-hk/lace-ui-toolkit": 1.19.0 "@lace/cardano": 0.1.0 "@lace/common": 0.1.0 @@ -13755,7 +13758,7 @@ __metadata: "@cardano-sdk/crypto": 0.1.30 "@cardano-sdk/tx-construction": 0.21.10 "@cardano-sdk/util": 0.15.5 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/web-extension": 0.34.17 "@chakra-ui/css-reset": 1.0.0 "@chakra-ui/icons": 1.0.13 "@chakra-ui/react": 1.6.4 @@ -13838,8 +13841,8 @@ __metadata: "@cardano-sdk/input-selection": 0.13.25 "@cardano-sdk/tx-construction": 0.21.10 "@cardano-sdk/util": 0.15.5 - "@cardano-sdk/wallet": 0.44.17 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/wallet": 0.44.18 + "@cardano-sdk/web-extension": 0.34.17 "@input-output-hk/lace-ui-toolkit": 1.19.0 "@lace/cardano": ^0.1.0 "@lace/common": ^0.1.0 @@ -13907,8 +13910,8 @@ __metadata: "@cardano-sdk/input-selection": 0.13.25 "@cardano-sdk/tx-construction": 0.21.10 "@cardano-sdk/util": 0.15.5 - "@cardano-sdk/wallet": 0.44.17 - "@cardano-sdk/web-extension": 0.34.16 + "@cardano-sdk/wallet": 0.44.18 + "@cardano-sdk/web-extension": 0.34.17 "@lace/cardano": ^0.1.0 "@lace/common": ^0.1.0 "@lace/core": 0.1.0