diff --git a/packages/cli/package/docs/commands/README.md b/packages/cli/package/docs/commands/README.md index 98a57f8ff..723cbb150 100644 --- a/packages/cli/package/docs/commands/README.md +++ b/packages/cli/package/docs/commands/README.md @@ -23,6 +23,7 @@ * [`fluence provider gen`](#fluence-provider-gen) * [`fluence provider info`](#fluence-provider-info) * [`fluence provider init`](#fluence-provider-init) +* [`fluence provider offer-access-address`](#fluence-provider-offer-access-address) * [`fluence provider offer-create`](#fluence-provider-offer-create) * [`fluence provider offer-info`](#fluence-provider-offer-info) * [`fluence provider offer-remove`](#fluence-provider-offer-remove) @@ -637,6 +638,32 @@ DESCRIPTION _See code: [src/commands/provider/init.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.25.1/src/commands/provider/init.ts)_ +## `fluence provider offer-access-address` + +Set access address for offer for use in cluster software.. Alias: fluence provider sck + +``` +USAGE + $ fluence provider offer-access-address [--no-input] [--offer | --offer-id ] [--env ] [--priv-key ] [--address
] + +FLAGS + --address=
Address derived from Cluster private key + --env= Fluence Environment to use when running the command + --no-input Don't interactively ask for any input from the user + --offer= Offer name. Can't be used together with --offer flag + --offer-id= Offer id. Can't be used together with --offer flag + --priv-key= !WARNING! for debug purposes only. Passing private keys through flags is + unsecure. On local env + 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80 is used + by default when CLI is used in non-interactive mode + +DESCRIPTION + Set access address for offer for use in cluster software.. Alias: fluence provider sck +``` + +_See code: [src/commands/provider/offer-access-address.ts](https://github.com/fluencelabs/cli/blob/fluence-cli-v0.25.1/src/commands/provider/offer-access-address.ts)_ + ## `fluence provider offer-create` Create offers. You have to be registered as a provider to do that. Alias: fluence provider oc diff --git a/packages/cli/package/package.json b/packages/cli/package/package.json index 24a90eafa..0ac17f248 100644 --- a/packages/cli/package/package.json +++ b/packages/cli/package/package.json @@ -56,7 +56,7 @@ "whatwg-url": "^14.0.0" }, "dependencies": { - "@fluencelabs/deal-ts-clients": "0.23.2-update-deal-interface-c153307-7773-1.0", + "@fluencelabs/deal-ts-clients": "0.24.2", "@kubernetes/client-node": "github:fluencelabs/kubernetes-client-javascript#e72ee00a52fec4eb4a8327632895d888ee504f4d", "@libp2p/crypto": "4.0.1", "@libp2p/peer-id-factory": "4.0.5", diff --git a/packages/cli/package/src/commands/provider/offer-access-address.ts b/packages/cli/package/src/commands/provider/offer-access-address.ts new file mode 100644 index 000000000..950bbbbd7 --- /dev/null +++ b/packages/cli/package/src/commands/provider/offer-access-address.ts @@ -0,0 +1,92 @@ +/** + * Fluence CLI + * Copyright (C) 2024 Fluence DAO + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { BaseCommand } from "../../baseCommand.js"; +import { + filterOffersFoundOnChain, + resolveSingleOfferFromProviderConfig, +} from "../../lib/chain/offer/offer.js"; +import { assertProviderIsRegistered } from "../../lib/chain/providerInfo.js"; +import { commandObj } from "../../lib/commandObj.js"; +import { + CHAIN_FLAGS, + CLUSTER_ADDRESS_FLAG, + SINGLE_OFFER_FLAGS, + ADDRESS_FLAG_NAME, +} from "../../lib/const.js"; +import { getContracts, sign } from "../../lib/dealClient.js"; +import { aliasesText } from "../../lib/helpers/aliasesText.js"; +import { initCli } from "../../lib/lifeCycle.js"; +import { confirm, input } from "../../lib/prompt.js"; + +export default class OfferAccessAddress extends BaseCommand< + typeof OfferAccessAddress +> { + static override hiddenAliases = ["provider:sck"]; + static override description = `Set access address for offer for use in cluster software.${aliasesText.apply(this)}`; + static override flags = { + ...SINGLE_OFFER_FLAGS, + ...CHAIN_FLAGS, + ...CLUSTER_ADDRESS_FLAG, + }; + + async run(): Promise { + const { flags } = await initCli(this, await this.parse(OfferAccessAddress)); + const configOffer = await resolveSingleOfferFromProviderConfig(flags); + const offersFoundOnChain = await filterOffersFoundOnChain([configOffer]); + const chainOffer = offersFoundOnChain[0]; + + if (chainOffer === undefined) { + commandObj.error(`Offer ${configOffer.offerName} is not found on chain`); + } + + const address = + flags[ADDRESS_FLAG_NAME] ?? + (await input({ + message: "Enter cluster address", + validate(input: string) { + return ( + input.length === 42 || + "Please enter an address (40 hex digits + 0x)" + ); + }, + })); + + commandObj.logToStderr( + `Setting cluster address ${address} for offer ${chainOffer.offerName} (${chainOffer.offerId})`, + ); + + if ( + !(await confirm({ + message: "Would you like to continue", + default: true, + })) + ) { + commandObj.logToStderr("Setting cluster address cancelled"); + return; + } + + const { contracts } = await getContracts(); + + await sign({ + validateAddress: assertProviderIsRegistered, + title: `Setting cluster address ${address} for offer ${chainOffer.offerName} (${chainOffer.offerId})`, + method: contracts.diamond.setClusterKey, + args: [chainOffer.offerId, address], + }); + } +} diff --git a/packages/cli/package/src/lib/chain/offer/offer.ts b/packages/cli/package/src/lib/chain/offer/offer.ts index 335ce0978..8ebf0ffb4 100644 --- a/packages/cli/package/src/lib/chain/offer/offer.ts +++ b/packages/cli/package/src/lib/chain/offer/offer.ts @@ -47,6 +47,8 @@ import { OFFER_IDS_FLAG_NAME, PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME, PROVIDER_CONFIG_FULL_FILE_NAME, + SINGLE_OFFER_FLAG_NAME, + SINGLE_OFFER_ID_FLAG_NAME, VCPU_PER_CU, } from "../../const.js"; import { @@ -64,7 +66,7 @@ import { splitErrorsAndResults, } from "../../helpers/utils.js"; import { assertIsHex } from "../../helpers/validations.js"; -import { checkboxes, confirm } from "../../prompt.js"; +import { checkboxes, confirm, list } from "../../prompt.js"; import { ensureFluenceEnv } from "../../resolveFluenceEnv.js"; import { getProtocolVersions } from "../chainValidators.js"; import { @@ -85,6 +87,11 @@ export type OffersArgs = { force?: boolean | undefined; }; +export type SingleOffersArgs = { + [SINGLE_OFFER_FLAG_NAME]?: string | undefined; + [SINGLE_OFFER_ID_FLAG_NAME]?: string | undefined; +}; + export async function createOffers(flags: OffersArgs) { const allOffers = await resolveOffersFromProviderConfig(flags); const providerConfig = await ensureReadonlyProviderConfig(); @@ -955,6 +962,227 @@ export async function resolveOffersFromProviderConfig( return offers; } +export async function resolveSingleOfferFromProviderConfig( + flags: SingleOffersArgs, +): Promise { + if ( + flags[SINGLE_OFFER_FLAG_NAME] !== undefined && + flags[SINGLE_OFFER_ID_FLAG_NAME] !== undefined + ) { + commandObj.error( + `You can't use both ${color.yellow( + `--${SINGLE_OFFER_FLAG_NAME}`, + )} and ${color.yellow( + `--${SINGLE_OFFER_ID_FLAG_NAME}`, + )} flags at the same time. Please pick one of them`, + ); + } + + if (flags[SINGLE_OFFER_ID_FLAG_NAME] !== undefined) { + return resolveOfferById(flags[SINGLE_OFFER_ID_FLAG_NAME]); + } + + if (flags[SINGLE_OFFER_FLAG_NAME] !== undefined) { + return resolveOfferByName(flags[SINGLE_OFFER_FLAG_NAME]); + } + + const allOffers = await ensureOfferConfigs(); + const providerConfig = await ensureReadonlyProviderConfig(); + + return list({ + message: `Select one offer name from ${providerConfig.$getPath()}`, + options: allOffers.map((offer) => { + return { + name: offer.offerName, + value: offer, + }; + }), + validate: (choices: string[]) => { + if (choices.length === 0) { + return "Please select at least one offer name"; + } + + return true; + }, + oneChoiceMessage(choice) { + return `One offer found at ${providerConfig.$getPath()}: ${color.yellow( + choice, + )}. Do you want to select it`; + }, + onNoChoices() { + commandObj.error( + `You must have at least one offer specified in ${providerConfig.$getPath()}`, + ); + }, + flagName: OFFER_FLAG_NAME, + }); +} + +async function resolveOfferByName( + offerName: string, +): Promise { + const allOffers = await ensureOfferConfigs(); + const providerConfig = await ensureReadonlyProviderConfig(); + + const offer = allOffers.find((o) => { + return o.offerName === offerName; + }); + + if (offer === undefined) { + commandObj.error( + `Offer: ${color.yellow(offerName)} is not found in the 'offers' section of ${providerConfig.$getPath()}`, + ); + } + + return offer; +} + +async function resolveOfferById(offerId: string): Promise { + const allOffers = await ensureOfferConfigs(); + + const offerIdsFromFlags = [offerId]; + const offerIdsFromFlagsSet = new Set(offerIdsFromFlags); + + const offersDefinedLocally = allOffers.filter(({ offerId }) => { + return offerId !== undefined && offerIdsFromFlagsSet.has(offerId); + }); + + const offersDefinedLocallySet = new Set( + offersDefinedLocally.map(({ offerId }) => { + return offerId; + }), + ); + + const offerIdsNotDefinedLocally = offerIdsFromFlags.filter((offerId) => { + return !offersDefinedLocallySet.has(offerId); + }); + + const [offerInfosErrors, offerInfos] = await getOffersInfo( + offerIdsNotDefinedLocally.map((offerId) => { + return { offerId }; + }), + ); + + if (offerInfosErrors.length > 0) { + commandObj.warn( + `Wasn't able to get info about the following offers from indexer:\n\n${offerInfosErrors + .map(({ offerId }) => { + return offerId; + }) + .join("\n")}`, + ); + } + + const protocolVersionsFromChain = await getProtocolVersions(); + + const offersNotDefinedLocally = await Promise.all( + offerInfos.map(async ({ offerId, offerIndexerInfo }) => { + const resourcePricesWithIds = ( + offerIndexerInfo.offerResources ?? [] + ).reduce( + (acc, { resourcePrice, resourceDescription: { type, id } }) => { + const resourceType = onChainResourceTypeToResourceType(type); + + acc[resourceType].push({ + ty: type, + resourceType, + resourceId: id, + resourceName: id, + price: resourcePrice, + }); + + return acc; + }, + { + cpu: [], + ram: [], + storage: [], + ip: [], + bandwidth: [], + }, + ); + + const computePeersFromProviderConfig = await Promise.all( + offerIndexerInfo.peers.map( + async ({ computeUnits, resourcesByType, id }, i) => { + const peerIdBase58 = await peerIdHexStringToBase58String(id); + + const resourcesByTypeWithName = { + cpu: { + ...resourcesByType.cpu, + name: resourcesByType.cpu.resourceId, + }, + ram: { + ...resourcesByType.ram, + name: resourcesByType.ram.resourceId, + }, + storage: resourcesByType.storage.map((res) => { + return { ...res, name: res.resourceId }; + }), + ip: { + ...resourcesByType.ip, + name: resourcesByType.ip.resourceId, + }, + bandwidth: { + ...resourcesByType.bandwidth, + name: resourcesByType.bandwidth.resourceId, + }, + }; + + return { + name: `Peer #${numToStr(i)}`, + peerIdBase58, + peerId: await peerIdBase58ToUint8Array(peerIdBase58), + unitIds: computeUnits.map(({ id }) => { + return new Uint8Array(Buffer.from(id.slice(2), "hex")); + }), + owner: offerIndexerInfo.providerId, + resourcesByType: resourcesByTypeWithName, + }; + }, + ), + ); + + const { dataCenter } = offerIndexerInfo; + + assert( + dataCenter !== null && dataCenter !== undefined, + "Data center is always saved for offer on-chain when offer is created. Try waiting for indexer to index the data center", + ); + + assertIsHex(dataCenter.id, "Data center ID must be a hex string"); + + return { + offerName: `Offer ${offerId}`, + computePeersFromProviderConfig, + offerId, + dataCenter: { name: dataCenter.id, ...dataCenter }, + minProtocolVersion: Number( + protocolVersionsFromChain.minProtocolVersion, + ), + maxProtocolVersion: Number( + protocolVersionsFromChain.maxProtocolVersion, + ), + resourcePricesWithIds, + } satisfies (typeof offersDefinedLocally)[number]; + }), + ); + + const offer = + offersDefinedLocally.find((o) => { + return o.offerId === offerId; + }) ?? + offersNotDefinedLocally.find((o) => { + return o.offerId === offerId; + }); + + if (offer === undefined) { + commandObj.error(`Offer: ${color.yellow(offerId)} is not found`); + } + + return offer; +} + export type EnsureOfferConfig = Awaited< ReturnType >[number]; @@ -1434,3 +1662,44 @@ function serializeOfferInfo(offerIndexerInfo: OfferIndexerInfo) { ), }; } + +export type OnChainOffer = Awaited< + ReturnType +>[number]; + +export async function filterOffersFoundOnChain(offers: EnsureOfferConfig[]) { + const [offersWithoutIds, offersWithIds] = splitErrorsAndResults( + offers, + (offer) => { + return offer.offerId === undefined + ? { error: offer } + : { result: { ...offer, offerId: offer.offerId } }; + }, + ); + + if (offersWithoutIds.length > 0) { + commandObj.warn( + `Some of the offers don't have ids stored in ${PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME} so this offers might not have been created on chain:\n${offersWithoutIds + .map(({ offerName }) => { + return offerName; + }) + .join("\n")}`, + ); + } + + const [offerInfoErrors, offersInfo] = await getOffersInfo(offersWithIds); + + if (offerInfoErrors.length > 0) { + commandObj.warn( + `Some of the offers are not found on subgraph indexer:\n${offerInfoErrors + .map(({ offerName, offerId }) => { + return `${offerName} (${offerId})`; + }) + .join( + "\n", + )}\n\nPlease make sure the offers exist. If the offers don't exist you can create them using '${CLI_NAME} provider offer-create' command`, + ); + } + + return offersInfo; +} diff --git a/packages/cli/package/src/lib/chain/offer/updateOffers.ts b/packages/cli/package/src/lib/chain/offer/updateOffers.ts index 151dbfa91..64f456898 100644 --- a/packages/cli/package/src/lib/chain/offer/updateOffers.ts +++ b/packages/cli/package/src/lib/chain/offer/updateOffers.ts @@ -23,14 +23,9 @@ import omit from "lodash-es/omit.js"; import { commandObj } from "../../commandObj.js"; import type { ResourceType } from "../../configs/project/provider/provider4.js"; import { initNewProviderArtifactsConfig } from "../../configs/project/providerArtifacts/providerArtifacts.js"; -import { - CLI_NAME, - PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME, - VCPU_PER_CU, -} from "../../const.js"; +import { VCPU_PER_CU } from "../../const.js"; import { getContracts, signBatch, populateTx } from "../../dealClient.js"; import { numToStr } from "../../helpers/typesafeStringify.js"; -import { splitErrorsAndResults } from "../../helpers/utils.js"; import { deployManifests } from "../../manifestsDeploy.js"; import { confirm } from "../../prompt.js"; import { ensureFluenceEnv } from "../../resolveFluenceEnv.js"; @@ -45,10 +40,10 @@ import { assertProviderIsRegistered } from "../providerInfo.js"; import { type OffersArgs, resolveOffersFromProviderConfig, - type EnsureOfferConfig, - getOffersInfo, type OnChainResource, addRemainingCPs, + filterOffersFoundOnChain, + type OnChainOffer, } from "./offer.js"; type PeersOnChain = { @@ -219,47 +214,6 @@ export async function removeOffers(flags: OffersArgs) { await providerArtifactsConfig.$commit(); } -type OnChainOffer = Awaited< - ReturnType ->[number]; - -async function filterOffersFoundOnChain(offers: EnsureOfferConfig[]) { - const [offersWithoutIds, offersWithIds] = splitErrorsAndResults( - offers, - (offer) => { - return offer.offerId === undefined - ? { error: offer } - : { result: { ...offer, offerId: offer.offerId } }; - }, - ); - - if (offersWithoutIds.length > 0) { - commandObj.warn( - `Some of the offers don't have ids stored in ${PROVIDER_ARTIFACTS_CONFIG_FULL_FILE_NAME} so this offers might not have been created on chain:\n${offersWithoutIds - .map(({ offerName }) => { - return offerName; - }) - .join("\n")}`, - ); - } - - const [offerInfoErrors, offersInfo] = await getOffersInfo(offersWithIds); - - if (offerInfoErrors.length > 0) { - commandObj.warn( - `Some of the offers are not found on subgraph indexer:\n${offerInfoErrors - .map(({ offerName, offerId }) => { - return `${offerName} (${offerId})`; - }) - .join( - "\n", - )}\n\nPlease make sure the offers exist. If the offers don't exist you can create them using '${CLI_NAME} provider offer-create' command`, - ); - } - - return offersInfo; -} - function populateUpdateOffersTxs(offersFoundOnChain: OnChainOffer[]) { return Promise.all( offersFoundOnChain.map(async (offer) => { diff --git a/packages/cli/package/src/lib/configs/project/chainContainers.ts b/packages/cli/package/src/lib/configs/project/chainContainers.ts index 7129b24cd..3f8e3f5ca 100644 --- a/packages/cli/package/src/lib/configs/project/chainContainers.ts +++ b/packages/cli/package/src/lib/configs/project/chainContainers.ts @@ -54,7 +54,7 @@ export const chainContainers = { }, services: { [IPFS_CONTAINER_NAME]: { - image: "ipfs/kubo:v0.27.0", + image: "ipfs/kubo:v0.36.0", ports: [`${IPFS_PORT}:${IPFS_PORT}`, "4001:4001"], environment: { IPFS_PROFILE: "server", diff --git a/packages/cli/package/src/lib/const.ts b/packages/cli/package/src/lib/const.ts index ca260f271..ca3e88d42 100644 --- a/packages/cli/package/src/lib/const.ts +++ b/packages/cli/package/src/lib/const.ts @@ -134,11 +134,23 @@ export const PEERS_FLAG = { export const OFFER_FLAG_NAME = "offers"; export const OFFER_IDS_FLAG_NAME = "offer-ids"; +export const SINGLE_OFFER_FLAG_NAME = "offer"; +export const SINGLE_OFFER_ID_FLAG_NAME = "offer-id"; + const OFFER_FLAG_OBJECT = { description: `Comma-separated list of offer names. To use all of your offers: --${OFFER_FLAG_NAME} ${ALL_FLAG_VALUE}`, helpValue: "", }; +const SINGLE_OFFER_FLAG_OBJECT = { + description: `Offer name. Can't be used together with --offer flag`, + helpValue: "", +}; + +export const SINGLE_OFFER_FLAG = { + [SINGLE_OFFER_FLAG_NAME]: Flags.string(SINGLE_OFFER_FLAG_OBJECT), +}; + export const OFFER_FLAG = { [OFFER_FLAG_NAME]: Flags.string(OFFER_FLAG_OBJECT), }; @@ -155,6 +167,18 @@ export const OFFER_FLAGS = { }), }; +export const SINGLE_OFFER_FLAGS = { + [SINGLE_OFFER_FLAG_NAME]: Flags.string({ + ...SINGLE_OFFER_FLAG_OBJECT, + exclusive: [SINGLE_OFFER_ID_FLAG_NAME], + }), + [SINGLE_OFFER_ID_FLAG_NAME]: Flags.string({ + description: `Offer id. Can't be used together with --${SINGLE_OFFER_FLAG_NAME} flag`, + helpValue: "", + exclusive: [SINGLE_OFFER_FLAG_NAME], + }), +}; + export const PEER_AND_OFFER_NAMES_FLAGS = { ...PEER_NAMES_FLAG, ...OFFER_FLAG, @@ -183,6 +207,13 @@ export const ADDRESS_FLAG = { }), }; +export const CLUSTER_ADDRESS_FLAG = { + [ADDRESS_FLAG_NAME]: Flags.string({ + description: "Address derived from Cluster private key", + helpValue: "
", + }), +}; + export const CHAIN_FLAGS = { ...ENV_FLAG, ...PRIV_KEY_FLAG, diff --git a/packages/cli/package/src/versions.json b/packages/cli/package/src/versions.json index 2f0478932..bcc03f008 100644 --- a/packages/cli/package/src/versions.json +++ b/packages/cli/package/src/versions.json @@ -1,6 +1,6 @@ { "protocolVersion": 2, - "chain-rpc": "docker.fluence.dev/chain-rpc:update-deal-interface-c153307-7773-1", - "chain-deploy-script": "docker.fluence.dev/chain-deploy-script:update-deal-interface-c153307-7773-1", - "subgraph-deploy-script": "docker.fluence.dev/subgraph-deploy-script:update-deal-interface-c153307-7773-1" + "chain-rpc": "fluencelabs/chain-rpc:0.24.2", + "chain-deploy-script": "fluencelabs/chain-deploy-script:0.24.2", + "subgraph-deploy-script": "fluencelabs/subgraph-deploy-script:0.24.2" } diff --git a/packages/cli/package/tmp/cache/22.18.0/SHASUMS256.txt.asc b/packages/cli/package/tmp/cache/22.18.0/SHASUMS256.txt.asc new file mode 100644 index 000000000..b3a5b0d9b --- /dev/null +++ b/packages/cli/package/tmp/cache/22.18.0/SHASUMS256.txt.asc @@ -0,0 +1,52 @@ +-----BEGIN PGP SIGNED MESSAGE----- +Hash: SHA256 + +7bb75af308fc9f63e568968e0ef0e1600bb105abe2d2af99217ac72e9a24ffd0 node-v22.18.0-aix-ppc64.tar.gz +1dd46ad5edd1085da2b1a5b7e3e2a03d0266476786a7849a1207045fecc73d39 node-v22.18.0-arm64.msi +2c12913cba67af77ded8a399df3fd91c2e7f8628c7079da40bb9ff33bf00dfc0 node-v22.18.0-darwin-arm64.tar.gz +6616f388e127c858989fc7fa92879cdb20d2a5d446adbfdca6ee4feb385bfa8a node-v22.18.0-darwin-arm64.tar.xz +9c8aa1e5ff5780b38cc1134e2263d84e2f4308eb84c02515e3af33936ca02cdc node-v22.18.0-darwin-x64.tar.gz +76e4a1997da953dbf8e21f6ed1c4dd7eceb39deb96defe3b3e9d8f786ee287a8 node-v22.18.0-darwin-x64.tar.xz +c99fd7e0a7d2b7563ef5276e09a1f23559381c601ef80ccdce91259d6f6d0971 node-v22.18.0-headers.tar.gz +68a214508678fc6119bf1ad391fbf89fb624ab000d85693ef7c8a764b6622351 node-v22.18.0-headers.tar.xz +d415eeea90a2fdb60c66dd386b258acbfc4d1fa4720a8df5dea7369fbdbcddee node-v22.18.0-linux-arm64.tar.gz +04fca1b9afecf375f26b41d65d52aa1703a621abea5a8948c7d1e351e85edade node-v22.18.0-linux-arm64.tar.xz +57830914581dc3640e8d95378b76c6910860f42531959e4e88eb445e0cd982b0 node-v22.18.0-linux-armv7l.tar.gz +4d5efa082c1afbd9732dd13ab878f1b065c48c4caa08c7e6d833a759e3e6cd65 node-v22.18.0-linux-armv7l.tar.xz +38f965cbaa5e730dbd3b1afe895cfdb86da96371474827d05d847d338a0c9c97 node-v22.18.0-linux-ppc64le.tar.gz +f585a7d770619ba4eb7d4fd7df9fab5a1b1bd3aafb42046330a64952796d2869 node-v22.18.0-linux-ppc64le.tar.xz +f3578b0e7cdf247045f6eeb766febd74942954352161102cb6040a4d4c3b4c3c node-v22.18.0-linux-s390x.tar.gz +ffa98dc69fb63dfc49b3825e2c8f0e0489f6c00184dd4a85c6e1cb1d98e613ec node-v22.18.0-linux-s390x.tar.xz +a2e703725d8683be86bb5da967bf8272f4518bdaf10f21389e2b2c9eaeae8c8a node-v22.18.0-linux-x64.tar.gz +c1bfeecf1d7404fa74728f9db72e697decbd8119ccc6f5a294d795756dfcfca7 node-v22.18.0-linux-x64.tar.xz +2b8fdd687b7d497121c0d3f519987a73fcbe3e0b667f7dd0e4913d4bf2ee5adb node-v22.18.0-win-arm64.7z +023afb3d25c4c7d10cb6eb8a64865c347b56d4b07e6690606d021130a9192263 node-v22.18.0-win-arm64.zip +2a19a4258cede4f2bd9be7f65768658ae6436fe8b8b223846e5bacefdf4d64c2 node-v22.18.0-win-x64.7z +c95d8a7e1c99e669cc08c9f1176e068c1f50847c37908fcb8c35b62482366511 node-v22.18.0-win-x64.zip +37212dfb1b5dc1c4d3589979523fd607f05cb1d8780c0a7d37a85e2f899d9259 node-v22.18.0-win-x86.7z +f2e546345f729d8e82c82a088e616e76df14330c53d3cfecbbab51f783f08cf4 node-v22.18.0-win-x86.zip +dffd8e34d8eb1a1a2e6f5e6f129c4b1b8a34aa54e02799007adc99d73efac75c node-v22.18.0-x64.msi +81bc73f802094ee8306ebab9c73f9e1fccfa11c7f4d62f536bd3f3df3f7de947 node-v22.18.0-x86.msi +6dcf25409694feab54e7c634f30cc722f0a31941c81d9d9715e880cb64ef5c35 node-v22.18.0.pkg +26247ff9a75ac13f6dac7e07dca6172314554dcf20761675c5435f1e84e6c4b2 node-v22.18.0.tar.gz +120e0f74419097a9fafae1fd80b9de7791a587e6f1c48c22b193239ccd0f7084 node-v22.18.0.tar.xz +9cdd74e4d0fde4d8b43f2370577a194ebf3fc844cd6d177e98bc7c3f432e972a win-arm64/node.exe +c174ae3348a4a59c9d61629a7a73a38679fd27c55b2a7d85a2ea3e65de2beb13 win-arm64/node.lib +ad2d63ea61956f141f7b3902e7a1107d2efa2e4a7e13ddf94d87c517f42d672d win-arm64/node_pdb.7z +8602ec90e83461cd8435bb9a86696c0d7ec1a1f4029e60a8eafb2891c1fe405b win-arm64/node_pdb.zip +c22d1c59a1f767a1ed0178445a027f2257d318c55430fc819d48f269586822b7 win-x64/node.exe +4af0951712fb05a686a03e0592880e195ba53e5eb70e224d7ea7b8b76f2a3e86 win-x64/node.lib +6694a097f75781fa0d1ed4dd7b3f03076f15c074c16313fc0bab8dfd16998f7f win-x64/node_pdb.7z +31f91c9faa70f5adceb1cb8ded0185cfd2a086843a7d98f6628b0f3261b81200 win-x64/node_pdb.zip +25c4ea966d48ef8c8619e6f672eee14dd6cead56896981bc34b7dddb029fa65f win-x86/node.exe +e1830d28633bfa80180edfffe5f091dc945701ba8cf2b743ca542d34759f505a win-x86/node.lib +c06375292f3250da493051a5b86d3bf82037e1634bf32b71454fdbf3d21ed3f3 win-x86/node_pdb.7z +cc9c904ee85d912ccd4d89a9d3a5ef0a24c42bdee716cc17ff6e10285d71834b win-x86/node_pdb.zip + +-----BEGIN PGP SIGNATURE----- + +iHUEARYIAB0WIQRb6KP2yKXAHRBsCtggsaOQsWjTVgUCaIvkawAKCRAgsaOQsWjT +Von3AQDqcqTlqgKBTSaixzZXClUPuynGLQaifLLw71F+UYVgtAEA3qWofHxzS9lj +hBucx3ouhiHQ2b5F89QYgYD9e8vZTg8= +=6jia +-----END PGP SIGNATURE----- \ No newline at end of file diff --git a/packages/cli/package/yarn.lock b/packages/cli/package/yarn.lock index 2dd6b5995..a237ee7b3 100644 --- a/packages/cli/package/yarn.lock +++ b/packages/cli/package/yarn.lock @@ -1964,7 +1964,7 @@ __metadata: dependencies: "@actions/core": "npm:1.11.1" "@aws-sdk/lib-storage": "npm:^3.501.0" - "@fluencelabs/deal-ts-clients": "npm:0.23.2-update-deal-interface-c153307-7773-1.0" + "@fluencelabs/deal-ts-clients": "npm:0.24.2" "@graphql-codegen/cli": "npm:^5.0.3" "@graphql-codegen/typescript": "npm:^4.1.1" "@graphql-codegen/typescript-graphql-request": "npm:^6.2.0" @@ -2038,9 +2038,9 @@ __metadata: languageName: unknown linkType: soft -"@fluencelabs/deal-ts-clients@npm:0.23.2-update-deal-interface-c153307-7773-1.0": - version: 0.23.2-update-deal-interface-c153307-7773-1.0 - resolution: "@fluencelabs/deal-ts-clients@npm:0.23.2-update-deal-interface-c153307-7773-1.0" +"@fluencelabs/deal-ts-clients@npm:0.24.2": + version: 0.24.2 + resolution: "@fluencelabs/deal-ts-clients@npm:0.24.2" dependencies: "@graphql-typed-document-node/core": "npm:^3.2.0" debug: "npm:^4.3.4" @@ -2052,7 +2052,7 @@ __metadata: graphql-tag: "npm:^2.12.6" ipfs-http-client: "npm:^60.0.1" multiformats: "npm:^13.0.1" - checksum: 10c0/b35fabbd4db97676a50b221805e048912553c84b65c9bd0b09274d5ced72a56f209ef20ddfd0a087fce36e8a82047a2ccfdbb906a94fe996f1d75c011f5f57cf + checksum: 10c0/a8e21d13adb25c6a36e9c26b6292275784bc358a9ef025acd6406240ef46547730255851d5e83a5e2fc2ffbc0235955840dcf79090a735fa4a13a076ed73bbaa languageName: node linkType: hard