@iota/graphql-transport 0.17.0 → 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -585,7 +585,7 @@ const RPC_METHODS = {
585
585
  function: "MoveFunction" in filter ? `${filter.MoveFunction.package}::${filter.MoveFunction.module}::${filter.MoveFunction.function}` : void 0,
586
586
  inputObject: "InputObject" in filter ? filter.InputObject : void 0,
587
587
  changedObject: "ChangedObject" in filter ? filter.ChangedObject : void 0,
588
- signAddress: "FromAddress" in filter ? filter.FromAddress : void 0,
588
+ sentAddress: "FromAddress" in filter ? filter.FromAddress : void 0,
589
589
  recvAddress: "ToAddress" in filter ? filter.ToAddress : void 0,
590
590
  kind: graphqlTransactionKindFilter
591
591
  } : {}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/methods.ts"],
4
- "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64 } from '@iota/bcs';\nimport type {\n MoveValue,\n ProtocolConfigValue,\n IotaArgument,\n IotaClient,\n IotaMoveNormalizedModule,\n IotaTransactionKind,\n IotaMoveViewCallResults,\n} from '@iota/iota-sdk/client';\nimport { Transaction } from '@iota/iota-sdk/transactions';\nimport {\n normalizeStructTag,\n normalizeIotaAddress,\n parseStructTag,\n IOTA_TYPE_ARG,\n} from '@iota/iota-sdk/utils';\n\nimport type {\n ObjectFilter,\n QueryEventsQueryVariables,\n QueryTransactionBlocksQueryVariables,\n Rpc_Checkpoint_FieldsFragment,\n Rpc_Transaction_FieldsFragment,\n} from './generated/queries.js';\nimport {\n DevInspectTransactionBlockDocument,\n DryRunTransactionBlockDocument,\n ExecuteTransactionBlockDocument,\n GetAllBalancesDocument,\n GetBalanceDocument,\n GetChainIdentifierDocument,\n GetCheckpointDocument,\n GetCheckpointsDocument,\n GetCoinMetadataDocument,\n GetCoinsDocument,\n GetCommitteeInfoDocument,\n GetCurrentEpochDocument,\n GetDynamicFieldObjectDocument,\n GetDynamicFieldsDocument,\n GetLatestCheckpointSequenceNumberDocument,\n GetLatestIotaSystemStateDocument,\n GetMoveFunctionArgTypesDocument,\n GetNormalizedMoveFunctionDocument,\n GetNormalizedMoveModuleDocument,\n GetNormalizedMoveModulesByPackageDocument,\n GetNormalizedMoveStructDocument,\n GetObjectDocument,\n GetOwnedObjectsDocument,\n GetProtocolConfigDocument,\n GetReferenceGasPriceDocument,\n GetStakesByIdsDocument,\n GetStakesDocument,\n GetTotalSupplyDocument,\n GetTotalTransactionBlocksDocument,\n GetTransactionBlockDocument,\n GetTypeLayoutDocument,\n GetValidatorsApyDocument,\n IsTransactionIndexedOnNodeDocument,\n MultiGetObjectsDocument,\n MultiGetTransactionBlocksDocument,\n PaginateCheckpointTransactionBlocksDocument,\n PaginateEpochValidatorsDocument,\n PaginateMoveModuleListsDocument,\n PaginateTransactionBlockListsDocument,\n QueryEventsDocument,\n QueryTransactionBlocksDocument,\n TransactionBlockKindInput,\n TryGetPastObjectDocument,\n ViewDocument,\n} from './generated/queries.js';\nimport { mapJsonToBcs } from './mappers/bcs.js';\nimport { mapGraphQLCheckpointToRpcCheckpoint } from './mappers/checkpoint.js';\nimport {\n mapNormalizedMoveFunction,\n mapNormalizedMoveModule,\n mapNormalizedMoveStruct,\n moveDataToRpcContent,\n} from './mappers/move.js';\nimport { mapGraphQLMoveObjectToRpcObject, mapGraphQLObjectToRpcObject } from './mappers/object.js';\nimport { mapGraphQLStakeToRpcStake } from './mappers/stakes.js';\nimport { mapGraphQLTransactionBlockToRpcTransactionBlock } from './mappers/transaction-block.js';\nimport { isNumericString, toShortTypeString } from './mappers/util.js';\nimport { mapGraphQlValidatorToRpcValidator } from './mappers/validator.js';\nimport type { IotaClientGraphQLTransport } from './transport.js';\n\ninterface ResponseTypes {\n getRpcApiVersion: {\n info: { version?: string };\n };\n}\n\nexport const RPC_METHODS: {\n [K in keyof IotaClient as IotaClient[K] extends (...args: any[]) => Promise<any>\n ? K\n : never]?: IotaClient[K] extends (...args: any[]) => infer R\n ? (\n transport: IotaClientGraphQLTransport,\n inputs: any[],\n ) => K extends keyof ResponseTypes ? Promise<ResponseTypes[K]> : R\n : never;\n} = {\n async getRpcApiVersion(transport) {\n const res = await transport.graphqlRequest({\n query: 'query { __typename }',\n variables: {},\n });\n\n if (!res.ok) {\n throw new Error('Failed to fetch');\n }\n\n return {\n info: {\n version: res.headers.get('x-iota-rpc-version') ?? undefined,\n },\n };\n },\n\n async getCoins(transport, [owner, coinType, cursor, limit]) {\n const { nodes: coins, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCoinsDocument,\n variables: {\n owner,\n type: coinType,\n cursor: cursor,\n first: limit,\n },\n },\n (data) => data.address?.coins,\n );\n\n return {\n data: coins.map((coin) => ({\n balance: coin.coinBalance,\n coinObjectId: coin.address,\n coinType: toShortTypeString(\n normalizeStructTag(parseStructTag(coin.contents?.type.repr!).typeParams[0]),\n ),\n digest: coin.digest!,\n previousTransaction: coin.previousTransactionBlock?.digest!,\n version: String(coin.version!),\n })),\n nextCursor: pageInfo.endCursor,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n\n async getAllCoins(transport, inputs) {\n const { nodes: coins, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCoinsDocument,\n variables: {\n owner: inputs[0],\n cursor: inputs[1],\n first: inputs[2],\n },\n },\n (data) => data.address?.coins,\n );\n\n return {\n data: coins.map((coin) => ({\n balance: coin.coinBalance,\n coinObjectId: coin.address,\n coinType: toShortTypeString(\n normalizeStructTag(parseStructTag(coin.contents?.type.repr!).typeParams[0]),\n ),\n digest: coin.digest!,\n previousTransaction: coin.previousTransactionBlock?.digest!,\n version: String(coin.version!),\n })),\n nextCursor: pageInfo.endCursor,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n\n async getBalance(transport, inputs) {\n try {\n const balance = await transport.graphqlQuery(\n {\n query: GetBalanceDocument,\n variables: {\n owner: inputs[0],\n type: inputs[1],\n },\n },\n (data) => data.address?.balance,\n );\n\n return {\n coinType: toShortTypeString(balance.coinType?.repr!) || IOTA_TYPE_ARG,\n coinObjectCount: balance.coinObjectCount || 0,\n totalBalance: balance.totalBalance || 0,\n };\n } catch (error) {\n console.warn('GraphQL getBalance failed, falling back to default values:', error);\n return {\n coinType: normalizeStructTag(inputs[1] ?? IOTA_TYPE_ARG),\n coinObjectCount: 0,\n totalBalance: '0',\n };\n }\n },\n\n async getAllBalances(transport, inputs) {\n const balances = await transport.graphqlQuery(\n {\n query: GetAllBalancesDocument,\n variables: {\n owner: inputs[0],\n },\n },\n (data) => data.address?.balances?.nodes,\n );\n\n return balances.map((balance) => ({\n coinType: toShortTypeString(balance.coinType?.repr!),\n coinObjectCount: balance.coinObjectCount!,\n totalBalance: balance.totalBalance,\n }));\n },\n async getCoinMetadata(transport, inputs) {\n const metadata = await transport.graphqlQuery(\n {\n query: GetCoinMetadataDocument,\n variables: {\n coinType: inputs[0],\n },\n },\n (data) => data.coinMetadata,\n );\n\n return {\n decimals: metadata.decimals!,\n name: metadata.name!,\n symbol: metadata.symbol!,\n description: metadata.description!,\n iconUrl: metadata.iconUrl,\n id: metadata.address,\n };\n },\n async getTotalSupply(transport, inputs) {\n const metadata = await transport.graphqlQuery(\n {\n query: GetTotalSupplyDocument,\n variables: {\n coinType: inputs[0],\n },\n },\n (data) => data.coinMetadata,\n );\n\n return {\n value: BigInt(metadata.supply!).toString(),\n };\n },\n async getMoveFunctionArgTypes(transport, [pkg, module, fn]) {\n const moveModule = await transport.graphqlQuery(\n {\n query: GetMoveFunctionArgTypesDocument,\n variables: {\n module: module,\n packageId: pkg,\n function: fn,\n },\n },\n (data) => data.object?.asMovePackage?.module?.function?.parameters,\n );\n\n return moveModule.map((parameter) => {\n if (!parameter.signature.body.datatype) {\n return 'Pure';\n }\n\n return {\n Object:\n parameter.signature.ref === '&'\n ? 'ByImmutableReference'\n : parameter.signature.ref === '&mut'\n ? 'ByMutableReference'\n : 'ByValue',\n };\n });\n },\n async getNormalizedMoveFunction(transport, [pkg, module, fn]) {\n const moveFunction = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveFunctionDocument,\n variables: {\n module: module,\n packageId: pkg,\n function: fn,\n },\n },\n (data) => data.object?.asMovePackage?.module?.function,\n );\n\n return mapNormalizedMoveFunction(moveFunction);\n },\n async getNormalizedMoveModulesByPackage(transport, [pkg]) {\n const movePackage = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModulesByPackageDocument,\n variables: {\n packageId: pkg,\n },\n },\n (data) => data.object?.asMovePackage,\n );\n\n let hasNextPage = movePackage.modules?.pageInfo.hasNextPage ?? false;\n let cursor = movePackage.modules?.pageInfo.endCursor;\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModulesByPackageDocument,\n variables: {\n packageId: pkg,\n cursor,\n },\n },\n (data) => data.object?.asMovePackage,\n );\n\n movePackage.modules?.nodes.push(...(page.modules?.nodes ?? []));\n hasNextPage = page.modules?.pageInfo.hasNextPage ?? false;\n cursor = page.modules?.pageInfo.endCursor;\n }\n\n const address = toShortTypeString(movePackage.address);\n const modules: Record<string, IotaMoveNormalizedModule> = {};\n\n for (const moveModule of movePackage.modules?.nodes ?? []) {\n let hasMoreFriends = moveModule.friends?.pageInfo.hasNextPage ?? false;\n let hasMoreFunctions = moveModule.functions?.pageInfo.hasNextPage ?? false;\n let hasMoreStructs = moveModule.structs?.pageInfo.hasNextPage ?? false;\n let hasMoreEnums = moveModule.enums?.pageInfo.hasNextPage ?? false;\n let afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n let afterEnums = moveModule.enums?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions || hasMoreEnums) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateMoveModuleListsDocument,\n variables: {\n module: moveModule.name,\n packageId: pkg,\n hasMoreFriends,\n hasMoreFunctions,\n hasMoreStructs,\n hasMoreEnums,\n afterFriends,\n afterFunctions,\n afterStructs,\n afterEnums,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n moveModule.friends.nodes.push(...(page.friends?.nodes ?? []));\n moveModule.functions?.nodes.push(...(page.functions?.nodes ?? []));\n moveModule.structs?.nodes.push(...(page.structs?.nodes ?? []));\n moveModule.enums?.nodes.push(...(page.enums?.nodes ?? []));\n hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n hasMoreEnums = page.enums?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.pageInfo.endCursor;\n afterEnums = page.enums?.pageInfo.endCursor;\n }\n }\n\n movePackage.modules?.nodes.forEach((module) => {\n modules[module.name] = mapNormalizedMoveModule(module, address);\n });\n\n return modules;\n },\n async getNormalizedMoveModule(transport, [pkg, module]) {\n const moveModule = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModuleDocument,\n variables: {\n module,\n packageId: pkg,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n let hasMoreFriends = moveModule.friends?.pageInfo.hasNextPage ?? false;\n let hasMoreFunctions = moveModule.functions?.pageInfo.hasNextPage ?? false;\n let hasMoreStructs = moveModule.structs?.pageInfo.hasNextPage ?? false;\n let hasMoreEnums = moveModule.enums?.pageInfo.hasNextPage ?? false;\n let afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n let afterEnums = moveModule.enums?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions || hasMoreEnums) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateMoveModuleListsDocument,\n variables: {\n module,\n packageId: pkg,\n hasMoreFriends,\n hasMoreFunctions,\n hasMoreStructs,\n hasMoreEnums,\n afterFriends,\n afterFunctions,\n afterStructs,\n afterEnums,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n moveModule.friends.nodes.push(...(page.friends?.nodes ?? []));\n moveModule.functions?.nodes.push(...(page.functions?.nodes ?? []));\n moveModule.structs?.nodes.push(...(page.structs?.nodes ?? []));\n moveModule.enums?.nodes.push(...(page.enums?.nodes ?? []));\n hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n hasMoreEnums = page.enums?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.pageInfo.endCursor;\n afterEnums = page.enums?.pageInfo.endCursor;\n }\n\n return mapNormalizedMoveModule(moveModule, normalizeIotaAddress(pkg));\n },\n async getNormalizedMoveStruct(transport, [pkg, module, struct]) {\n const moveStruct = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveStructDocument,\n variables: {\n packageId: pkg,\n module,\n struct,\n },\n },\n (data) => data.object?.asMovePackage?.module?.struct,\n );\n\n return mapNormalizedMoveStruct(moveStruct);\n },\n async getOwnedObjects(transport, [owner, { filter: inputFilter, options }, cursor, limit]) {\n let filter: ObjectFilter | undefined;\n let typeFilter: string | undefined;\n\n if (inputFilter) {\n if ('Package' in inputFilter) {\n typeFilter = inputFilter.Package;\n } else if ('MoveModule' in inputFilter) {\n typeFilter = `${inputFilter.MoveModule.package}::${inputFilter.MoveModule.module}`;\n } else if ('StructType' in inputFilter) {\n typeFilter = inputFilter.StructType;\n }\n\n filter = {\n objectIds:\n 'ObjectIds' in inputFilter\n ? inputFilter.ObjectIds\n : 'ObjectId' in inputFilter\n ? [inputFilter.ObjectId]\n : undefined,\n type: typeFilter,\n owner:\n 'ObjectOwner' in inputFilter\n ? inputFilter.ObjectOwner\n : 'AddressOwner' in inputFilter\n ? inputFilter.AddressOwner\n : undefined,\n };\n\n // GraphQL's ObjectFilter doesn't support complex filter composition or version filtering.\n const unsupportedFilters = ['MatchAll', 'MatchAny', 'MatchNone', 'Version'];\n\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in inputFilter) {\n throw new UnsupportedParamError('getOwnedObjects', unsupportedFilter);\n }\n }\n }\n\n const { nodes: objects, pageInfo } = await transport.graphqlQuery(\n {\n query: GetOwnedObjectsDocument,\n variables: {\n owner,\n limit,\n cursor,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n filter,\n },\n },\n (data) => data.address?.objects,\n );\n\n return {\n hasNextPage: pageInfo.hasNextPage,\n nextCursor: pageInfo.endCursor,\n data: objects.map((object) => ({\n data: mapGraphQLMoveObjectToRpcObject(object, options ?? {}),\n })),\n };\n },\n async getObject(transport, [id, options]) {\n try {\n const object = await transport.graphqlQuery(\n {\n query: GetObjectDocument,\n variables: {\n id,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n },\n (data) => data.object,\n );\n\n return {\n data: mapGraphQLObjectToRpcObject(object, options ?? {}),\n };\n } catch (_) {\n return {\n error: {\n code: 'notExists',\n object_id: id,\n },\n };\n }\n },\n async tryGetPastObject(transport, [id, version, options]) {\n const data = await transport.graphqlQuery({\n query: TryGetPastObjectDocument,\n variables: {\n id,\n version,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n });\n\n if (!data.current) {\n return {\n details: id,\n status: 'ObjectNotExists',\n };\n }\n\n if (!data.object) {\n return data.current.version < Number(version)\n ? {\n status: 'VersionTooHigh',\n details: {\n asked_version: String(version),\n latest_version: String(data.current.version),\n object_id: data.current.address,\n },\n }\n : {\n status: 'VersionNotFound',\n details: [data.current.address, String(version)],\n };\n }\n\n return {\n status: 'VersionFound',\n details: mapGraphQLObjectToRpcObject(data.object, options ?? {}),\n };\n },\n async multiGetObjects(transport, [ids, options]) {\n const objects = await transport.graphqlQuery(\n {\n query: MultiGetObjectsDocument,\n variables: {\n ids,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n limit: ids.length,\n },\n },\n (data) => data.objects?.nodes,\n );\n\n return objects.map((object) => ({\n data: mapGraphQLObjectToRpcObject(object, options ?? {}),\n }));\n },\n async queryTransactionBlocks(transport, [{ filter, options }, cursor, limit = 20, descending]) {\n const pagination: Partial<QueryTransactionBlocksQueryVariables> = descending\n ? {\n last: limit,\n before: cursor,\n }\n : {\n first: limit,\n after: cursor,\n };\n\n const unsupportedFilters = ['FromOrToAddress', 'FromAndToAddress', 'TransactionKindIn'];\n\n if (filter) {\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in filter) {\n throw new UnsupportedParamError('queryTransactionBlocks', unsupportedFilter);\n }\n }\n }\n\n // Map transaction kind filter from jsonRPC to graphql\n let graphqlTransactionKindFilter: TransactionBlockKindInput | undefined;\n if ('TransactionKind' in filter) {\n switch (filter.TransactionKind as IotaTransactionKind) {\n case 'ProgrammableTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.ProgrammableTx;\n break;\n case 'Genesis':\n graphqlTransactionKindFilter = TransactionBlockKindInput.Genesis;\n break;\n case 'ConsensusCommitPrologueV1':\n graphqlTransactionKindFilter =\n TransactionBlockKindInput.ConsensusCommitPrologueV1;\n break;\n case 'RandomnessStateUpdate':\n graphqlTransactionKindFilter = TransactionBlockKindInput.RandomnessStateUpdate;\n break;\n case 'EndOfEpochTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.EndOfEpochTx;\n break;\n case 'SystemTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.SystemTx;\n break;\n }\n }\n\n const { nodes: transactionBlocks, pageInfo } = await transport.graphqlQuery(\n {\n query: QueryTransactionBlocksDocument,\n variables: {\n ...pagination,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n filter: filter\n ? {\n atCheckpoint:\n 'Checkpoint' in filter\n ? Number.parseInt(filter.Checkpoint)\n : undefined,\n function:\n 'MoveFunction' in filter\n ? `${filter.MoveFunction.package}::${filter.MoveFunction.module}::${filter.MoveFunction.function}`\n : undefined,\n inputObject: 'InputObject' in filter ? filter.InputObject : undefined,\n changedObject:\n 'ChangedObject' in filter ? filter.ChangedObject : undefined,\n signAddress: 'FromAddress' in filter ? filter.FromAddress : undefined,\n recvAddress: 'ToAddress' in filter ? filter.ToAddress : undefined,\n kind: graphqlTransactionKindFilter,\n }\n : {},\n },\n },\n (data) => data.transactionBlocks,\n );\n\n for (const transactionBlock of transactionBlocks) {\n await paginateTransactionBlockLists(transport, transactionBlock);\n }\n\n if (pagination.last) {\n transactionBlocks.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: pagination.last ? pageInfo.startCursor : pageInfo.endCursor,\n data: transactionBlocks.map((transactionBlock) =>\n mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options ?? {}),\n ),\n };\n },\n async getTransactionBlock(transport, [digest, options]) {\n const transactionBlock = await transport.graphqlQuery(\n {\n query: GetTransactionBlockDocument,\n variables: {\n digest,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n },\n },\n (data) => data.transactionBlock,\n );\n\n await paginateTransactionBlockLists(transport, transactionBlock);\n\n return mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options);\n },\n\n async multiGetTransactionBlocks(transport, [digests, options]) {\n const transactionBlocks = await transport.graphqlQuery(\n {\n query: MultiGetTransactionBlocksDocument,\n variables: {\n digests: digests,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showEffects,\n showRawInput: options?.showRawInput,\n limit: digests.length,\n },\n },\n (data) => data.transactionBlocks?.nodes,\n );\n\n for (const transactionBlock of transactionBlocks) {\n await paginateTransactionBlockLists(transport, transactionBlock);\n }\n\n return transactionBlocks.map((transactionBlock) =>\n mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options),\n );\n },\n async getTotalTransactionBlocks(transport): Promise<bigint> {\n return transport.graphqlQuery(\n {\n query: GetTotalTransactionBlocksDocument,\n },\n (data) => BigInt(data.checkpoint?.networkTotalTransactions!),\n );\n },\n async getReferenceGasPrice(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetReferenceGasPriceDocument,\n variables: {},\n },\n (data) => data.epoch,\n );\n\n return BigInt(epoch.referenceGasPrice);\n },\n async getStakes(transport, [owner]) {\n const stakes = await transport.graphqlQuery(\n {\n query: GetStakesDocument,\n variables: {\n owner,\n },\n },\n (data) => data.address?.stakedIotas?.nodes,\n );\n\n return mapGraphQLStakeToRpcStake(stakes);\n },\n async getStakesByIds(transport, [stakedIotaIds]) {\n const stakes = await transport.graphqlQuery(\n {\n query: GetStakesByIdsDocument,\n variables: {\n ids: stakedIotaIds,\n },\n },\n (data) =>\n data.objects?.nodes\n .map((node) => node?.asMoveObject?.asStakedIota!)\n .filter(Boolean),\n );\n\n return mapGraphQLStakeToRpcStake(stakes);\n },\n async getLatestIotaSystemStateV2(transport) {\n const systemState = await transport.graphqlQuery(\n {\n query: GetLatestIotaSystemStateDocument,\n },\n (data) => data.epoch,\n );\n\n // fetch all active validators\n let hasMoreActiveValidators =\n systemState.validatorSet?.activeValidators?.pageInfo.hasNextPage ?? false;\n let afterActiveValidators = systemState.validatorSet?.activeValidators?.pageInfo.endCursor;\n while (hasMoreActiveValidators) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: systemState.epochId,\n after: afterActiveValidators,\n },\n },\n (data) => data.epoch,\n );\n systemState.validatorSet?.activeValidators?.nodes.push(\n ...(page.validatorSet?.activeValidators?.nodes ?? []),\n );\n hasMoreActiveValidators =\n page.validatorSet?.activeValidators?.pageInfo.hasNextPage ?? false;\n afterActiveValidators = page.validatorSet?.activeValidators?.pageInfo.endCursor;\n }\n\n // fetch all committee members\n let hasMoreCommitteeMembers =\n systemState.validatorSet?.committeeMembers?.pageInfo.hasNextPage ?? false;\n let afterCommitteeMembers = systemState.validatorSet?.committeeMembers?.pageInfo.endCursor;\n while (hasMoreCommitteeMembers) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: systemState.epochId,\n after: afterCommitteeMembers,\n },\n },\n (data) => data.epoch,\n );\n systemState.validatorSet?.committeeMembers?.nodes.push(\n ...(page.validatorSet?.committeeMembers?.nodes ?? []),\n );\n hasMoreCommitteeMembers =\n page.validatorSet?.committeeMembers?.pageInfo.hasNextPage ?? false;\n afterCommitteeMembers = page.validatorSet?.committeeMembers?.pageInfo.endCursor;\n }\n\n return {\n V2: {\n activeValidators: systemState.validatorSet?.activeValidators?.nodes.map(\n mapGraphQlValidatorToRpcValidator,\n )!,\n committeeMembers: systemState.validatorSet?.committeeMembers?.nodes?.map(\n (_, index) => index.toString(),\n )!,\n atRiskValidators: systemState.validatorSet?.activeValidators.nodes\n ?.filter((validator) => validator.atRisk)\n .map((validator) => [\n validator.address.address!,\n validator.atRisk!.toString(),\n ])!,\n epoch: String(systemState.epochId),\n epochDurationMs: String(\n new Date(systemState.endTimestamp).getTime() -\n new Date(systemState.startTimestamp).getTime(),\n ),\n epochStartTimestampMs: String(new Date(systemState.startTimestamp).getTime()),\n inactivePoolsSize: String(systemState.validatorSet?.inactivePoolsSize),\n iotaTotalSupply: String(systemState.iotaTotalSupply),\n iotaTreasuryCapId: String(systemState.iotaTreasuryCapId),\n maxValidatorCount: String(systemState.systemParameters?.maxValidatorCount),\n minValidatorCount: String(systemState.systemParameters?.minValidatorCount),\n minValidatorJoiningStake: String(\n systemState.systemParameters?.minValidatorJoiningStake,\n ),\n pendingActiveValidatorsSize: String(\n systemState.validatorSet?.pendingActiveValidatorsSize,\n ),\n pendingRemovals:\n systemState.validatorSet?.pendingRemovals?.map((idx) => String(idx)) ?? [],\n protocolVersion: String(systemState.protocolConfigs?.protocolVersion),\n referenceGasPrice: String(systemState.referenceGasPrice),\n safeMode: systemState.safeMode?.enabled!,\n safeModeComputationCharges: String(\n systemState.safeMode?.gasSummary?.computationCost,\n ),\n safeModeComputationChargesBurned: String(\n systemState.safeMode?.gasSummary?.computationCostBurned,\n ),\n safeModeNonRefundableStorageFee: String(\n systemState.safeMode?.gasSummary?.nonRefundableStorageFee,\n ),\n safeModeStorageRebates: String(systemState.safeMode?.gasSummary?.storageRebate),\n safeModeStorageCharges: String(systemState.safeMode?.gasSummary?.storageCost),\n stakingPoolMappingsSize: String(systemState.validatorSet?.stakingPoolMappingsSize),\n storageFundNonRefundableBalance: String(\n systemState.storageFund?.nonRefundableBalance,\n ),\n storageFundTotalObjectStorageRebates: String(\n systemState.storageFund?.totalObjectStorageRebates,\n ),\n systemStateVersion: String(systemState.systemStateVersion),\n totalStake: systemState.validatorSet?.totalStake,\n validatorCandidatesSize:\n systemState.validatorSet?.validatorCandidatesSize?.toString()!,\n validatorLowStakeGracePeriod:\n systemState.systemParameters?.validatorLowStakeGracePeriod,\n validatorLowStakeThreshold:\n systemState.systemParameters?.validatorLowStakeThreshold,\n validatorReportRecords: [], // TODO\n validatorVeryLowStakeThreshold:\n systemState.systemParameters?.validatorVeryLowStakeThreshold,\n validatorCandidatesId: systemState.validatorSet?.validatorCandidatesId,\n inactivePoolsId: systemState.validatorSet?.inactivePoolsId,\n pendingActiveValidatorsId: systemState.validatorSet?.pendingActiveValidatorsId,\n stakingPoolMappingsId: systemState.validatorSet?.stakingPoolMappingsId,\n },\n };\n },\n async queryEvents(transport, [query, cursor, limit, descending]) {\n const pagination: Partial<QueryEventsQueryVariables> = descending\n ? { last: limit, before: cursor as never }\n : { first: limit, after: cursor as never };\n\n const filter: QueryEventsQueryVariables['filter'] = {\n sender: 'Sender' in query ? query.Sender : undefined,\n transactionDigest: 'Transaction' in query ? query.Transaction : undefined,\n eventType: 'MoveEventType' in query ? query.MoveEventType : undefined,\n emittingModule:\n 'MoveModule' in query\n ? `${query.MoveModule.package}::${query.MoveModule.module}`\n : undefined,\n };\n\n if ('MoveEventType' in query) {\n filter.eventType = query.MoveEventType;\n } else if ('MoveEventModule' in query) {\n filter.eventType = `${query.MoveEventModule.package}::${query.MoveEventModule.module}`;\n }\n\n const unsupportedFilters = [\n 'Package',\n 'MoveEventField',\n 'Any',\n 'All',\n 'And',\n 'Or',\n 'TimeRange',\n ];\n\n if (query) {\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in query) {\n throw new UnsupportedParamError('queryEvents', unsupportedFilter);\n }\n }\n }\n\n const { nodes: events, pageInfo } = await transport.graphqlQuery(\n {\n query: QueryEventsDocument,\n variables: {\n ...pagination,\n filter,\n },\n },\n (data) => data.events,\n );\n\n if (pagination.last) {\n events.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: (pagination.last ? pageInfo.startCursor : pageInfo.endCursor) as never,\n data: events.map((event) => ({\n bcs: event.bcs,\n bcsEncoding: 'base64',\n id: {\n eventSeq: '', // TODO\n txDigest: '', // TODO\n },\n packageId: event.sendingModule?.package.address!,\n parsedJson: event.json,\n sender: event.sender?.address,\n timestampMs: new Date(event.timestamp).getTime().toString(),\n transactionModule: `${event.sendingModule?.package.address}::${event.sendingModule?.name}`,\n type: toShortTypeString(event.type?.repr)!,\n })),\n };\n },\n async devInspectTransactionBlock(transport, [sender, devInspectTxBytes, gasPrice]) {\n const { transaction, error, results } = await transport.graphqlQuery(\n {\n query: DevInspectTransactionBlockDocument,\n variables: {\n txBytes: devInspectTxBytes,\n txMeta: {\n gasPrice: Number.parseInt(gasPrice),\n sender: sender,\n },\n showEffects: true,\n showEvents: true,\n },\n },\n (data) => data.dryRunTransactionBlock,\n );\n\n if (!transaction) {\n throw new Error('Unexpected error during dry run');\n }\n\n const result = mapGraphQLTransactionBlockToRpcTransactionBlock(transaction, {\n showEffects: true,\n showEvents: true,\n });\n\n return {\n error,\n effects: result.effects!,\n events: result.events!,\n results: results?.map((result) => ({\n mutableReferenceOutputs: result.mutatedReferences?.map(\n (ref): [IotaArgument, number[], string] => [\n ref.input.__typename === 'GasCoin'\n ? 'GasCoin'\n : ref.input.__typename === 'Input'\n ? {\n Input: ref.input.inputIndex,\n }\n : typeof ref.input.resultIndex === 'number'\n ? {\n NestedResult: [ref.input.cmd, ref.input.resultIndex!] as [\n number,\n number,\n ],\n }\n : {\n Result: ref.input.cmd,\n },\n Array.from(fromBase64(ref.bcs)),\n toShortTypeString(ref.type.repr),\n ],\n ),\n returnValues: result.returnValues?.map((value) => [\n Array.from(fromBase64(value.bcs)),\n toShortTypeString(value.type.repr),\n ]),\n })),\n };\n },\n async getDynamicFields(transport, [parentId, cursor, limit]) {\n const { nodes: fields, pageInfo } = await transport.graphqlQuery(\n {\n query: GetDynamicFieldsDocument,\n variables: {\n parentId,\n first: limit,\n cursor,\n },\n },\n (data) => data.owner?.dynamicFields,\n );\n\n return {\n data: fields.map((field) => ({\n bcsName: field.name?.bcs,\n bcsEncoding: 'base64',\n digest: (field.value?.__typename === 'MoveObject'\n ? field.value.digest\n : undefined)!,\n name: {\n type: toShortTypeString(field.name?.type.repr)!,\n value: field.name?.json,\n },\n objectId:\n field.value?.__typename === 'MoveObject' ? field.value.address : undefined,\n objectType: (field.value?.__typename === 'MoveObject'\n ? field.value.contents?.type.repr\n : field.value?.type.repr)!,\n type: field.value?.__typename === 'MoveObject' ? 'DynamicObject' : 'DynamicField',\n version: (field.value?.__typename === 'MoveObject'\n ? field.value.version\n : undefined) as unknown as string,\n })),\n nextCursor: pageInfo.endCursor ?? null,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n async getDynamicFieldObjectV2(transport, inputs) {\n return await getDynamicFieldObject!(transport, inputs);\n },\n /**\n * @deprecated The V1 of this method is deprecated, use `getDynamicFieldObjectV2` instead.\n */\n async getDynamicFieldObject(transport, [parentId, name]) {\n return await getDynamicFieldObject!(transport, [\n parentId,\n name,\n {\n // These are the same defaults as in the JSON RPC.\n showBcs: true,\n showContent: true,\n showDisplay: true,\n showOwner: true,\n showPreviousTransaction: true,\n showStorageRebate: true,\n showType: true,\n },\n ]);\n },\n\n async executeTransactionBlock(transport, [txBytes, signatures, options]) {\n const { effects, errors } = await transport.graphqlQuery(\n {\n query: ExecuteTransactionBlockDocument,\n variables: {\n txBytes,\n signatures,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n },\n },\n (data) => data.executeTransactionBlock,\n );\n\n if (!effects?.transactionBlock) {\n const tx = Transaction.from(fromBase64(txBytes));\n return { errors: errors ?? undefined, digest: await tx.getDigest() };\n }\n\n await paginateTransactionBlockLists(transport, effects.transactionBlock);\n\n return mapGraphQLTransactionBlockToRpcTransactionBlock(\n effects.transactionBlock,\n options,\n errors,\n );\n },\n async dryRunTransactionBlock(transport, [txBytes]) {\n const tx = Transaction.from(fromBase64(txBytes));\n const { transaction, error } = await transport.graphqlQuery(\n {\n query: DryRunTransactionBlockDocument,\n variables: {\n txBytes,\n showBalanceChanges: true,\n showEffects: true,\n showEvents: true,\n showInput: true,\n showObjectChanges: true,\n },\n },\n (data) => data.dryRunTransactionBlock,\n );\n\n if (error || !transaction) {\n throw new Error(error ?? 'Unexpected error during dry run');\n }\n\n const result = mapGraphQLTransactionBlockToRpcTransactionBlock(\n { ...transaction, digest: await tx.getDigest() },\n {\n showBalanceChanges: true,\n showEffects: true,\n showEvents: true,\n showInput: true,\n showObjectChanges: true,\n },\n );\n\n return {\n input: result.transaction?.data!,\n balanceChanges: result.balanceChanges!,\n effects: result.effects!,\n events: result.events!,\n objectChanges: result.objectChanges!,\n };\n },\n async getLatestCheckpointSequenceNumber(transport) {\n const sequenceNumber = await transport.graphqlQuery(\n {\n query: GetLatestCheckpointSequenceNumberDocument,\n },\n (data) => data.checkpoint?.sequenceNumber,\n );\n\n return sequenceNumber.toString();\n },\n async getCheckpoint(transport, [id]) {\n const checkpoint = await transport.graphqlQuery(\n {\n query: GetCheckpointDocument,\n variables: {\n id:\n typeof id === 'number' || isNumericString(id)\n ? {\n sequenceNumber: Number.parseInt(id.toString(), 10),\n }\n : {\n digest: id,\n },\n },\n },\n (data) => data.checkpoint,\n );\n\n await paginateCheckpointLists(transport, checkpoint);\n return mapGraphQLCheckpointToRpcCheckpoint(checkpoint);\n },\n async getCheckpoints(transport, [cursor, limit, descendingOrder]) {\n const pagination: Partial<QueryEventsQueryVariables> = descendingOrder\n ? { last: limit, before: cursor as never }\n : { first: limit, after: cursor as never };\n\n const { nodes: checkpoints, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCheckpointsDocument,\n variables: {\n ...pagination,\n },\n },\n (data) => data.checkpoints,\n );\n\n for (const checkpoint of checkpoints) {\n await paginateCheckpointLists(transport, checkpoint);\n }\n\n if (pagination.last) {\n checkpoints.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: (pagination.last ? pageInfo.startCursor : pageInfo.endCursor) as never,\n data: checkpoints.map((checkpoint) => mapGraphQLCheckpointToRpcCheckpoint(checkpoint)),\n };\n },\n async getCommitteeInfo(transport, [epoch]) {\n const { validatorSet, epochId } = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: epoch ? Number.parseInt(epoch) : undefined,\n },\n },\n (data) => data.epoch,\n );\n\n let hasNextPage = validatorSet?.committeeMembers?.pageInfo.hasNextPage;\n let after = validatorSet?.committeeMembers?.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: epoch ? Number.parseInt(epoch) : undefined,\n after,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n\n validatorSet?.committeeMembers.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo.hasNextPage;\n after = page.pageInfo.endCursor;\n }\n\n return {\n epoch: epochId.toString(),\n validators: validatorSet?.committeeMembers?.nodes.map((val) => [\n val.credentials?.authorityPubKey!,\n String(val.votingPower),\n ])!,\n };\n },\n async getCurrentEpoch(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetCurrentEpochDocument,\n },\n (data) => data.epoch,\n );\n\n // fetch all active validators\n let hasNextPageActiveValidators =\n epoch.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n let afterActiveValidators = epoch.validatorSet?.activeValidators?.pageInfo.endCursor;\n while (hasNextPageActiveValidators) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after: afterActiveValidators,\n },\n },\n (data) => data.epoch?.validatorSet?.activeValidators,\n );\n epoch.validatorSet?.activeValidators?.nodes.push(...page.nodes);\n hasNextPageActiveValidators = page.pageInfo.hasNextPage;\n afterActiveValidators = page.pageInfo.endCursor;\n }\n // fetch all committee members\n let hasNextPageCommitteeMembers =\n epoch.validatorSet?.committeeMembers?.pageInfo.hasNextPage;\n let afterCommitteeMembers = epoch.validatorSet?.committeeMembers?.pageInfo.endCursor;\n while (hasNextPageCommitteeMembers) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after: afterCommitteeMembers,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n epoch.validatorSet?.committeeMembers?.nodes.push(...page.nodes);\n hasNextPageCommitteeMembers = page.pageInfo.hasNextPage;\n afterCommitteeMembers = page.pageInfo.endCursor;\n }\n\n // Committee validators: each element is an index pointing to `validators`\n const validatorsAddresses =\n epoch.validatorSet?.activeValidators?.nodes.map((val) => val.address.address!) ?? [];\n const committeeMembersAddresses =\n epoch.validatorSet?.committeeMembers?.nodes.map((val) => val.address.address!) ?? [];\n const committeeValidatorsIndexes = committeeMembersAddresses.map((val) =>\n validatorsAddresses.indexOf(val)?.toString(),\n );\n\n return {\n epoch: String(epoch.epochId),\n validators: epoch.validatorSet?.activeValidators?.nodes.map(\n mapGraphQlValidatorToRpcValidator,\n )!,\n committeeMembers: committeeValidatorsIndexes,\n epochTotalTransactions: '0', // TODO\n firstCheckpointId: epoch.firstCheckpoint?.nodes[0]?.sequenceNumber.toString()!,\n endOfEpochInfo: null,\n referenceGasPrice: epoch.referenceGasPrice,\n epochStartTimestamp: new Date(epoch.startTimestamp).getTime().toString(),\n };\n },\n async getValidatorsApy(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetValidatorsApyDocument,\n },\n (data) => data.epoch,\n );\n\n let hasNextPage = epoch.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n let after = epoch.validatorSet?.activeValidators?.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after,\n },\n },\n (data) => data.epoch,\n );\n\n epoch.validatorSet?.activeValidators?.nodes.push(\n ...(page.validatorSet?.activeValidators?.nodes ?? []),\n );\n hasNextPage = page.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n after = page.validatorSet?.activeValidators?.pageInfo.endCursor;\n }\n\n return {\n epoch: String(epoch.epochId),\n apys: epoch.validatorSet?.activeValidators?.nodes.map((validator) => ({\n address: validator.address.address!,\n apy: (typeof validator.apy === 'number' ? validator.apy / 100 : null) as number,\n }))!,\n };\n },\n async getChainIdentifier(transport): Promise<string> {\n const identifier = await transport.graphqlQuery(\n {\n query: GetChainIdentifierDocument,\n },\n (data) => data.chainIdentifier,\n );\n\n return identifier;\n },\n async getProtocolConfig(transport, [version]) {\n const protocolConfig = await transport.graphqlQuery(\n {\n query: GetProtocolConfigDocument,\n variables: {\n protocolVersion: version ? Number.parseInt(version) : undefined,\n },\n },\n (data) => data.protocolConfig,\n );\n\n const featureFlags: Record<string, boolean> = {};\n const attributes: Record<string, ProtocolConfigValue | null> = {};\n\n const configTypeMap: Record<string, string> = {\n max_arguments: 'u32',\n max_gas_payment_objects: 'u32',\n max_modules_in_publish: 'u32',\n max_programmable_tx_commands: 'u32',\n max_pure_argument_size: 'u32',\n max_type_argument_depth: 'u32',\n max_type_arguments: 'u32',\n move_binary_format_version: 'u32',\n min_move_binary_format_version: 'u32',\n random_beacon_reduction_allowed_delta: 'u16',\n random_beacon_dkg_timeout_round: 'u32',\n random_beacon_reduction_lower_bound: 'u32',\n scoring_decision_cutoff_value: 'f64',\n scoring_decision_mad_divisor: 'f64',\n group_ops_bls12381_msm_max_len: 'u32',\n binary_module_handles: 'u16',\n binary_struct_handles: 'u16',\n binary_function_handles: 'u16',\n binary_function_instantiations: 'u16',\n binary_signatures: 'u16',\n binary_constant_pool: 'u16',\n binary_identifiers: 'u16',\n binary_address_identifiers: 'u16',\n binary_struct_defs: 'u16',\n binary_struct_def_instantiations: 'u16',\n binary_function_defs: 'u16',\n binary_field_handles: 'u16',\n binary_field_instantiations: 'u16',\n binary_friend_decls: 'u16',\n max_package_dependencies: 'u32',\n bridge_should_try_to_finalize_committee: 'bool',\n consensus_gc_depth: 'u32',\n scorer_version: 'u16',\n };\n\n for (const { key, value } of protocolConfig.configs) {\n attributes[key] =\n value === null\n ? null\n : ({\n [configTypeMap[key] ?? 'u64']: value,\n } as ProtocolConfigValue);\n }\n\n for (const { key, value } of protocolConfig.featureFlags) {\n featureFlags[key] = value;\n }\n\n return {\n maxSupportedProtocolVersion: protocolConfig.protocolVersion?.toString(),\n minSupportedProtocolVersion: '1',\n protocolVersion: protocolConfig.protocolVersion?.toString(),\n attributes,\n featureFlags,\n };\n },\n\n async isTransactionIndexedOnNode(transport, [digest]): Promise<boolean> {\n const isTransactionIndexedOnNode = await transport.graphqlQuery(\n {\n query: IsTransactionIndexedOnNodeDocument,\n variables: {\n digest,\n },\n },\n (data) => data.isTransactionIndexedOnNode,\n );\n return isTransactionIndexedOnNode;\n },\n\n async view(transport, [functionName, typeArgs, callArgs]): Promise<IotaMoveViewCallResults> {\n return await transport.graphqlQuery(\n {\n query: ViewDocument,\n variables: {\n functionName,\n typeArgs,\n arguments: callArgs,\n },\n },\n (data) => {\n if (data.moveViewCall.error) {\n return {\n executionError: data.moveViewCall.error,\n } as IotaMoveViewCallResults;\n } else {\n return {\n functionReturnValues: data.moveViewCall.results,\n } as IotaMoveViewCallResults;\n }\n },\n );\n },\n};\n\nexport class UnsupportedParamError extends Error {\n constructor(method: string, param: string) {\n super(`Parameter ${param} is not supported for ${method} in the GraphQL API`);\n }\n}\n\nexport class UnsupportedMethodError extends Error {\n constructor(method: string) {\n super(`Method ${method} is not supported in the GraphQL API`);\n }\n}\n\nasync function paginateTransactionBlockLists(\n transport: IotaClientGraphQLTransport,\n transactionBlock: Rpc_Transaction_FieldsFragment,\n) {\n let hasMoreEvents = transactionBlock.effects?.events?.pageInfo.hasNextPage ?? false;\n let hasMoreBalanceChanges =\n transactionBlock.effects?.balanceChanges?.pageInfo.hasNextPage ?? false;\n let hasMoreObjectChanges =\n transactionBlock.effects?.objectChanges?.pageInfo.hasNextPage ?? false;\n let afterEvents = transactionBlock.effects?.events?.pageInfo.endCursor;\n let afterBalanceChanges = transactionBlock.effects?.balanceChanges?.pageInfo.endCursor;\n let afterObjectChanges = transactionBlock.effects?.objectChanges?.pageInfo.endCursor;\n\n while (hasMoreEvents || hasMoreBalanceChanges || hasMoreObjectChanges) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateTransactionBlockListsDocument,\n variables: {\n digest: transactionBlock.digest!,\n afterEvents,\n afterBalanceChanges,\n afterObjectChanges,\n hasMoreEvents,\n hasMoreBalanceChanges,\n hasMoreObjectChanges,\n },\n },\n (data) => data.transactionBlock?.effects,\n );\n\n transactionBlock.effects?.events?.nodes.push(...(page.events?.nodes ?? []));\n transactionBlock.effects?.balanceChanges?.nodes.push(...(page.balanceChanges?.nodes ?? []));\n transactionBlock.effects?.objectChanges?.nodes.push(...(page.objectChanges?.nodes ?? []));\n hasMoreEvents = page.events?.pageInfo.hasNextPage ?? false;\n hasMoreBalanceChanges = page.balanceChanges?.pageInfo.hasNextPage ?? false;\n hasMoreObjectChanges = page.objectChanges?.pageInfo.hasNextPage ?? false;\n afterEvents = page.events?.pageInfo.endCursor;\n afterBalanceChanges = page.balanceChanges?.pageInfo.endCursor;\n afterObjectChanges = page.objectChanges?.pageInfo.endCursor;\n }\n}\n\nasync function paginateCheckpointLists(\n transport: IotaClientGraphQLTransport,\n checkpoint: Rpc_Checkpoint_FieldsFragment,\n) {\n let hasNextPage = checkpoint.transactionBlocks.pageInfo.hasNextPage;\n let after = checkpoint.transactionBlocks.pageInfo.endCursor;\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateCheckpointTransactionBlocksDocument,\n variables: {\n id: { digest: checkpoint.digest! },\n after,\n },\n },\n (data) => data.checkpoint?.transactionBlocks,\n );\n\n checkpoint.transactionBlocks.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo.hasNextPage;\n after = page.pageInfo.endCursor;\n }\n\n const endOfEpochTx = checkpoint.endOfEpoch.nodes[0];\n\n if (\n endOfEpochTx?.kind?.__typename === 'EndOfEpochTransaction' &&\n endOfEpochTx.kind?.transactions.nodes[0].__typename === 'ChangeEpochTransactionV2' &&\n endOfEpochTx.kind.transactions.nodes[0].epoch?.epochId\n ) {\n const validatorSet = endOfEpochTx.kind.transactions.nodes[0].epoch.validatorSet;\n let hasNextPage = validatorSet?.committeeMembers.pageInfo.hasNextPage;\n let after = validatorSet?.committeeMembers.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: endOfEpochTx.kind.transactions.nodes[0].epoch?.epochId,\n after,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n\n validatorSet?.committeeMembers.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo?.hasNextPage;\n after = page.pageInfo?.endCursor;\n }\n }\n}\n\nasync function getDynamicFieldObject(\n transport: IotaClientGraphQLTransport,\n [parentId, name, options]: any[],\n) {\n const nameLayout = await transport.graphqlQuery(\n {\n query: GetTypeLayoutDocument,\n variables: {\n type: name.type,\n },\n },\n (data) => data.type.layout,\n );\n\n const bcsName = mapJsonToBcs(name.value, nameLayout);\n\n const parent = await transport.graphqlQuery(\n {\n query: GetDynamicFieldObjectDocument,\n variables: {\n parentId: parentId,\n name: {\n type: name.type,\n bcs: bcsName,\n },\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n },\n (data) => {\n return data.owner?.dynamicObjectField?.value?.__typename === 'MoveObject'\n ? data.owner.dynamicObjectField.value.owner?.__typename === 'Parent'\n ? data.owner.dynamicObjectField.value.owner.parent\n : undefined\n : undefined;\n },\n );\n\n return {\n data: {\n content: parent.asMoveObject\n ? {\n dataType: 'moveObject' as const,\n ...(moveDataToRpcContent(\n parent.asMoveObject?.contents?.data!,\n parent.asMoveObject?.contents?.type.layout!,\n ) as {\n fields: {\n [key: string]: MoveValue;\n };\n type: string;\n }),\n }\n : undefined,\n digest: parent?.digest!,\n objectId: parent?.address,\n type: parent?.asMoveObject\n ? toShortTypeString(parent.asMoveObject.contents?.type.repr)\n : undefined,\n version: parent?.version.toString()!,\n storageRebate: parent.storageRebate,\n previousTransaction: parent.previousTransactionBlock?.digest,\n owner:\n parent.owner?.__typename === 'Parent'\n ? {\n ObjectOwner: parent.owner.parent?.address,\n }\n : undefined,\n },\n };\n}\n"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64 } from '@iota/bcs';\nimport type {\n MoveValue,\n ProtocolConfigValue,\n IotaArgument,\n IotaClient,\n IotaMoveNormalizedModule,\n IotaTransactionKind,\n IotaMoveViewCallResults,\n} from '@iota/iota-sdk/client';\nimport { Transaction } from '@iota/iota-sdk/transactions';\nimport {\n normalizeStructTag,\n normalizeIotaAddress,\n parseStructTag,\n IOTA_TYPE_ARG,\n} from '@iota/iota-sdk/utils';\n\nimport type {\n ObjectFilter,\n QueryEventsQueryVariables,\n QueryTransactionBlocksQueryVariables,\n Rpc_Checkpoint_FieldsFragment,\n Rpc_Transaction_FieldsFragment,\n} from './generated/queries.js';\nimport {\n DevInspectTransactionBlockDocument,\n DryRunTransactionBlockDocument,\n ExecuteTransactionBlockDocument,\n GetAllBalancesDocument,\n GetBalanceDocument,\n GetChainIdentifierDocument,\n GetCheckpointDocument,\n GetCheckpointsDocument,\n GetCoinMetadataDocument,\n GetCoinsDocument,\n GetCommitteeInfoDocument,\n GetCurrentEpochDocument,\n GetDynamicFieldObjectDocument,\n GetDynamicFieldsDocument,\n GetLatestCheckpointSequenceNumberDocument,\n GetLatestIotaSystemStateDocument,\n GetMoveFunctionArgTypesDocument,\n GetNormalizedMoveFunctionDocument,\n GetNormalizedMoveModuleDocument,\n GetNormalizedMoveModulesByPackageDocument,\n GetNormalizedMoveStructDocument,\n GetObjectDocument,\n GetOwnedObjectsDocument,\n GetProtocolConfigDocument,\n GetReferenceGasPriceDocument,\n GetStakesByIdsDocument,\n GetStakesDocument,\n GetTotalSupplyDocument,\n GetTotalTransactionBlocksDocument,\n GetTransactionBlockDocument,\n GetTypeLayoutDocument,\n GetValidatorsApyDocument,\n IsTransactionIndexedOnNodeDocument,\n MultiGetObjectsDocument,\n MultiGetTransactionBlocksDocument,\n PaginateCheckpointTransactionBlocksDocument,\n PaginateEpochValidatorsDocument,\n PaginateMoveModuleListsDocument,\n PaginateTransactionBlockListsDocument,\n QueryEventsDocument,\n QueryTransactionBlocksDocument,\n TransactionBlockKindInput,\n TryGetPastObjectDocument,\n ViewDocument,\n} from './generated/queries.js';\nimport { mapJsonToBcs } from './mappers/bcs.js';\nimport { mapGraphQLCheckpointToRpcCheckpoint } from './mappers/checkpoint.js';\nimport {\n mapNormalizedMoveFunction,\n mapNormalizedMoveModule,\n mapNormalizedMoveStruct,\n moveDataToRpcContent,\n} from './mappers/move.js';\nimport { mapGraphQLMoveObjectToRpcObject, mapGraphQLObjectToRpcObject } from './mappers/object.js';\nimport { mapGraphQLStakeToRpcStake } from './mappers/stakes.js';\nimport { mapGraphQLTransactionBlockToRpcTransactionBlock } from './mappers/transaction-block.js';\nimport { isNumericString, toShortTypeString } from './mappers/util.js';\nimport { mapGraphQlValidatorToRpcValidator } from './mappers/validator.js';\nimport type { IotaClientGraphQLTransport } from './transport.js';\n\ninterface ResponseTypes {\n getRpcApiVersion: {\n info: { version?: string };\n };\n}\n\nexport const RPC_METHODS: {\n [K in keyof IotaClient as IotaClient[K] extends (...args: any[]) => Promise<any>\n ? K\n : never]?: IotaClient[K] extends (...args: any[]) => infer R\n ? (\n transport: IotaClientGraphQLTransport,\n inputs: any[],\n ) => K extends keyof ResponseTypes ? Promise<ResponseTypes[K]> : R\n : never;\n} = {\n async getRpcApiVersion(transport) {\n const res = await transport.graphqlRequest({\n query: 'query { __typename }',\n variables: {},\n });\n\n if (!res.ok) {\n throw new Error('Failed to fetch');\n }\n\n return {\n info: {\n version: res.headers.get('x-iota-rpc-version') ?? undefined,\n },\n };\n },\n\n async getCoins(transport, [owner, coinType, cursor, limit]) {\n const { nodes: coins, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCoinsDocument,\n variables: {\n owner,\n type: coinType,\n cursor: cursor,\n first: limit,\n },\n },\n (data) => data.address?.coins,\n );\n\n return {\n data: coins.map((coin) => ({\n balance: coin.coinBalance,\n coinObjectId: coin.address,\n coinType: toShortTypeString(\n normalizeStructTag(parseStructTag(coin.contents?.type.repr!).typeParams[0]),\n ),\n digest: coin.digest!,\n previousTransaction: coin.previousTransactionBlock?.digest!,\n version: String(coin.version!),\n })),\n nextCursor: pageInfo.endCursor,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n\n async getAllCoins(transport, inputs) {\n const { nodes: coins, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCoinsDocument,\n variables: {\n owner: inputs[0],\n cursor: inputs[1],\n first: inputs[2],\n },\n },\n (data) => data.address?.coins,\n );\n\n return {\n data: coins.map((coin) => ({\n balance: coin.coinBalance,\n coinObjectId: coin.address,\n coinType: toShortTypeString(\n normalizeStructTag(parseStructTag(coin.contents?.type.repr!).typeParams[0]),\n ),\n digest: coin.digest!,\n previousTransaction: coin.previousTransactionBlock?.digest!,\n version: String(coin.version!),\n })),\n nextCursor: pageInfo.endCursor,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n\n async getBalance(transport, inputs) {\n try {\n const balance = await transport.graphqlQuery(\n {\n query: GetBalanceDocument,\n variables: {\n owner: inputs[0],\n type: inputs[1],\n },\n },\n (data) => data.address?.balance,\n );\n\n return {\n coinType: toShortTypeString(balance.coinType?.repr!) || IOTA_TYPE_ARG,\n coinObjectCount: balance.coinObjectCount || 0,\n totalBalance: balance.totalBalance || 0,\n };\n } catch (error) {\n console.warn('GraphQL getBalance failed, falling back to default values:', error);\n return {\n coinType: normalizeStructTag(inputs[1] ?? IOTA_TYPE_ARG),\n coinObjectCount: 0,\n totalBalance: '0',\n };\n }\n },\n\n async getAllBalances(transport, inputs) {\n const balances = await transport.graphqlQuery(\n {\n query: GetAllBalancesDocument,\n variables: {\n owner: inputs[0],\n },\n },\n (data) => data.address?.balances?.nodes,\n );\n\n return balances.map((balance) => ({\n coinType: toShortTypeString(balance.coinType?.repr!),\n coinObjectCount: balance.coinObjectCount!,\n totalBalance: balance.totalBalance,\n }));\n },\n async getCoinMetadata(transport, inputs) {\n const metadata = await transport.graphqlQuery(\n {\n query: GetCoinMetadataDocument,\n variables: {\n coinType: inputs[0],\n },\n },\n (data) => data.coinMetadata,\n );\n\n return {\n decimals: metadata.decimals!,\n name: metadata.name!,\n symbol: metadata.symbol!,\n description: metadata.description!,\n iconUrl: metadata.iconUrl,\n id: metadata.address,\n };\n },\n async getTotalSupply(transport, inputs) {\n const metadata = await transport.graphqlQuery(\n {\n query: GetTotalSupplyDocument,\n variables: {\n coinType: inputs[0],\n },\n },\n (data) => data.coinMetadata,\n );\n\n return {\n value: BigInt(metadata.supply!).toString(),\n };\n },\n async getMoveFunctionArgTypes(transport, [pkg, module, fn]) {\n const moveModule = await transport.graphqlQuery(\n {\n query: GetMoveFunctionArgTypesDocument,\n variables: {\n module: module,\n packageId: pkg,\n function: fn,\n },\n },\n (data) => data.object?.asMovePackage?.module?.function?.parameters,\n );\n\n return moveModule.map((parameter) => {\n if (!parameter.signature.body.datatype) {\n return 'Pure';\n }\n\n return {\n Object:\n parameter.signature.ref === '&'\n ? 'ByImmutableReference'\n : parameter.signature.ref === '&mut'\n ? 'ByMutableReference'\n : 'ByValue',\n };\n });\n },\n async getNormalizedMoveFunction(transport, [pkg, module, fn]) {\n const moveFunction = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveFunctionDocument,\n variables: {\n module: module,\n packageId: pkg,\n function: fn,\n },\n },\n (data) => data.object?.asMovePackage?.module?.function,\n );\n\n return mapNormalizedMoveFunction(moveFunction);\n },\n async getNormalizedMoveModulesByPackage(transport, [pkg]) {\n const movePackage = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModulesByPackageDocument,\n variables: {\n packageId: pkg,\n },\n },\n (data) => data.object?.asMovePackage,\n );\n\n let hasNextPage = movePackage.modules?.pageInfo.hasNextPage ?? false;\n let cursor = movePackage.modules?.pageInfo.endCursor;\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModulesByPackageDocument,\n variables: {\n packageId: pkg,\n cursor,\n },\n },\n (data) => data.object?.asMovePackage,\n );\n\n movePackage.modules?.nodes.push(...(page.modules?.nodes ?? []));\n hasNextPage = page.modules?.pageInfo.hasNextPage ?? false;\n cursor = page.modules?.pageInfo.endCursor;\n }\n\n const address = toShortTypeString(movePackage.address);\n const modules: Record<string, IotaMoveNormalizedModule> = {};\n\n for (const moveModule of movePackage.modules?.nodes ?? []) {\n let hasMoreFriends = moveModule.friends?.pageInfo.hasNextPage ?? false;\n let hasMoreFunctions = moveModule.functions?.pageInfo.hasNextPage ?? false;\n let hasMoreStructs = moveModule.structs?.pageInfo.hasNextPage ?? false;\n let hasMoreEnums = moveModule.enums?.pageInfo.hasNextPage ?? false;\n let afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n let afterEnums = moveModule.enums?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions || hasMoreEnums) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateMoveModuleListsDocument,\n variables: {\n module: moveModule.name,\n packageId: pkg,\n hasMoreFriends,\n hasMoreFunctions,\n hasMoreStructs,\n hasMoreEnums,\n afterFriends,\n afterFunctions,\n afterStructs,\n afterEnums,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n moveModule.friends.nodes.push(...(page.friends?.nodes ?? []));\n moveModule.functions?.nodes.push(...(page.functions?.nodes ?? []));\n moveModule.structs?.nodes.push(...(page.structs?.nodes ?? []));\n moveModule.enums?.nodes.push(...(page.enums?.nodes ?? []));\n hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n hasMoreEnums = page.enums?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.pageInfo.endCursor;\n afterEnums = page.enums?.pageInfo.endCursor;\n }\n }\n\n movePackage.modules?.nodes.forEach((module) => {\n modules[module.name] = mapNormalizedMoveModule(module, address);\n });\n\n return modules;\n },\n async getNormalizedMoveModule(transport, [pkg, module]) {\n const moveModule = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveModuleDocument,\n variables: {\n module,\n packageId: pkg,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n let hasMoreFriends = moveModule.friends?.pageInfo.hasNextPage ?? false;\n let hasMoreFunctions = moveModule.functions?.pageInfo.hasNextPage ?? false;\n let hasMoreStructs = moveModule.structs?.pageInfo.hasNextPage ?? false;\n let hasMoreEnums = moveModule.enums?.pageInfo.hasNextPage ?? false;\n let afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n let afterEnums = moveModule.enums?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions || hasMoreEnums) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateMoveModuleListsDocument,\n variables: {\n module,\n packageId: pkg,\n hasMoreFriends,\n hasMoreFunctions,\n hasMoreStructs,\n hasMoreEnums,\n afterFriends,\n afterFunctions,\n afterStructs,\n afterEnums,\n },\n },\n (data) => data.object?.asMovePackage?.module,\n );\n\n moveModule.friends.nodes.push(...(page.friends?.nodes ?? []));\n moveModule.functions?.nodes.push(...(page.functions?.nodes ?? []));\n moveModule.structs?.nodes.push(...(page.structs?.nodes ?? []));\n moveModule.enums?.nodes.push(...(page.enums?.nodes ?? []));\n hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n hasMoreEnums = page.enums?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.pageInfo.endCursor;\n afterEnums = page.enums?.pageInfo.endCursor;\n }\n\n return mapNormalizedMoveModule(moveModule, normalizeIotaAddress(pkg));\n },\n async getNormalizedMoveStruct(transport, [pkg, module, struct]) {\n const moveStruct = await transport.graphqlQuery(\n {\n query: GetNormalizedMoveStructDocument,\n variables: {\n packageId: pkg,\n module,\n struct,\n },\n },\n (data) => data.object?.asMovePackage?.module?.struct,\n );\n\n return mapNormalizedMoveStruct(moveStruct);\n },\n async getOwnedObjects(transport, [owner, { filter: inputFilter, options }, cursor, limit]) {\n let filter: ObjectFilter | undefined;\n let typeFilter: string | undefined;\n\n if (inputFilter) {\n if ('Package' in inputFilter) {\n typeFilter = inputFilter.Package;\n } else if ('MoveModule' in inputFilter) {\n typeFilter = `${inputFilter.MoveModule.package}::${inputFilter.MoveModule.module}`;\n } else if ('StructType' in inputFilter) {\n typeFilter = inputFilter.StructType;\n }\n\n filter = {\n objectIds:\n 'ObjectIds' in inputFilter\n ? inputFilter.ObjectIds\n : 'ObjectId' in inputFilter\n ? [inputFilter.ObjectId]\n : undefined,\n type: typeFilter,\n owner:\n 'ObjectOwner' in inputFilter\n ? inputFilter.ObjectOwner\n : 'AddressOwner' in inputFilter\n ? inputFilter.AddressOwner\n : undefined,\n };\n\n // GraphQL's ObjectFilter doesn't support complex filter composition or version filtering.\n const unsupportedFilters = ['MatchAll', 'MatchAny', 'MatchNone', 'Version'];\n\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in inputFilter) {\n throw new UnsupportedParamError('getOwnedObjects', unsupportedFilter);\n }\n }\n }\n\n const { nodes: objects, pageInfo } = await transport.graphqlQuery(\n {\n query: GetOwnedObjectsDocument,\n variables: {\n owner,\n limit,\n cursor,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n filter,\n },\n },\n (data) => data.address?.objects,\n );\n\n return {\n hasNextPage: pageInfo.hasNextPage,\n nextCursor: pageInfo.endCursor,\n data: objects.map((object) => ({\n data: mapGraphQLMoveObjectToRpcObject(object, options ?? {}),\n })),\n };\n },\n async getObject(transport, [id, options]) {\n try {\n const object = await transport.graphqlQuery(\n {\n query: GetObjectDocument,\n variables: {\n id,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n },\n (data) => data.object,\n );\n\n return {\n data: mapGraphQLObjectToRpcObject(object, options ?? {}),\n };\n } catch (_) {\n return {\n error: {\n code: 'notExists',\n object_id: id,\n },\n };\n }\n },\n async tryGetPastObject(transport, [id, version, options]) {\n const data = await transport.graphqlQuery({\n query: TryGetPastObjectDocument,\n variables: {\n id,\n version,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n });\n\n if (!data.current) {\n return {\n details: id,\n status: 'ObjectNotExists',\n };\n }\n\n if (!data.object) {\n return data.current.version < Number(version)\n ? {\n status: 'VersionTooHigh',\n details: {\n asked_version: String(version),\n latest_version: String(data.current.version),\n object_id: data.current.address,\n },\n }\n : {\n status: 'VersionNotFound',\n details: [data.current.address, String(version)],\n };\n }\n\n return {\n status: 'VersionFound',\n details: mapGraphQLObjectToRpcObject(data.object, options ?? {}),\n };\n },\n async multiGetObjects(transport, [ids, options]) {\n const objects = await transport.graphqlQuery(\n {\n query: MultiGetObjectsDocument,\n variables: {\n ids,\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n limit: ids.length,\n },\n },\n (data) => data.objects?.nodes,\n );\n\n return objects.map((object) => ({\n data: mapGraphQLObjectToRpcObject(object, options ?? {}),\n }));\n },\n async queryTransactionBlocks(transport, [{ filter, options }, cursor, limit = 20, descending]) {\n const pagination: Partial<QueryTransactionBlocksQueryVariables> = descending\n ? {\n last: limit,\n before: cursor,\n }\n : {\n first: limit,\n after: cursor,\n };\n\n const unsupportedFilters = ['FromOrToAddress', 'FromAndToAddress', 'TransactionKindIn'];\n\n if (filter) {\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in filter) {\n throw new UnsupportedParamError('queryTransactionBlocks', unsupportedFilter);\n }\n }\n }\n\n // Map transaction kind filter from jsonRPC to graphql\n let graphqlTransactionKindFilter: TransactionBlockKindInput | undefined;\n if ('TransactionKind' in filter) {\n switch (filter.TransactionKind as IotaTransactionKind) {\n case 'ProgrammableTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.ProgrammableTx;\n break;\n case 'Genesis':\n graphqlTransactionKindFilter = TransactionBlockKindInput.Genesis;\n break;\n case 'ConsensusCommitPrologueV1':\n graphqlTransactionKindFilter =\n TransactionBlockKindInput.ConsensusCommitPrologueV1;\n break;\n case 'RandomnessStateUpdate':\n graphqlTransactionKindFilter = TransactionBlockKindInput.RandomnessStateUpdate;\n break;\n case 'EndOfEpochTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.EndOfEpochTx;\n break;\n case 'SystemTransaction':\n graphqlTransactionKindFilter = TransactionBlockKindInput.SystemTx;\n break;\n }\n }\n\n const { nodes: transactionBlocks, pageInfo } = await transport.graphqlQuery(\n {\n query: QueryTransactionBlocksDocument,\n variables: {\n ...pagination,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n filter: filter\n ? {\n atCheckpoint:\n 'Checkpoint' in filter\n ? Number.parseInt(filter.Checkpoint)\n : undefined,\n function:\n 'MoveFunction' in filter\n ? `${filter.MoveFunction.package}::${filter.MoveFunction.module}::${filter.MoveFunction.function}`\n : undefined,\n inputObject: 'InputObject' in filter ? filter.InputObject : undefined,\n changedObject:\n 'ChangedObject' in filter ? filter.ChangedObject : undefined,\n sentAddress: 'FromAddress' in filter ? filter.FromAddress : undefined,\n recvAddress: 'ToAddress' in filter ? filter.ToAddress : undefined,\n kind: graphqlTransactionKindFilter,\n }\n : {},\n },\n },\n (data) => data.transactionBlocks,\n );\n\n for (const transactionBlock of transactionBlocks) {\n await paginateTransactionBlockLists(transport, transactionBlock);\n }\n\n if (pagination.last) {\n transactionBlocks.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: pagination.last ? pageInfo.startCursor : pageInfo.endCursor,\n data: transactionBlocks.map((transactionBlock) =>\n mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options ?? {}),\n ),\n };\n },\n async getTransactionBlock(transport, [digest, options]) {\n const transactionBlock = await transport.graphqlQuery(\n {\n query: GetTransactionBlockDocument,\n variables: {\n digest,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n },\n },\n (data) => data.transactionBlock,\n );\n\n await paginateTransactionBlockLists(transport, transactionBlock);\n\n return mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options);\n },\n\n async multiGetTransactionBlocks(transport, [digests, options]) {\n const transactionBlocks = await transport.graphqlQuery(\n {\n query: MultiGetTransactionBlocksDocument,\n variables: {\n digests: digests,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showEffects,\n showRawInput: options?.showRawInput,\n limit: digests.length,\n },\n },\n (data) => data.transactionBlocks?.nodes,\n );\n\n for (const transactionBlock of transactionBlocks) {\n await paginateTransactionBlockLists(transport, transactionBlock);\n }\n\n return transactionBlocks.map((transactionBlock) =>\n mapGraphQLTransactionBlockToRpcTransactionBlock(transactionBlock, options),\n );\n },\n async getTotalTransactionBlocks(transport): Promise<bigint> {\n return transport.graphqlQuery(\n {\n query: GetTotalTransactionBlocksDocument,\n },\n (data) => BigInt(data.checkpoint?.networkTotalTransactions!),\n );\n },\n async getReferenceGasPrice(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetReferenceGasPriceDocument,\n variables: {},\n },\n (data) => data.epoch,\n );\n\n return BigInt(epoch.referenceGasPrice);\n },\n async getStakes(transport, [owner]) {\n const stakes = await transport.graphqlQuery(\n {\n query: GetStakesDocument,\n variables: {\n owner,\n },\n },\n (data) => data.address?.stakedIotas?.nodes,\n );\n\n return mapGraphQLStakeToRpcStake(stakes);\n },\n async getStakesByIds(transport, [stakedIotaIds]) {\n const stakes = await transport.graphqlQuery(\n {\n query: GetStakesByIdsDocument,\n variables: {\n ids: stakedIotaIds,\n },\n },\n (data) =>\n data.objects?.nodes\n .map((node) => node?.asMoveObject?.asStakedIota!)\n .filter(Boolean),\n );\n\n return mapGraphQLStakeToRpcStake(stakes);\n },\n async getLatestIotaSystemStateV2(transport) {\n const systemState = await transport.graphqlQuery(\n {\n query: GetLatestIotaSystemStateDocument,\n },\n (data) => data.epoch,\n );\n\n // fetch all active validators\n let hasMoreActiveValidators =\n systemState.validatorSet?.activeValidators?.pageInfo.hasNextPage ?? false;\n let afterActiveValidators = systemState.validatorSet?.activeValidators?.pageInfo.endCursor;\n while (hasMoreActiveValidators) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: systemState.epochId,\n after: afterActiveValidators,\n },\n },\n (data) => data.epoch,\n );\n systemState.validatorSet?.activeValidators?.nodes.push(\n ...(page.validatorSet?.activeValidators?.nodes ?? []),\n );\n hasMoreActiveValidators =\n page.validatorSet?.activeValidators?.pageInfo.hasNextPage ?? false;\n afterActiveValidators = page.validatorSet?.activeValidators?.pageInfo.endCursor;\n }\n\n // fetch all committee members\n let hasMoreCommitteeMembers =\n systemState.validatorSet?.committeeMembers?.pageInfo.hasNextPage ?? false;\n let afterCommitteeMembers = systemState.validatorSet?.committeeMembers?.pageInfo.endCursor;\n while (hasMoreCommitteeMembers) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: systemState.epochId,\n after: afterCommitteeMembers,\n },\n },\n (data) => data.epoch,\n );\n systemState.validatorSet?.committeeMembers?.nodes.push(\n ...(page.validatorSet?.committeeMembers?.nodes ?? []),\n );\n hasMoreCommitteeMembers =\n page.validatorSet?.committeeMembers?.pageInfo.hasNextPage ?? false;\n afterCommitteeMembers = page.validatorSet?.committeeMembers?.pageInfo.endCursor;\n }\n\n return {\n V2: {\n activeValidators: systemState.validatorSet?.activeValidators?.nodes.map(\n mapGraphQlValidatorToRpcValidator,\n )!,\n committeeMembers: systemState.validatorSet?.committeeMembers?.nodes?.map(\n (_, index) => index.toString(),\n )!,\n atRiskValidators: systemState.validatorSet?.activeValidators.nodes\n ?.filter((validator) => validator.atRisk)\n .map((validator) => [\n validator.address.address!,\n validator.atRisk!.toString(),\n ])!,\n epoch: String(systemState.epochId),\n epochDurationMs: String(\n new Date(systemState.endTimestamp).getTime() -\n new Date(systemState.startTimestamp).getTime(),\n ),\n epochStartTimestampMs: String(new Date(systemState.startTimestamp).getTime()),\n inactivePoolsSize: String(systemState.validatorSet?.inactivePoolsSize),\n iotaTotalSupply: String(systemState.iotaTotalSupply),\n iotaTreasuryCapId: String(systemState.iotaTreasuryCapId),\n maxValidatorCount: String(systemState.systemParameters?.maxValidatorCount),\n minValidatorCount: String(systemState.systemParameters?.minValidatorCount),\n minValidatorJoiningStake: String(\n systemState.systemParameters?.minValidatorJoiningStake,\n ),\n pendingActiveValidatorsSize: String(\n systemState.validatorSet?.pendingActiveValidatorsSize,\n ),\n pendingRemovals:\n systemState.validatorSet?.pendingRemovals?.map((idx) => String(idx)) ?? [],\n protocolVersion: String(systemState.protocolConfigs?.protocolVersion),\n referenceGasPrice: String(systemState.referenceGasPrice),\n safeMode: systemState.safeMode?.enabled!,\n safeModeComputationCharges: String(\n systemState.safeMode?.gasSummary?.computationCost,\n ),\n safeModeComputationChargesBurned: String(\n systemState.safeMode?.gasSummary?.computationCostBurned,\n ),\n safeModeNonRefundableStorageFee: String(\n systemState.safeMode?.gasSummary?.nonRefundableStorageFee,\n ),\n safeModeStorageRebates: String(systemState.safeMode?.gasSummary?.storageRebate),\n safeModeStorageCharges: String(systemState.safeMode?.gasSummary?.storageCost),\n stakingPoolMappingsSize: String(systemState.validatorSet?.stakingPoolMappingsSize),\n storageFundNonRefundableBalance: String(\n systemState.storageFund?.nonRefundableBalance,\n ),\n storageFundTotalObjectStorageRebates: String(\n systemState.storageFund?.totalObjectStorageRebates,\n ),\n systemStateVersion: String(systemState.systemStateVersion),\n totalStake: systemState.validatorSet?.totalStake,\n validatorCandidatesSize:\n systemState.validatorSet?.validatorCandidatesSize?.toString()!,\n validatorLowStakeGracePeriod:\n systemState.systemParameters?.validatorLowStakeGracePeriod,\n validatorLowStakeThreshold:\n systemState.systemParameters?.validatorLowStakeThreshold,\n validatorReportRecords: [], // TODO\n validatorVeryLowStakeThreshold:\n systemState.systemParameters?.validatorVeryLowStakeThreshold,\n validatorCandidatesId: systemState.validatorSet?.validatorCandidatesId,\n inactivePoolsId: systemState.validatorSet?.inactivePoolsId,\n pendingActiveValidatorsId: systemState.validatorSet?.pendingActiveValidatorsId,\n stakingPoolMappingsId: systemState.validatorSet?.stakingPoolMappingsId,\n },\n };\n },\n async queryEvents(transport, [query, cursor, limit, descending]) {\n const pagination: Partial<QueryEventsQueryVariables> = descending\n ? { last: limit, before: cursor as never }\n : { first: limit, after: cursor as never };\n\n const filter: QueryEventsQueryVariables['filter'] = {\n sender: 'Sender' in query ? query.Sender : undefined,\n transactionDigest: 'Transaction' in query ? query.Transaction : undefined,\n eventType: 'MoveEventType' in query ? query.MoveEventType : undefined,\n emittingModule:\n 'MoveModule' in query\n ? `${query.MoveModule.package}::${query.MoveModule.module}`\n : undefined,\n };\n\n if ('MoveEventType' in query) {\n filter.eventType = query.MoveEventType;\n } else if ('MoveEventModule' in query) {\n filter.eventType = `${query.MoveEventModule.package}::${query.MoveEventModule.module}`;\n }\n\n const unsupportedFilters = [\n 'Package',\n 'MoveEventField',\n 'Any',\n 'All',\n 'And',\n 'Or',\n 'TimeRange',\n ];\n\n if (query) {\n for (const unsupportedFilter of unsupportedFilters) {\n if (unsupportedFilter in query) {\n throw new UnsupportedParamError('queryEvents', unsupportedFilter);\n }\n }\n }\n\n const { nodes: events, pageInfo } = await transport.graphqlQuery(\n {\n query: QueryEventsDocument,\n variables: {\n ...pagination,\n filter,\n },\n },\n (data) => data.events,\n );\n\n if (pagination.last) {\n events.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: (pagination.last ? pageInfo.startCursor : pageInfo.endCursor) as never,\n data: events.map((event) => ({\n bcs: event.bcs,\n bcsEncoding: 'base64',\n id: {\n eventSeq: '', // TODO\n txDigest: '', // TODO\n },\n packageId: event.sendingModule?.package.address!,\n parsedJson: event.json,\n sender: event.sender?.address,\n timestampMs: new Date(event.timestamp).getTime().toString(),\n transactionModule: `${event.sendingModule?.package.address}::${event.sendingModule?.name}`,\n type: toShortTypeString(event.type?.repr)!,\n })),\n };\n },\n async devInspectTransactionBlock(transport, [sender, devInspectTxBytes, gasPrice]) {\n const { transaction, error, results } = await transport.graphqlQuery(\n {\n query: DevInspectTransactionBlockDocument,\n variables: {\n txBytes: devInspectTxBytes,\n txMeta: {\n gasPrice: Number.parseInt(gasPrice),\n sender: sender,\n },\n showEffects: true,\n showEvents: true,\n },\n },\n (data) => data.dryRunTransactionBlock,\n );\n\n if (!transaction) {\n throw new Error('Unexpected error during dry run');\n }\n\n const result = mapGraphQLTransactionBlockToRpcTransactionBlock(transaction, {\n showEffects: true,\n showEvents: true,\n });\n\n return {\n error,\n effects: result.effects!,\n events: result.events!,\n results: results?.map((result) => ({\n mutableReferenceOutputs: result.mutatedReferences?.map(\n (ref): [IotaArgument, number[], string] => [\n ref.input.__typename === 'GasCoin'\n ? 'GasCoin'\n : ref.input.__typename === 'Input'\n ? {\n Input: ref.input.inputIndex,\n }\n : typeof ref.input.resultIndex === 'number'\n ? {\n NestedResult: [ref.input.cmd, ref.input.resultIndex!] as [\n number,\n number,\n ],\n }\n : {\n Result: ref.input.cmd,\n },\n Array.from(fromBase64(ref.bcs)),\n toShortTypeString(ref.type.repr),\n ],\n ),\n returnValues: result.returnValues?.map((value) => [\n Array.from(fromBase64(value.bcs)),\n toShortTypeString(value.type.repr),\n ]),\n })),\n };\n },\n async getDynamicFields(transport, [parentId, cursor, limit]) {\n const { nodes: fields, pageInfo } = await transport.graphqlQuery(\n {\n query: GetDynamicFieldsDocument,\n variables: {\n parentId,\n first: limit,\n cursor,\n },\n },\n (data) => data.owner?.dynamicFields,\n );\n\n return {\n data: fields.map((field) => ({\n bcsName: field.name?.bcs,\n bcsEncoding: 'base64',\n digest: (field.value?.__typename === 'MoveObject'\n ? field.value.digest\n : undefined)!,\n name: {\n type: toShortTypeString(field.name?.type.repr)!,\n value: field.name?.json,\n },\n objectId:\n field.value?.__typename === 'MoveObject' ? field.value.address : undefined,\n objectType: (field.value?.__typename === 'MoveObject'\n ? field.value.contents?.type.repr\n : field.value?.type.repr)!,\n type: field.value?.__typename === 'MoveObject' ? 'DynamicObject' : 'DynamicField',\n version: (field.value?.__typename === 'MoveObject'\n ? field.value.version\n : undefined) as unknown as string,\n })),\n nextCursor: pageInfo.endCursor ?? null,\n hasNextPage: pageInfo.hasNextPage,\n };\n },\n async getDynamicFieldObjectV2(transport, inputs) {\n return await getDynamicFieldObject!(transport, inputs);\n },\n /**\n * @deprecated The V1 of this method is deprecated, use `getDynamicFieldObjectV2` instead.\n */\n async getDynamicFieldObject(transport, [parentId, name]) {\n return await getDynamicFieldObject!(transport, [\n parentId,\n name,\n {\n // These are the same defaults as in the JSON RPC.\n showBcs: true,\n showContent: true,\n showDisplay: true,\n showOwner: true,\n showPreviousTransaction: true,\n showStorageRebate: true,\n showType: true,\n },\n ]);\n },\n\n async executeTransactionBlock(transport, [txBytes, signatures, options]) {\n const { effects, errors } = await transport.graphqlQuery(\n {\n query: ExecuteTransactionBlockDocument,\n variables: {\n txBytes,\n signatures,\n showBalanceChanges: options?.showBalanceChanges,\n showEffects: options?.showEffects,\n showEvents: options?.showEvents,\n showInput: options?.showInput,\n showObjectChanges: options?.showObjectChanges,\n showRawEffects: options?.showRawEffects,\n showRawInput: options?.showRawInput,\n },\n },\n (data) => data.executeTransactionBlock,\n );\n\n if (!effects?.transactionBlock) {\n const tx = Transaction.from(fromBase64(txBytes));\n return { errors: errors ?? undefined, digest: await tx.getDigest() };\n }\n\n await paginateTransactionBlockLists(transport, effects.transactionBlock);\n\n return mapGraphQLTransactionBlockToRpcTransactionBlock(\n effects.transactionBlock,\n options,\n errors,\n );\n },\n async dryRunTransactionBlock(transport, [txBytes]) {\n const tx = Transaction.from(fromBase64(txBytes));\n const { transaction, error } = await transport.graphqlQuery(\n {\n query: DryRunTransactionBlockDocument,\n variables: {\n txBytes,\n showBalanceChanges: true,\n showEffects: true,\n showEvents: true,\n showInput: true,\n showObjectChanges: true,\n },\n },\n (data) => data.dryRunTransactionBlock,\n );\n\n if (error || !transaction) {\n throw new Error(error ?? 'Unexpected error during dry run');\n }\n\n const result = mapGraphQLTransactionBlockToRpcTransactionBlock(\n { ...transaction, digest: await tx.getDigest() },\n {\n showBalanceChanges: true,\n showEffects: true,\n showEvents: true,\n showInput: true,\n showObjectChanges: true,\n },\n );\n\n return {\n input: result.transaction?.data!,\n balanceChanges: result.balanceChanges!,\n effects: result.effects!,\n events: result.events!,\n objectChanges: result.objectChanges!,\n };\n },\n async getLatestCheckpointSequenceNumber(transport) {\n const sequenceNumber = await transport.graphqlQuery(\n {\n query: GetLatestCheckpointSequenceNumberDocument,\n },\n (data) => data.checkpoint?.sequenceNumber,\n );\n\n return sequenceNumber.toString();\n },\n async getCheckpoint(transport, [id]) {\n const checkpoint = await transport.graphqlQuery(\n {\n query: GetCheckpointDocument,\n variables: {\n id:\n typeof id === 'number' || isNumericString(id)\n ? {\n sequenceNumber: Number.parseInt(id.toString(), 10),\n }\n : {\n digest: id,\n },\n },\n },\n (data) => data.checkpoint,\n );\n\n await paginateCheckpointLists(transport, checkpoint);\n return mapGraphQLCheckpointToRpcCheckpoint(checkpoint);\n },\n async getCheckpoints(transport, [cursor, limit, descendingOrder]) {\n const pagination: Partial<QueryEventsQueryVariables> = descendingOrder\n ? { last: limit, before: cursor as never }\n : { first: limit, after: cursor as never };\n\n const { nodes: checkpoints, pageInfo } = await transport.graphqlQuery(\n {\n query: GetCheckpointsDocument,\n variables: {\n ...pagination,\n },\n },\n (data) => data.checkpoints,\n );\n\n for (const checkpoint of checkpoints) {\n await paginateCheckpointLists(transport, checkpoint);\n }\n\n if (pagination.last) {\n checkpoints.reverse();\n }\n\n return {\n hasNextPage: pagination.last ? pageInfo.hasPreviousPage : pageInfo.hasNextPage,\n nextCursor: (pagination.last ? pageInfo.startCursor : pageInfo.endCursor) as never,\n data: checkpoints.map((checkpoint) => mapGraphQLCheckpointToRpcCheckpoint(checkpoint)),\n };\n },\n async getCommitteeInfo(transport, [epoch]) {\n const { validatorSet, epochId } = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: epoch ? Number.parseInt(epoch) : undefined,\n },\n },\n (data) => data.epoch,\n );\n\n let hasNextPage = validatorSet?.committeeMembers?.pageInfo.hasNextPage;\n let after = validatorSet?.committeeMembers?.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: epoch ? Number.parseInt(epoch) : undefined,\n after,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n\n validatorSet?.committeeMembers.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo.hasNextPage;\n after = page.pageInfo.endCursor;\n }\n\n return {\n epoch: epochId.toString(),\n validators: validatorSet?.committeeMembers?.nodes.map((val) => [\n val.credentials?.authorityPubKey!,\n String(val.votingPower),\n ])!,\n };\n },\n async getCurrentEpoch(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetCurrentEpochDocument,\n },\n (data) => data.epoch,\n );\n\n // fetch all active validators\n let hasNextPageActiveValidators =\n epoch.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n let afterActiveValidators = epoch.validatorSet?.activeValidators?.pageInfo.endCursor;\n while (hasNextPageActiveValidators) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after: afterActiveValidators,\n },\n },\n (data) => data.epoch?.validatorSet?.activeValidators,\n );\n epoch.validatorSet?.activeValidators?.nodes.push(...page.nodes);\n hasNextPageActiveValidators = page.pageInfo.hasNextPage;\n afterActiveValidators = page.pageInfo.endCursor;\n }\n // fetch all committee members\n let hasNextPageCommitteeMembers =\n epoch.validatorSet?.committeeMembers?.pageInfo.hasNextPage;\n let afterCommitteeMembers = epoch.validatorSet?.committeeMembers?.pageInfo.endCursor;\n while (hasNextPageCommitteeMembers) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after: afterCommitteeMembers,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n epoch.validatorSet?.committeeMembers?.nodes.push(...page.nodes);\n hasNextPageCommitteeMembers = page.pageInfo.hasNextPage;\n afterCommitteeMembers = page.pageInfo.endCursor;\n }\n\n // Committee validators: each element is an index pointing to `validators`\n const validatorsAddresses =\n epoch.validatorSet?.activeValidators?.nodes.map((val) => val.address.address!) ?? [];\n const committeeMembersAddresses =\n epoch.validatorSet?.committeeMembers?.nodes.map((val) => val.address.address!) ?? [];\n const committeeValidatorsIndexes = committeeMembersAddresses.map((val) =>\n validatorsAddresses.indexOf(val)?.toString(),\n );\n\n return {\n epoch: String(epoch.epochId),\n validators: epoch.validatorSet?.activeValidators?.nodes.map(\n mapGraphQlValidatorToRpcValidator,\n )!,\n committeeMembers: committeeValidatorsIndexes,\n epochTotalTransactions: '0', // TODO\n firstCheckpointId: epoch.firstCheckpoint?.nodes[0]?.sequenceNumber.toString()!,\n endOfEpochInfo: null,\n referenceGasPrice: epoch.referenceGasPrice,\n epochStartTimestamp: new Date(epoch.startTimestamp).getTime().toString(),\n };\n },\n async getValidatorsApy(transport) {\n const epoch = await transport.graphqlQuery(\n {\n query: GetValidatorsApyDocument,\n },\n (data) => data.epoch,\n );\n\n let hasNextPage = epoch.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n let after = epoch.validatorSet?.activeValidators?.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateEpochValidatorsDocument,\n variables: {\n id: epoch.epochId,\n after,\n },\n },\n (data) => data.epoch,\n );\n\n epoch.validatorSet?.activeValidators?.nodes.push(\n ...(page.validatorSet?.activeValidators?.nodes ?? []),\n );\n hasNextPage = page.validatorSet?.activeValidators?.pageInfo.hasNextPage;\n after = page.validatorSet?.activeValidators?.pageInfo.endCursor;\n }\n\n return {\n epoch: String(epoch.epochId),\n apys: epoch.validatorSet?.activeValidators?.nodes.map((validator) => ({\n address: validator.address.address!,\n apy: (typeof validator.apy === 'number' ? validator.apy / 100 : null) as number,\n }))!,\n };\n },\n async getChainIdentifier(transport): Promise<string> {\n const identifier = await transport.graphqlQuery(\n {\n query: GetChainIdentifierDocument,\n },\n (data) => data.chainIdentifier,\n );\n\n return identifier;\n },\n async getProtocolConfig(transport, [version]) {\n const protocolConfig = await transport.graphqlQuery(\n {\n query: GetProtocolConfigDocument,\n variables: {\n protocolVersion: version ? Number.parseInt(version) : undefined,\n },\n },\n (data) => data.protocolConfig,\n );\n\n const featureFlags: Record<string, boolean> = {};\n const attributes: Record<string, ProtocolConfigValue | null> = {};\n\n const configTypeMap: Record<string, string> = {\n max_arguments: 'u32',\n max_gas_payment_objects: 'u32',\n max_modules_in_publish: 'u32',\n max_programmable_tx_commands: 'u32',\n max_pure_argument_size: 'u32',\n max_type_argument_depth: 'u32',\n max_type_arguments: 'u32',\n move_binary_format_version: 'u32',\n min_move_binary_format_version: 'u32',\n random_beacon_reduction_allowed_delta: 'u16',\n random_beacon_dkg_timeout_round: 'u32',\n random_beacon_reduction_lower_bound: 'u32',\n scoring_decision_cutoff_value: 'f64',\n scoring_decision_mad_divisor: 'f64',\n group_ops_bls12381_msm_max_len: 'u32',\n binary_module_handles: 'u16',\n binary_struct_handles: 'u16',\n binary_function_handles: 'u16',\n binary_function_instantiations: 'u16',\n binary_signatures: 'u16',\n binary_constant_pool: 'u16',\n binary_identifiers: 'u16',\n binary_address_identifiers: 'u16',\n binary_struct_defs: 'u16',\n binary_struct_def_instantiations: 'u16',\n binary_function_defs: 'u16',\n binary_field_handles: 'u16',\n binary_field_instantiations: 'u16',\n binary_friend_decls: 'u16',\n max_package_dependencies: 'u32',\n bridge_should_try_to_finalize_committee: 'bool',\n consensus_gc_depth: 'u32',\n scorer_version: 'u16',\n };\n\n for (const { key, value } of protocolConfig.configs) {\n attributes[key] =\n value === null\n ? null\n : ({\n [configTypeMap[key] ?? 'u64']: value,\n } as ProtocolConfigValue);\n }\n\n for (const { key, value } of protocolConfig.featureFlags) {\n featureFlags[key] = value;\n }\n\n return {\n maxSupportedProtocolVersion: protocolConfig.protocolVersion?.toString(),\n minSupportedProtocolVersion: '1',\n protocolVersion: protocolConfig.protocolVersion?.toString(),\n attributes,\n featureFlags,\n };\n },\n\n async isTransactionIndexedOnNode(transport, [digest]): Promise<boolean> {\n const isTransactionIndexedOnNode = await transport.graphqlQuery(\n {\n query: IsTransactionIndexedOnNodeDocument,\n variables: {\n digest,\n },\n },\n (data) => data.isTransactionIndexedOnNode,\n );\n return isTransactionIndexedOnNode;\n },\n\n async view(transport, [functionName, typeArgs, callArgs]): Promise<IotaMoveViewCallResults> {\n return await transport.graphqlQuery(\n {\n query: ViewDocument,\n variables: {\n functionName,\n typeArgs,\n arguments: callArgs,\n },\n },\n (data) => {\n if (data.moveViewCall.error) {\n return {\n executionError: data.moveViewCall.error,\n } as IotaMoveViewCallResults;\n } else {\n return {\n functionReturnValues: data.moveViewCall.results,\n } as IotaMoveViewCallResults;\n }\n },\n );\n },\n};\n\nexport class UnsupportedParamError extends Error {\n constructor(method: string, param: string) {\n super(`Parameter ${param} is not supported for ${method} in the GraphQL API`);\n }\n}\n\nexport class UnsupportedMethodError extends Error {\n constructor(method: string) {\n super(`Method ${method} is not supported in the GraphQL API`);\n }\n}\n\nasync function paginateTransactionBlockLists(\n transport: IotaClientGraphQLTransport,\n transactionBlock: Rpc_Transaction_FieldsFragment,\n) {\n let hasMoreEvents = transactionBlock.effects?.events?.pageInfo.hasNextPage ?? false;\n let hasMoreBalanceChanges =\n transactionBlock.effects?.balanceChanges?.pageInfo.hasNextPage ?? false;\n let hasMoreObjectChanges =\n transactionBlock.effects?.objectChanges?.pageInfo.hasNextPage ?? false;\n let afterEvents = transactionBlock.effects?.events?.pageInfo.endCursor;\n let afterBalanceChanges = transactionBlock.effects?.balanceChanges?.pageInfo.endCursor;\n let afterObjectChanges = transactionBlock.effects?.objectChanges?.pageInfo.endCursor;\n\n while (hasMoreEvents || hasMoreBalanceChanges || hasMoreObjectChanges) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateTransactionBlockListsDocument,\n variables: {\n digest: transactionBlock.digest!,\n afterEvents,\n afterBalanceChanges,\n afterObjectChanges,\n hasMoreEvents,\n hasMoreBalanceChanges,\n hasMoreObjectChanges,\n },\n },\n (data) => data.transactionBlock?.effects,\n );\n\n transactionBlock.effects?.events?.nodes.push(...(page.events?.nodes ?? []));\n transactionBlock.effects?.balanceChanges?.nodes.push(...(page.balanceChanges?.nodes ?? []));\n transactionBlock.effects?.objectChanges?.nodes.push(...(page.objectChanges?.nodes ?? []));\n hasMoreEvents = page.events?.pageInfo.hasNextPage ?? false;\n hasMoreBalanceChanges = page.balanceChanges?.pageInfo.hasNextPage ?? false;\n hasMoreObjectChanges = page.objectChanges?.pageInfo.hasNextPage ?? false;\n afterEvents = page.events?.pageInfo.endCursor;\n afterBalanceChanges = page.balanceChanges?.pageInfo.endCursor;\n afterObjectChanges = page.objectChanges?.pageInfo.endCursor;\n }\n}\n\nasync function paginateCheckpointLists(\n transport: IotaClientGraphQLTransport,\n checkpoint: Rpc_Checkpoint_FieldsFragment,\n) {\n let hasNextPage = checkpoint.transactionBlocks.pageInfo.hasNextPage;\n let after = checkpoint.transactionBlocks.pageInfo.endCursor;\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateCheckpointTransactionBlocksDocument,\n variables: {\n id: { digest: checkpoint.digest! },\n after,\n },\n },\n (data) => data.checkpoint?.transactionBlocks,\n );\n\n checkpoint.transactionBlocks.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo.hasNextPage;\n after = page.pageInfo.endCursor;\n }\n\n const endOfEpochTx = checkpoint.endOfEpoch.nodes[0];\n\n if (\n endOfEpochTx?.kind?.__typename === 'EndOfEpochTransaction' &&\n endOfEpochTx.kind?.transactions.nodes[0].__typename === 'ChangeEpochTransactionV2' &&\n endOfEpochTx.kind.transactions.nodes[0].epoch?.epochId\n ) {\n const validatorSet = endOfEpochTx.kind.transactions.nodes[0].epoch.validatorSet;\n let hasNextPage = validatorSet?.committeeMembers.pageInfo.hasNextPage;\n let after = validatorSet?.committeeMembers.pageInfo.endCursor;\n\n while (hasNextPage) {\n const page = await transport.graphqlQuery(\n {\n query: GetCommitteeInfoDocument,\n variables: {\n epochId: endOfEpochTx.kind.transactions.nodes[0].epoch?.epochId,\n after,\n },\n },\n (data) => data.epoch?.validatorSet?.committeeMembers,\n );\n\n validatorSet?.committeeMembers.nodes.push(...page.nodes);\n hasNextPage = page.pageInfo?.hasNextPage;\n after = page.pageInfo?.endCursor;\n }\n }\n}\n\nasync function getDynamicFieldObject(\n transport: IotaClientGraphQLTransport,\n [parentId, name, options]: any[],\n) {\n const nameLayout = await transport.graphqlQuery(\n {\n query: GetTypeLayoutDocument,\n variables: {\n type: name.type,\n },\n },\n (data) => data.type.layout,\n );\n\n const bcsName = mapJsonToBcs(name.value, nameLayout);\n\n const parent = await transport.graphqlQuery(\n {\n query: GetDynamicFieldObjectDocument,\n variables: {\n parentId: parentId,\n name: {\n type: name.type,\n bcs: bcsName,\n },\n showBcs: options?.showBcs,\n showContent: options?.showContent,\n showDisplay: options?.showDisplay,\n showOwner: options?.showOwner,\n showPreviousTransaction: options?.showPreviousTransaction,\n showStorageRebate: options?.showStorageRebate,\n showType: options?.showType,\n },\n },\n (data) => {\n return data.owner?.dynamicObjectField?.value?.__typename === 'MoveObject'\n ? data.owner.dynamicObjectField.value.owner?.__typename === 'Parent'\n ? data.owner.dynamicObjectField.value.owner.parent\n : undefined\n : undefined;\n },\n );\n\n return {\n data: {\n content: parent.asMoveObject\n ? {\n dataType: 'moveObject' as const,\n ...(moveDataToRpcContent(\n parent.asMoveObject?.contents?.data!,\n parent.asMoveObject?.contents?.type.layout!,\n ) as {\n fields: {\n [key: string]: MoveValue;\n };\n type: string;\n }),\n }\n : undefined,\n digest: parent?.digest!,\n objectId: parent?.address,\n type: parent?.asMoveObject\n ? toShortTypeString(parent.asMoveObject.contents?.type.repr)\n : undefined,\n version: parent?.version.toString()!,\n storageRebate: parent.storageRebate,\n previousTransaction: parent.previousTransactionBlock?.digest,\n owner:\n parent.owner?.__typename === 'Parent'\n ? {\n ObjectOwner: parent.owner.parent?.address,\n }\n : undefined,\n },\n };\n}\n"],
5
5
  "mappings": "AAIA,SAAS,kBAAkB;AAU3B,SAAS,mBAAmB;AAC5B;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AASP;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,oBAAoB;AAC7B,SAAS,2CAA2C;AACpD;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,iCAAiC,mCAAmC;AAC7E,SAAS,iCAAiC;AAC1C,SAAS,uDAAuD;AAChE,SAAS,iBAAiB,yBAAyB;AACnD,SAAS,yCAAyC;AAS3C,MAAM,cAST;AAAA,EACA,MAAM,iBAAiB,WAAW;AAC9B,UAAM,MAAM,MAAM,UAAU,eAAe;AAAA,MACvC,OAAO;AAAA,MACP,WAAW,CAAC;AAAA,IAChB,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACT,YAAM,IAAI,MAAM,iBAAiB;AAAA,IACrC;AAEA,WAAO;AAAA,MACH,MAAM;AAAA,QACF,SAAS,IAAI,QAAQ,IAAI,oBAAoB,KAAK;AAAA,MACtD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,WAAW,CAAC,OAAO,UAAU,QAAQ,KAAK,GAAG;AACxD,UAAM,EAAE,OAAO,OAAO,SAAS,IAAI,MAAM,UAAU;AAAA,MAC/C;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,MAAM;AAAA,UACN;AAAA,UACA,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS;AAAA,IAC5B;AAEA,WAAO;AAAA,MACH,MAAM,MAAM,IAAI,CAAC,UAAU;AAAA,QACvB,SAAS,KAAK;AAAA,QACd,cAAc,KAAK;AAAA,QACnB,UAAU;AAAA,UACN,mBAAmB,eAAe,KAAK,UAAU,KAAK,IAAK,EAAE,WAAW,CAAC,CAAC;AAAA,QAC9E;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,qBAAqB,KAAK,0BAA0B;AAAA,QACpD,SAAS,OAAO,KAAK,OAAQ;AAAA,MACjC,EAAE;AAAA,MACF,YAAY,SAAS;AAAA,MACrB,aAAa,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEA,MAAM,YAAY,WAAW,QAAQ;AACjC,UAAM,EAAE,OAAO,OAAO,SAAS,IAAI,MAAM,UAAU;AAAA,MAC/C;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,OAAO,OAAO,CAAC;AAAA,UACf,QAAQ,OAAO,CAAC;AAAA,UAChB,OAAO,OAAO,CAAC;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS;AAAA,IAC5B;AAEA,WAAO;AAAA,MACH,MAAM,MAAM,IAAI,CAAC,UAAU;AAAA,QACvB,SAAS,KAAK;AAAA,QACd,cAAc,KAAK;AAAA,QACnB,UAAU;AAAA,UACN,mBAAmB,eAAe,KAAK,UAAU,KAAK,IAAK,EAAE,WAAW,CAAC,CAAC;AAAA,QAC9E;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,qBAAqB,KAAK,0BAA0B;AAAA,QACpD,SAAS,OAAO,KAAK,OAAQ;AAAA,MACjC,EAAE;AAAA,MACF,YAAY,SAAS;AAAA,MACrB,aAAa,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA,EAEA,MAAM,WAAW,WAAW,QAAQ;AAChC,QAAI;AACA,YAAM,UAAU,MAAM,UAAU;AAAA,QAC5B;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,OAAO,OAAO,CAAC;AAAA,YACf,MAAM,OAAO,CAAC;AAAA,UAClB;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,SAAS;AAAA,MAC5B;AAEA,aAAO;AAAA,QACH,UAAU,kBAAkB,QAAQ,UAAU,IAAK,KAAK;AAAA,QACxD,iBAAiB,QAAQ,mBAAmB;AAAA,QAC5C,cAAc,QAAQ,gBAAgB;AAAA,MAC1C;AAAA,IACJ,SAAS,OAAO;AACZ,cAAQ,KAAK,8DAA8D,KAAK;AAChF,aAAO;AAAA,QACH,UAAU,mBAAmB,OAAO,CAAC,KAAK,aAAa;AAAA,QACvD,iBAAiB;AAAA,QACjB,cAAc;AAAA,MAClB;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,eAAe,WAAW,QAAQ;AACpC,UAAM,WAAW,MAAM,UAAU;AAAA,MAC7B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,OAAO,OAAO,CAAC;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS,UAAU;AAAA,IACtC;AAEA,WAAO,SAAS,IAAI,CAAC,aAAa;AAAA,MAC9B,UAAU,kBAAkB,QAAQ,UAAU,IAAK;AAAA,MACnD,iBAAiB,QAAQ;AAAA,MACzB,cAAc,QAAQ;AAAA,IAC1B,EAAE;AAAA,EACN;AAAA,EACA,MAAM,gBAAgB,WAAW,QAAQ;AACrC,UAAM,WAAW,MAAM,UAAU;AAAA,MAC7B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,UAAU,OAAO,CAAC;AAAA,QACtB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,WAAO;AAAA,MACH,UAAU,SAAS;AAAA,MACnB,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,aAAa,SAAS;AAAA,MACtB,SAAS,SAAS;AAAA,MAClB,IAAI,SAAS;AAAA,IACjB;AAAA,EACJ;AAAA,EACA,MAAM,eAAe,WAAW,QAAQ;AACpC,UAAM,WAAW,MAAM,UAAU;AAAA,MAC7B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,UAAU,OAAO,CAAC;AAAA,QACtB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,WAAO;AAAA,MACH,OAAO,OAAO,SAAS,MAAO,EAAE,SAAS;AAAA,IAC7C;AAAA,EACJ;AAAA,EACA,MAAM,wBAAwB,WAAW,CAAC,KAAK,QAAQ,EAAE,GAAG;AACxD,UAAM,aAAa,MAAM,UAAU;AAAA,MAC/B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,WAAW;AAAA,UACX,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,QAAQ,eAAe,QAAQ,UAAU;AAAA,IAC5D;AAEA,WAAO,WAAW,IAAI,CAAC,cAAc;AACjC,UAAI,CAAC,UAAU,UAAU,KAAK,UAAU;AACpC,eAAO;AAAA,MACX;AAEA,aAAO;AAAA,QACH,QACI,UAAU,UAAU,QAAQ,MACtB,yBACA,UAAU,UAAU,QAAQ,SAC1B,uBACA;AAAA,MAChB;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EACA,MAAM,0BAA0B,WAAW,CAAC,KAAK,QAAQ,EAAE,GAAG;AAC1D,UAAM,eAAe,MAAM,UAAU;AAAA,MACjC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,WAAW;AAAA,UACX,UAAU;AAAA,QACd;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,QAAQ,eAAe,QAAQ;AAAA,IAClD;AAEA,WAAO,0BAA0B,YAAY;AAAA,EACjD;AAAA,EACA,MAAM,kCAAkC,WAAW,CAAC,GAAG,GAAG;AACtD,UAAM,cAAc,MAAM,UAAU;AAAA,MAChC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,WAAW;AAAA,QACf;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,QAAQ;AAAA,IAC3B;AAEA,QAAI,cAAc,YAAY,SAAS,SAAS,eAAe;AAC/D,QAAI,SAAS,YAAY,SAAS,SAAS;AAC3C,WAAO,aAAa;AAChB,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,WAAW;AAAA,YACX;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,QAAQ;AAAA,MAC3B;AAEA,kBAAY,SAAS,MAAM,KAAK,GAAI,KAAK,SAAS,SAAS,CAAC,CAAE;AAC9D,oBAAc,KAAK,SAAS,SAAS,eAAe;AACpD,eAAS,KAAK,SAAS,SAAS;AAAA,IACpC;AAEA,UAAM,UAAU,kBAAkB,YAAY,OAAO;AACrD,UAAM,UAAoD,CAAC;AAE3D,eAAW,cAAc,YAAY,SAAS,SAAS,CAAC,GAAG;AACvD,UAAI,iBAAiB,WAAW,SAAS,SAAS,eAAe;AACjE,UAAI,mBAAmB,WAAW,WAAW,SAAS,eAAe;AACrE,UAAI,iBAAiB,WAAW,SAAS,SAAS,eAAe;AACjE,UAAI,eAAe,WAAW,OAAO,SAAS,eAAe;AAC7D,UAAI,eAAe,WAAW,SAAS,SAAS;AAChD,UAAI,iBAAiB,WAAW,WAAW,SAAS;AACpD,UAAI,eAAe,WAAW,SAAS,SAAS;AAChD,UAAI,aAAa,WAAW,OAAO,SAAS;AAE5C,aAAO,kBAAkB,kBAAkB,oBAAoB,cAAc;AACzE,cAAM,OAAO,MAAM,UAAU;AAAA,UACzB;AAAA,YACI,OAAO;AAAA,YACP,WAAW;AAAA,cACP,QAAQ,WAAW;AAAA,cACnB,WAAW;AAAA,cACX;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACJ;AAAA,UACJ;AAAA,UACA,CAAC,SAAS,KAAK,QAAQ,eAAe;AAAA,QAC1C;AAEA,mBAAW,QAAQ,MAAM,KAAK,GAAI,KAAK,SAAS,SAAS,CAAC,CAAE;AAC5D,mBAAW,WAAW,MAAM,KAAK,GAAI,KAAK,WAAW,SAAS,CAAC,CAAE;AACjE,mBAAW,SAAS,MAAM,KAAK,GAAI,KAAK,SAAS,SAAS,CAAC,CAAE;AAC7D,mBAAW,OAAO,MAAM,KAAK,GAAI,KAAK,OAAO,SAAS,CAAC,CAAE;AACzD,yBAAiB,KAAK,SAAS,SAAS,eAAe;AACvD,2BAAmB,KAAK,WAAW,SAAS,eAAe;AAC3D,yBAAiB,KAAK,SAAS,SAAS,eAAe;AACvD,uBAAe,KAAK,OAAO,SAAS,eAAe;AACnD,uBAAe,KAAK,SAAS,SAAS;AACtC,yBAAiB,KAAK,WAAW,SAAS;AAC1C,uBAAe,KAAK,SAAS,SAAS;AACtC,qBAAa,KAAK,OAAO,SAAS;AAAA,MACtC;AAAA,IACJ;AAEA,gBAAY,SAAS,MAAM,QAAQ,CAAC,WAAW;AAC3C,cAAQ,OAAO,IAAI,IAAI,wBAAwB,QAAQ,OAAO;AAAA,IAClE,CAAC;AAED,WAAO;AAAA,EACX;AAAA,EACA,MAAM,wBAAwB,WAAW,CAAC,KAAK,MAAM,GAAG;AACpD,UAAM,aAAa,MAAM,UAAU;AAAA,MAC/B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,WAAW;AAAA,QACf;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,QAAQ,eAAe;AAAA,IAC1C;AAEA,QAAI,iBAAiB,WAAW,SAAS,SAAS,eAAe;AACjE,QAAI,mBAAmB,WAAW,WAAW,SAAS,eAAe;AACrE,QAAI,iBAAiB,WAAW,SAAS,SAAS,eAAe;AACjE,QAAI,eAAe,WAAW,OAAO,SAAS,eAAe;AAC7D,QAAI,eAAe,WAAW,SAAS,SAAS;AAChD,QAAI,iBAAiB,WAAW,WAAW,SAAS;AACpD,QAAI,eAAe,WAAW,SAAS,SAAS;AAChD,QAAI,aAAa,WAAW,OAAO,SAAS;AAE5C,WAAO,kBAAkB,kBAAkB,oBAAoB,cAAc;AACzE,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP;AAAA,YACA,WAAW;AAAA,YACX;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,QAAQ,eAAe;AAAA,MAC1C;AAEA,iBAAW,QAAQ,MAAM,KAAK,GAAI,KAAK,SAAS,SAAS,CAAC,CAAE;AAC5D,iBAAW,WAAW,MAAM,KAAK,GAAI,KAAK,WAAW,SAAS,CAAC,CAAE;AACjE,iBAAW,SAAS,MAAM,KAAK,GAAI,KAAK,SAAS,SAAS,CAAC,CAAE;AAC7D,iBAAW,OAAO,MAAM,KAAK,GAAI,KAAK,OAAO,SAAS,CAAC,CAAE;AACzD,uBAAiB,KAAK,SAAS,SAAS,eAAe;AACvD,yBAAmB,KAAK,WAAW,SAAS,eAAe;AAC3D,uBAAiB,KAAK,SAAS,SAAS,eAAe;AACvD,qBAAe,KAAK,OAAO,SAAS,eAAe;AACnD,qBAAe,KAAK,SAAS,SAAS;AACtC,uBAAiB,KAAK,WAAW,SAAS;AAC1C,qBAAe,KAAK,SAAS,SAAS;AACtC,mBAAa,KAAK,OAAO,SAAS;AAAA,IACtC;AAEA,WAAO,wBAAwB,YAAY,qBAAqB,GAAG,CAAC;AAAA,EACxE;AAAA,EACA,MAAM,wBAAwB,WAAW,CAAC,KAAK,QAAQ,MAAM,GAAG;AAC5D,UAAM,aAAa,MAAM,UAAU;AAAA,MAC/B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,WAAW;AAAA,UACX;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,QAAQ,eAAe,QAAQ;AAAA,IAClD;AAEA,WAAO,wBAAwB,UAAU;AAAA,EAC7C;AAAA,EACA,MAAM,gBAAgB,WAAW,CAAC,OAAO,EAAE,QAAQ,aAAa,QAAQ,GAAG,QAAQ,KAAK,GAAG;AACvF,QAAI;AACJ,QAAI;AAEJ,QAAI,aAAa;AACb,UAAI,aAAa,aAAa;AAC1B,qBAAa,YAAY;AAAA,MAC7B,WAAW,gBAAgB,aAAa;AACpC,qBAAa,GAAG,YAAY,WAAW,OAAO,KAAK,YAAY,WAAW,MAAM;AAAA,MACpF,WAAW,gBAAgB,aAAa;AACpC,qBAAa,YAAY;AAAA,MAC7B;AAEA,eAAS;AAAA,QACL,WACI,eAAe,cACT,YAAY,YACZ,cAAc,cACZ,CAAC,YAAY,QAAQ,IACrB;AAAA,QACZ,MAAM;AAAA,QACN,OACI,iBAAiB,cACX,YAAY,cACZ,kBAAkB,cAChB,YAAY,eACZ;AAAA,MAChB;AAGA,YAAM,qBAAqB,CAAC,YAAY,YAAY,aAAa,SAAS;AAE1E,iBAAW,qBAAqB,oBAAoB;AAChD,YAAI,qBAAqB,aAAa;AAClC,gBAAM,IAAI,sBAAsB,mBAAmB,iBAAiB;AAAA,QACxE;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,EAAE,OAAO,SAAS,SAAS,IAAI,MAAM,UAAU;AAAA,MACjD;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA;AAAA,UACA,SAAS,SAAS;AAAA,UAClB,aAAa,SAAS;AAAA,UACtB,aAAa,SAAS;AAAA,UACtB,WAAW,SAAS;AAAA,UACpB,yBAAyB,SAAS;AAAA,UAClC,mBAAmB,SAAS;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS;AAAA,IAC5B;AAEA,WAAO;AAAA,MACH,aAAa,SAAS;AAAA,MACtB,YAAY,SAAS;AAAA,MACrB,MAAM,QAAQ,IAAI,CAAC,YAAY;AAAA,QAC3B,MAAM,gCAAgC,QAAQ,WAAW,CAAC,CAAC;AAAA,MAC/D,EAAE;AAAA,IACN;AAAA,EACJ;AAAA,EACA,MAAM,UAAU,WAAW,CAAC,IAAI,OAAO,GAAG;AACtC,QAAI;AACA,YAAM,SAAS,MAAM,UAAU;AAAA,QAC3B;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP;AAAA,YACA,SAAS,SAAS;AAAA,YAClB,aAAa,SAAS;AAAA,YACtB,aAAa,SAAS;AAAA,YACtB,WAAW,SAAS;AAAA,YACpB,yBAAyB,SAAS;AAAA,YAClC,mBAAmB,SAAS;AAAA,YAC5B,UAAU,SAAS;AAAA,UACvB;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK;AAAA,MACnB;AAEA,aAAO;AAAA,QACH,MAAM,4BAA4B,QAAQ,WAAW,CAAC,CAAC;AAAA,MAC3D;AAAA,IACJ,SAAS,GAAG;AACR,aAAO;AAAA,QACH,OAAO;AAAA,UACH,MAAM;AAAA,UACN,WAAW;AAAA,QACf;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,iBAAiB,WAAW,CAAC,IAAI,SAAS,OAAO,GAAG;AACtD,UAAM,OAAO,MAAM,UAAU,aAAa;AAAA,MACtC,OAAO;AAAA,MACP,WAAW;AAAA,QACP;AAAA,QACA;AAAA,QACA,SAAS,SAAS;AAAA,QAClB,aAAa,SAAS;AAAA,QACtB,aAAa,SAAS;AAAA,QACtB,WAAW,SAAS;AAAA,QACpB,yBAAyB,SAAS;AAAA,QAClC,mBAAmB,SAAS;AAAA,QAC5B,UAAU,SAAS;AAAA,MACvB;AAAA,IACJ,CAAC;AAED,QAAI,CAAC,KAAK,SAAS;AACf,aAAO;AAAA,QACH,SAAS;AAAA,QACT,QAAQ;AAAA,MACZ;AAAA,IACJ;AAEA,QAAI,CAAC,KAAK,QAAQ;AACd,aAAO,KAAK,QAAQ,UAAU,OAAO,OAAO,IACtC;AAAA,QACI,QAAQ;AAAA,QACR,SAAS;AAAA,UACL,eAAe,OAAO,OAAO;AAAA,UAC7B,gBAAgB,OAAO,KAAK,QAAQ,OAAO;AAAA,UAC3C,WAAW,KAAK,QAAQ;AAAA,QAC5B;AAAA,MACJ,IACA;AAAA,QACI,QAAQ;AAAA,QACR,SAAS,CAAC,KAAK,QAAQ,SAAS,OAAO,OAAO,CAAC;AAAA,MACnD;AAAA,IACV;AAEA,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,SAAS,4BAA4B,KAAK,QAAQ,WAAW,CAAC,CAAC;AAAA,IACnE;AAAA,EACJ;AAAA,EACA,MAAM,gBAAgB,WAAW,CAAC,KAAK,OAAO,GAAG;AAC7C,UAAM,UAAU,MAAM,UAAU;AAAA,MAC5B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,SAAS,SAAS;AAAA,UAClB,aAAa,SAAS;AAAA,UACtB,aAAa,SAAS;AAAA,UACtB,WAAW,SAAS;AAAA,UACpB,yBAAyB,SAAS;AAAA,UAClC,mBAAmB,SAAS;AAAA,UAC5B,UAAU,SAAS;AAAA,UACnB,OAAO,IAAI;AAAA,QACf;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS;AAAA,IAC5B;AAEA,WAAO,QAAQ,IAAI,CAAC,YAAY;AAAA,MAC5B,MAAM,4BAA4B,QAAQ,WAAW,CAAC,CAAC;AAAA,IAC3D,EAAE;AAAA,EACN;AAAA,EACA,MAAM,uBAAuB,WAAW,CAAC,EAAE,QAAQ,QAAQ,GAAG,QAAQ,QAAQ,IAAI,UAAU,GAAG;AAC3F,UAAM,aAA4D,aAC5D;AAAA,MACI,MAAM;AAAA,MACN,QAAQ;AAAA,IACZ,IACA;AAAA,MACI,OAAO;AAAA,MACP,OAAO;AAAA,IACX;AAEN,UAAM,qBAAqB,CAAC,mBAAmB,oBAAoB,mBAAmB;AAEtF,QAAI,QAAQ;AACR,iBAAW,qBAAqB,oBAAoB;AAChD,YAAI,qBAAqB,QAAQ;AAC7B,gBAAM,IAAI,sBAAsB,0BAA0B,iBAAiB;AAAA,QAC/E;AAAA,MACJ;AAAA,IACJ;AAGA,QAAI;AACJ,QAAI,qBAAqB,QAAQ;AAC7B,cAAQ,OAAO,iBAAwC;AAAA,QACnD,KAAK;AACD,yCAA+B,0BAA0B;AACzD;AAAA,QACJ,KAAK;AACD,yCAA+B,0BAA0B;AACzD;AAAA,QACJ,KAAK;AACD,yCACI,0BAA0B;AAC9B;AAAA,QACJ,KAAK;AACD,yCAA+B,0BAA0B;AACzD;AAAA,QACJ,KAAK;AACD,yCAA+B,0BAA0B;AACzD;AAAA,QACJ,KAAK;AACD,yCAA+B,0BAA0B;AACzD;AAAA,MACR;AAAA,IACJ;AAEA,UAAM,EAAE,OAAO,mBAAmB,SAAS,IAAI,MAAM,UAAU;AAAA,MAC3D;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,GAAG;AAAA,UACH,oBAAoB,SAAS;AAAA,UAC7B,aAAa,SAAS;AAAA,UACtB,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB,mBAAmB,SAAS;AAAA,UAC5B,gBAAgB,SAAS;AAAA,UACzB,cAAc,SAAS;AAAA,UACvB,QAAQ,SACF;AAAA,YACI,cACI,gBAAgB,SACV,OAAO,SAAS,OAAO,UAAU,IACjC;AAAA,YACV,UACI,kBAAkB,SACZ,GAAG,OAAO,aAAa,OAAO,KAAK,OAAO,aAAa,MAAM,KAAK,OAAO,aAAa,QAAQ,KAC9F;AAAA,YACV,aAAa,iBAAiB,SAAS,OAAO,cAAc;AAAA,YAC5D,eACI,mBAAmB,SAAS,OAAO,gBAAgB;AAAA,YACvD,aAAa,iBAAiB,SAAS,OAAO,cAAc;AAAA,YAC5D,aAAa,eAAe,SAAS,OAAO,YAAY;AAAA,YACxD,MAAM;AAAA,UACV,IACA,CAAC;AAAA,QACX;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,eAAW,oBAAoB,mBAAmB;AAC9C,YAAM,8BAA8B,WAAW,gBAAgB;AAAA,IACnE;AAEA,QAAI,WAAW,MAAM;AACjB,wBAAkB,QAAQ;AAAA,IAC9B;AAEA,WAAO;AAAA,MACH,aAAa,WAAW,OAAO,SAAS,kBAAkB,SAAS;AAAA,MACnE,YAAY,WAAW,OAAO,SAAS,cAAc,SAAS;AAAA,MAC9D,MAAM,kBAAkB;AAAA,QAAI,CAAC,qBACzB,gDAAgD,kBAAkB,WAAW,CAAC,CAAC;AAAA,MACnF;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,oBAAoB,WAAW,CAAC,QAAQ,OAAO,GAAG;AACpD,UAAM,mBAAmB,MAAM,UAAU;AAAA,MACrC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,oBAAoB,SAAS;AAAA,UAC7B,aAAa,SAAS;AAAA,UACtB,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB,mBAAmB,SAAS;AAAA,UAC5B,gBAAgB,SAAS;AAAA,UACzB,cAAc,SAAS;AAAA,QAC3B;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,UAAM,8BAA8B,WAAW,gBAAgB;AAE/D,WAAO,gDAAgD,kBAAkB,OAAO;AAAA,EACpF;AAAA,EAEA,MAAM,0BAA0B,WAAW,CAAC,SAAS,OAAO,GAAG;AAC3D,UAAM,oBAAoB,MAAM,UAAU;AAAA,MACtC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,oBAAoB,SAAS;AAAA,UAC7B,aAAa,SAAS;AAAA,UACtB,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB,mBAAmB,SAAS;AAAA,UAC5B,gBAAgB,SAAS;AAAA,UACzB,cAAc,SAAS;AAAA,UACvB,OAAO,QAAQ;AAAA,QACnB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,mBAAmB;AAAA,IACtC;AAEA,eAAW,oBAAoB,mBAAmB;AAC9C,YAAM,8BAA8B,WAAW,gBAAgB;AAAA,IACnE;AAEA,WAAO,kBAAkB;AAAA,MAAI,CAAC,qBAC1B,gDAAgD,kBAAkB,OAAO;AAAA,IAC7E;AAAA,EACJ;AAAA,EACA,MAAM,0BAA0B,WAA4B;AACxD,WAAO,UAAU;AAAA,MACb;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,OAAO,KAAK,YAAY,wBAAyB;AAAA,IAC/D;AAAA,EACJ;AAAA,EACA,MAAM,qBAAqB,WAAW;AAClC,UAAM,QAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,QACI,OAAO;AAAA,QACP,WAAW,CAAC;AAAA,MAChB;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,WAAO,OAAO,MAAM,iBAAiB;AAAA,EACzC;AAAA,EACA,MAAM,UAAU,WAAW,CAAC,KAAK,GAAG;AAChC,UAAM,SAAS,MAAM,UAAU;AAAA,MAC3B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,SAAS,aAAa;AAAA,IACzC;AAEA,WAAO,0BAA0B,MAAM;AAAA,EAC3C;AAAA,EACA,MAAM,eAAe,WAAW,CAAC,aAAa,GAAG;AAC7C,UAAM,SAAS,MAAM,UAAU;AAAA,MAC3B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,KAAK;AAAA,QACT;AAAA,MACJ;AAAA,MACA,CAAC,SACG,KAAK,SAAS,MACT,IAAI,CAAC,SAAS,MAAM,cAAc,YAAa,EAC/C,OAAO,OAAO;AAAA,IAC3B;AAEA,WAAO,0BAA0B,MAAM;AAAA,EAC3C;AAAA,EACA,MAAM,2BAA2B,WAAW;AACxC,UAAM,cAAc,MAAM,UAAU;AAAA,MAChC;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAGA,QAAI,0BACA,YAAY,cAAc,kBAAkB,SAAS,eAAe;AACxE,QAAI,wBAAwB,YAAY,cAAc,kBAAkB,SAAS;AACjF,WAAO,yBAAyB;AAC5B,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,IAAI,YAAY;AAAA,YAChB,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK;AAAA,MACnB;AACA,kBAAY,cAAc,kBAAkB,MAAM;AAAA,QAC9C,GAAI,KAAK,cAAc,kBAAkB,SAAS,CAAC;AAAA,MACvD;AACA,gCACI,KAAK,cAAc,kBAAkB,SAAS,eAAe;AACjE,8BAAwB,KAAK,cAAc,kBAAkB,SAAS;AAAA,IAC1E;AAGA,QAAI,0BACA,YAAY,cAAc,kBAAkB,SAAS,eAAe;AACxE,QAAI,wBAAwB,YAAY,cAAc,kBAAkB,SAAS;AACjF,WAAO,yBAAyB;AAC5B,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,IAAI,YAAY;AAAA,YAChB,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK;AAAA,MACnB;AACA,kBAAY,cAAc,kBAAkB,MAAM;AAAA,QAC9C,GAAI,KAAK,cAAc,kBAAkB,SAAS,CAAC;AAAA,MACvD;AACA,gCACI,KAAK,cAAc,kBAAkB,SAAS,eAAe;AACjE,8BAAwB,KAAK,cAAc,kBAAkB,SAAS;AAAA,IAC1E;AAEA,WAAO;AAAA,MACH,IAAI;AAAA,QACA,kBAAkB,YAAY,cAAc,kBAAkB,MAAM;AAAA,UAChE;AAAA,QACJ;AAAA,QACA,kBAAkB,YAAY,cAAc,kBAAkB,OAAO;AAAA,UACjE,CAAC,GAAG,UAAU,MAAM,SAAS;AAAA,QACjC;AAAA,QACA,kBAAkB,YAAY,cAAc,iBAAiB,OACvD,OAAO,CAAC,cAAc,UAAU,MAAM,EACvC,IAAI,CAAC,cAAc;AAAA,UAChB,UAAU,QAAQ;AAAA,UAClB,UAAU,OAAQ,SAAS;AAAA,QAC/B,CAAC;AAAA,QACL,OAAO,OAAO,YAAY,OAAO;AAAA,QACjC,iBAAiB;AAAA,UACb,IAAI,KAAK,YAAY,YAAY,EAAE,QAAQ,IACvC,IAAI,KAAK,YAAY,cAAc,EAAE,QAAQ;AAAA,QACrD;AAAA,QACA,uBAAuB,OAAO,IAAI,KAAK,YAAY,cAAc,EAAE,QAAQ,CAAC;AAAA,QAC5E,mBAAmB,OAAO,YAAY,cAAc,iBAAiB;AAAA,QACrE,iBAAiB,OAAO,YAAY,eAAe;AAAA,QACnD,mBAAmB,OAAO,YAAY,iBAAiB;AAAA,QACvD,mBAAmB,OAAO,YAAY,kBAAkB,iBAAiB;AAAA,QACzE,mBAAmB,OAAO,YAAY,kBAAkB,iBAAiB;AAAA,QACzE,0BAA0B;AAAA,UACtB,YAAY,kBAAkB;AAAA,QAClC;AAAA,QACA,6BAA6B;AAAA,UACzB,YAAY,cAAc;AAAA,QAC9B;AAAA,QACA,iBACI,YAAY,cAAc,iBAAiB,IAAI,CAAC,QAAQ,OAAO,GAAG,CAAC,KAAK,CAAC;AAAA,QAC7E,iBAAiB,OAAO,YAAY,iBAAiB,eAAe;AAAA,QACpE,mBAAmB,OAAO,YAAY,iBAAiB;AAAA,QACvD,UAAU,YAAY,UAAU;AAAA,QAChC,4BAA4B;AAAA,UACxB,YAAY,UAAU,YAAY;AAAA,QACtC;AAAA,QACA,kCAAkC;AAAA,UAC9B,YAAY,UAAU,YAAY;AAAA,QACtC;AAAA,QACA,iCAAiC;AAAA,UAC7B,YAAY,UAAU,YAAY;AAAA,QACtC;AAAA,QACA,wBAAwB,OAAO,YAAY,UAAU,YAAY,aAAa;AAAA,QAC9E,wBAAwB,OAAO,YAAY,UAAU,YAAY,WAAW;AAAA,QAC5E,yBAAyB,OAAO,YAAY,cAAc,uBAAuB;AAAA,QACjF,iCAAiC;AAAA,UAC7B,YAAY,aAAa;AAAA,QAC7B;AAAA,QACA,sCAAsC;AAAA,UAClC,YAAY,aAAa;AAAA,QAC7B;AAAA,QACA,oBAAoB,OAAO,YAAY,kBAAkB;AAAA,QACzD,YAAY,YAAY,cAAc;AAAA,QACtC,yBACI,YAAY,cAAc,yBAAyB,SAAS;AAAA,QAChE,8BACI,YAAY,kBAAkB;AAAA,QAClC,4BACI,YAAY,kBAAkB;AAAA,QAClC,wBAAwB,CAAC;AAAA;AAAA,QACzB,gCACI,YAAY,kBAAkB;AAAA,QAClC,uBAAuB,YAAY,cAAc;AAAA,QACjD,iBAAiB,YAAY,cAAc;AAAA,QAC3C,2BAA2B,YAAY,cAAc;AAAA,QACrD,uBAAuB,YAAY,cAAc;AAAA,MACrD;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,YAAY,WAAW,CAAC,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC7D,UAAM,aAAiD,aACjD,EAAE,MAAM,OAAO,QAAQ,OAAgB,IACvC,EAAE,OAAO,OAAO,OAAO,OAAgB;AAE7C,UAAM,SAA8C;AAAA,MAChD,QAAQ,YAAY,QAAQ,MAAM,SAAS;AAAA,MAC3C,mBAAmB,iBAAiB,QAAQ,MAAM,cAAc;AAAA,MAChE,WAAW,mBAAmB,QAAQ,MAAM,gBAAgB;AAAA,MAC5D,gBACI,gBAAgB,QACV,GAAG,MAAM,WAAW,OAAO,KAAK,MAAM,WAAW,MAAM,KACvD;AAAA,IACd;AAEA,QAAI,mBAAmB,OAAO;AAC1B,aAAO,YAAY,MAAM;AAAA,IAC7B,WAAW,qBAAqB,OAAO;AACnC,aAAO,YAAY,GAAG,MAAM,gBAAgB,OAAO,KAAK,MAAM,gBAAgB,MAAM;AAAA,IACxF;AAEA,UAAM,qBAAqB;AAAA,MACvB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACJ;AAEA,QAAI,OAAO;AACP,iBAAW,qBAAqB,oBAAoB;AAChD,YAAI,qBAAqB,OAAO;AAC5B,gBAAM,IAAI,sBAAsB,eAAe,iBAAiB;AAAA,QACpE;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,EAAE,OAAO,QAAQ,SAAS,IAAI,MAAM,UAAU;AAAA,MAChD;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,GAAG;AAAA,UACH;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,WAAW,MAAM;AACjB,aAAO,QAAQ;AAAA,IACnB;AAEA,WAAO;AAAA,MACH,aAAa,WAAW,OAAO,SAAS,kBAAkB,SAAS;AAAA,MACnE,YAAa,WAAW,OAAO,SAAS,cAAc,SAAS;AAAA,MAC/D,MAAM,OAAO,IAAI,CAAC,WAAW;AAAA,QACzB,KAAK,MAAM;AAAA,QACX,aAAa;AAAA,QACb,IAAI;AAAA,UACA,UAAU;AAAA;AAAA,UACV,UAAU;AAAA;AAAA,QACd;AAAA,QACA,WAAW,MAAM,eAAe,QAAQ;AAAA,QACxC,YAAY,MAAM;AAAA,QAClB,QAAQ,MAAM,QAAQ;AAAA,QACtB,aAAa,IAAI,KAAK,MAAM,SAAS,EAAE,QAAQ,EAAE,SAAS;AAAA,QAC1D,mBAAmB,GAAG,MAAM,eAAe,QAAQ,OAAO,KAAK,MAAM,eAAe,IAAI;AAAA,QACxF,MAAM,kBAAkB,MAAM,MAAM,IAAI;AAAA,MAC5C,EAAE;AAAA,IACN;AAAA,EACJ;AAAA,EACA,MAAM,2BAA2B,WAAW,CAAC,QAAQ,mBAAmB,QAAQ,GAAG;AAC/E,UAAM,EAAE,aAAa,OAAO,QAAQ,IAAI,MAAM,UAAU;AAAA,MACpD;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,SAAS;AAAA,UACT,QAAQ;AAAA,YACJ,UAAU,OAAO,SAAS,QAAQ;AAAA,YAClC;AAAA,UACJ;AAAA,UACA,aAAa;AAAA,UACb,YAAY;AAAA,QAChB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,CAAC,aAAa;AACd,YAAM,IAAI,MAAM,iCAAiC;AAAA,IACrD;AAEA,UAAM,SAAS,gDAAgD,aAAa;AAAA,MACxE,aAAa;AAAA,MACb,YAAY;AAAA,IAChB,CAAC;AAED,WAAO;AAAA,MACH;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,SAAS,SAAS,IAAI,CAACA,aAAY;AAAA,QAC/B,yBAAyBA,QAAO,mBAAmB;AAAA,UAC/C,CAAC,QAA0C;AAAA,YACvC,IAAI,MAAM,eAAe,YACnB,YACA,IAAI,MAAM,eAAe,UACvB;AAAA,cACI,OAAO,IAAI,MAAM;AAAA,YACrB,IACA,OAAO,IAAI,MAAM,gBAAgB,WAC/B;AAAA,cACI,cAAc,CAAC,IAAI,MAAM,KAAK,IAAI,MAAM,WAAY;AAAA,YAIxD,IACA;AAAA,cACI,QAAQ,IAAI,MAAM;AAAA,YACtB;AAAA,YACV,MAAM,KAAK,WAAW,IAAI,GAAG,CAAC;AAAA,YAC9B,kBAAkB,IAAI,KAAK,IAAI;AAAA,UACnC;AAAA,QACJ;AAAA,QACA,cAAcA,QAAO,cAAc,IAAI,CAAC,UAAU;AAAA,UAC9C,MAAM,KAAK,WAAW,MAAM,GAAG,CAAC;AAAA,UAChC,kBAAkB,MAAM,KAAK,IAAI;AAAA,QACrC,CAAC;AAAA,MACL,EAAE;AAAA,IACN;AAAA,EACJ;AAAA,EACA,MAAM,iBAAiB,WAAW,CAAC,UAAU,QAAQ,KAAK,GAAG;AACzD,UAAM,EAAE,OAAO,QAAQ,SAAS,IAAI,MAAM,UAAU;AAAA,MAChD;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,OAAO;AAAA,UACP;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,OAAO;AAAA,IAC1B;AAEA,WAAO;AAAA,MACH,MAAM,OAAO,IAAI,CAAC,WAAW;AAAA,QACzB,SAAS,MAAM,MAAM;AAAA,QACrB,aAAa;AAAA,QACb,QAAS,MAAM,OAAO,eAAe,eAC/B,MAAM,MAAM,SACZ;AAAA,QACN,MAAM;AAAA,UACF,MAAM,kBAAkB,MAAM,MAAM,KAAK,IAAI;AAAA,UAC7C,OAAO,MAAM,MAAM;AAAA,QACvB;AAAA,QACA,UACI,MAAM,OAAO,eAAe,eAAe,MAAM,MAAM,UAAU;AAAA,QACrE,YAAa,MAAM,OAAO,eAAe,eACnC,MAAM,MAAM,UAAU,KAAK,OAC3B,MAAM,OAAO,KAAK;AAAA,QACxB,MAAM,MAAM,OAAO,eAAe,eAAe,kBAAkB;AAAA,QACnE,SAAU,MAAM,OAAO,eAAe,eAChC,MAAM,MAAM,UACZ;AAAA,MACV,EAAE;AAAA,MACF,YAAY,SAAS,aAAa;AAAA,MAClC,aAAa,SAAS;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,MAAM,wBAAwB,WAAW,QAAQ;AAC7C,WAAO,MAAM,sBAAuB,WAAW,MAAM;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA,EAIA,MAAM,sBAAsB,WAAW,CAAC,UAAU,IAAI,GAAG;AACrD,WAAO,MAAM,sBAAuB,WAAW;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA;AAAA,QAEI,SAAS;AAAA,QACT,aAAa;AAAA,QACb,aAAa;AAAA,QACb,WAAW;AAAA,QACX,yBAAyB;AAAA,QACzB,mBAAmB;AAAA,QACnB,UAAU;AAAA,MACd;AAAA,IACJ,CAAC;AAAA,EACL;AAAA,EAEA,MAAM,wBAAwB,WAAW,CAAC,SAAS,YAAY,OAAO,GAAG;AACrE,UAAM,EAAE,SAAS,OAAO,IAAI,MAAM,UAAU;AAAA,MACxC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA,oBAAoB,SAAS;AAAA,UAC7B,aAAa,SAAS;AAAA,UACtB,YAAY,SAAS;AAAA,UACrB,WAAW,SAAS;AAAA,UACpB,mBAAmB,SAAS;AAAA,UAC5B,gBAAgB,SAAS;AAAA,UACzB,cAAc,SAAS;AAAA,QAC3B;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,CAAC,SAAS,kBAAkB;AAC5B,YAAM,KAAK,YAAY,KAAK,WAAW,OAAO,CAAC;AAC/C,aAAO,EAAE,QAAQ,UAAU,QAAW,QAAQ,MAAM,GAAG,UAAU,EAAE;AAAA,IACvE;AAEA,UAAM,8BAA8B,WAAW,QAAQ,gBAAgB;AAEvE,WAAO;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EACA,MAAM,uBAAuB,WAAW,CAAC,OAAO,GAAG;AAC/C,UAAM,KAAK,YAAY,KAAK,WAAW,OAAO,CAAC;AAC/C,UAAM,EAAE,aAAa,MAAM,IAAI,MAAM,UAAU;AAAA,MAC3C;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA,oBAAoB;AAAA,UACpB,aAAa;AAAA,UACb,YAAY;AAAA,UACZ,WAAW;AAAA,UACX,mBAAmB;AAAA,QACvB;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,SAAS,CAAC,aAAa;AACvB,YAAM,IAAI,MAAM,SAAS,iCAAiC;AAAA,IAC9D;AAEA,UAAM,SAAS;AAAA,MACX,EAAE,GAAG,aAAa,QAAQ,MAAM,GAAG,UAAU,EAAE;AAAA,MAC/C;AAAA,QACI,oBAAoB;AAAA,QACpB,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,mBAAmB;AAAA,MACvB;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,OAAO,OAAO,aAAa;AAAA,MAC3B,gBAAgB,OAAO;AAAA,MACvB,SAAS,OAAO;AAAA,MAChB,QAAQ,OAAO;AAAA,MACf,eAAe,OAAO;AAAA,IAC1B;AAAA,EACJ;AAAA,EACA,MAAM,kCAAkC,WAAW;AAC/C,UAAM,iBAAiB,MAAM,UAAU;AAAA,MACnC;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,KAAK,YAAY;AAAA,IAC/B;AAEA,WAAO,eAAe,SAAS;AAAA,EACnC;AAAA,EACA,MAAM,cAAc,WAAW,CAAC,EAAE,GAAG;AACjC,UAAM,aAAa,MAAM,UAAU;AAAA,MAC/B;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,IACI,OAAO,OAAO,YAAY,gBAAgB,EAAE,IACtC;AAAA,YACI,gBAAgB,OAAO,SAAS,GAAG,SAAS,GAAG,EAAE;AAAA,UACrD,IACA;AAAA,YACI,QAAQ;AAAA,UACZ;AAAA,QACd;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,UAAM,wBAAwB,WAAW,UAAU;AACnD,WAAO,oCAAoC,UAAU;AAAA,EACzD;AAAA,EACA,MAAM,eAAe,WAAW,CAAC,QAAQ,OAAO,eAAe,GAAG;AAC9D,UAAM,aAAiD,kBACjD,EAAE,MAAM,OAAO,QAAQ,OAAgB,IACvC,EAAE,OAAO,OAAO,OAAO,OAAgB;AAE7C,UAAM,EAAE,OAAO,aAAa,SAAS,IAAI,MAAM,UAAU;AAAA,MACrD;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,GAAG;AAAA,QACP;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,eAAW,cAAc,aAAa;AAClC,YAAM,wBAAwB,WAAW,UAAU;AAAA,IACvD;AAEA,QAAI,WAAW,MAAM;AACjB,kBAAY,QAAQ;AAAA,IACxB;AAEA,WAAO;AAAA,MACH,aAAa,WAAW,OAAO,SAAS,kBAAkB,SAAS;AAAA,MACnE,YAAa,WAAW,OAAO,SAAS,cAAc,SAAS;AAAA,MAC/D,MAAM,YAAY,IAAI,CAAC,eAAe,oCAAoC,UAAU,CAAC;AAAA,IACzF;AAAA,EACJ;AAAA,EACA,MAAM,iBAAiB,WAAW,CAAC,KAAK,GAAG;AACvC,UAAM,EAAE,cAAc,QAAQ,IAAI,MAAM,UAAU;AAAA,MAC9C;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,SAAS,QAAQ,OAAO,SAAS,KAAK,IAAI;AAAA,QAC9C;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,cAAc,cAAc,kBAAkB,SAAS;AAC3D,QAAI,QAAQ,cAAc,kBAAkB,SAAS;AAErD,WAAO,aAAa;AAChB,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,SAAS,QAAQ,OAAO,SAAS,KAAK,IAAI;AAAA,YAC1C;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,OAAO,cAAc;AAAA,MACxC;AAEA,oBAAc,iBAAiB,MAAM,KAAK,GAAG,KAAK,KAAK;AACvD,oBAAc,KAAK,SAAS;AAC5B,cAAQ,KAAK,SAAS;AAAA,IAC1B;AAEA,WAAO;AAAA,MACH,OAAO,QAAQ,SAAS;AAAA,MACxB,YAAY,cAAc,kBAAkB,MAAM,IAAI,CAAC,QAAQ;AAAA,QAC3D,IAAI,aAAa;AAAA,QACjB,OAAO,IAAI,WAAW;AAAA,MAC1B,CAAC;AAAA,IACL;AAAA,EACJ;AAAA,EACA,MAAM,gBAAgB,WAAW;AAC7B,UAAM,QAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAGA,QAAI,8BACA,MAAM,cAAc,kBAAkB,SAAS;AACnD,QAAI,wBAAwB,MAAM,cAAc,kBAAkB,SAAS;AAC3E,WAAO,6BAA6B;AAChC,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,IAAI,MAAM;AAAA,YACV,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,OAAO,cAAc;AAAA,MACxC;AACA,YAAM,cAAc,kBAAkB,MAAM,KAAK,GAAG,KAAK,KAAK;AAC9D,oCAA8B,KAAK,SAAS;AAC5C,8BAAwB,KAAK,SAAS;AAAA,IAC1C;AAEA,QAAI,8BACA,MAAM,cAAc,kBAAkB,SAAS;AACnD,QAAI,wBAAwB,MAAM,cAAc,kBAAkB,SAAS;AAC3E,WAAO,6BAA6B;AAChC,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,IAAI,MAAM;AAAA,YACV,OAAO;AAAA,UACX;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,OAAO,cAAc;AAAA,MACxC;AACA,YAAM,cAAc,kBAAkB,MAAM,KAAK,GAAG,KAAK,KAAK;AAC9D,oCAA8B,KAAK,SAAS;AAC5C,8BAAwB,KAAK,SAAS;AAAA,IAC1C;AAGA,UAAM,sBACF,MAAM,cAAc,kBAAkB,MAAM,IAAI,CAAC,QAAQ,IAAI,QAAQ,OAAQ,KAAK,CAAC;AACvF,UAAM,4BACF,MAAM,cAAc,kBAAkB,MAAM,IAAI,CAAC,QAAQ,IAAI,QAAQ,OAAQ,KAAK,CAAC;AACvF,UAAM,6BAA6B,0BAA0B;AAAA,MAAI,CAAC,QAC9D,oBAAoB,QAAQ,GAAG,GAAG,SAAS;AAAA,IAC/C;AAEA,WAAO;AAAA,MACH,OAAO,OAAO,MAAM,OAAO;AAAA,MAC3B,YAAY,MAAM,cAAc,kBAAkB,MAAM;AAAA,QACpD;AAAA,MACJ;AAAA,MACA,kBAAkB;AAAA,MAClB,wBAAwB;AAAA;AAAA,MACxB,mBAAmB,MAAM,iBAAiB,MAAM,CAAC,GAAG,eAAe,SAAS;AAAA,MAC5E,gBAAgB;AAAA,MAChB,mBAAmB,MAAM;AAAA,MACzB,qBAAqB,IAAI,KAAK,MAAM,cAAc,EAAE,QAAQ,EAAE,SAAS;AAAA,IAC3E;AAAA,EACJ;AAAA,EACA,MAAM,iBAAiB,WAAW;AAC9B,UAAM,QAAQ,MAAM,UAAU;AAAA,MAC1B;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,QAAI,cAAc,MAAM,cAAc,kBAAkB,SAAS;AACjE,QAAI,QAAQ,MAAM,cAAc,kBAAkB,SAAS;AAE3D,WAAO,aAAa;AAChB,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,IAAI,MAAM;AAAA,YACV;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK;AAAA,MACnB;AAEA,YAAM,cAAc,kBAAkB,MAAM;AAAA,QACxC,GAAI,KAAK,cAAc,kBAAkB,SAAS,CAAC;AAAA,MACvD;AACA,oBAAc,KAAK,cAAc,kBAAkB,SAAS;AAC5D,cAAQ,KAAK,cAAc,kBAAkB,SAAS;AAAA,IAC1D;AAEA,WAAO;AAAA,MACH,OAAO,OAAO,MAAM,OAAO;AAAA,MAC3B,MAAM,MAAM,cAAc,kBAAkB,MAAM,IAAI,CAAC,eAAe;AAAA,QAClE,SAAS,UAAU,QAAQ;AAAA,QAC3B,KAAM,OAAO,UAAU,QAAQ,WAAW,UAAU,MAAM,MAAM;AAAA,MACpE,EAAE;AAAA,IACN;AAAA,EACJ;AAAA,EACA,MAAM,mBAAmB,WAA4B;AACjD,UAAM,aAAa,MAAM,UAAU;AAAA,MAC/B;AAAA,QACI,OAAO;AAAA,MACX;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,WAAO;AAAA,EACX;AAAA,EACA,MAAM,kBAAkB,WAAW,CAAC,OAAO,GAAG;AAC1C,UAAM,iBAAiB,MAAM,UAAU;AAAA,MACnC;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,iBAAiB,UAAU,OAAO,SAAS,OAAO,IAAI;AAAA,QAC1D;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AAEA,UAAM,eAAwC,CAAC;AAC/C,UAAM,aAAyD,CAAC;AAEhE,UAAM,gBAAwC;AAAA,MAC1C,eAAe;AAAA,MACf,yBAAyB;AAAA,MACzB,wBAAwB;AAAA,MACxB,8BAA8B;AAAA,MAC9B,wBAAwB;AAAA,MACxB,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,MACpB,4BAA4B;AAAA,MAC5B,gCAAgC;AAAA,MAChC,uCAAuC;AAAA,MACvC,iCAAiC;AAAA,MACjC,qCAAqC;AAAA,MACrC,+BAA+B;AAAA,MAC/B,8BAA8B;AAAA,MAC9B,gCAAgC;AAAA,MAChC,uBAAuB;AAAA,MACvB,uBAAuB;AAAA,MACvB,yBAAyB;AAAA,MACzB,gCAAgC;AAAA,MAChC,mBAAmB;AAAA,MACnB,sBAAsB;AAAA,MACtB,oBAAoB;AAAA,MACpB,4BAA4B;AAAA,MAC5B,oBAAoB;AAAA,MACpB,kCAAkC;AAAA,MAClC,sBAAsB;AAAA,MACtB,sBAAsB;AAAA,MACtB,6BAA6B;AAAA,MAC7B,qBAAqB;AAAA,MACrB,0BAA0B;AAAA,MAC1B,yCAAyC;AAAA,MACzC,oBAAoB;AAAA,MACpB,gBAAgB;AAAA,IACpB;AAEA,eAAW,EAAE,KAAK,MAAM,KAAK,eAAe,SAAS;AACjD,iBAAW,GAAG,IACV,UAAU,OACJ,OACC;AAAA,QACG,CAAC,cAAc,GAAG,KAAK,KAAK,GAAG;AAAA,MACnC;AAAA,IACd;AAEA,eAAW,EAAE,KAAK,MAAM,KAAK,eAAe,cAAc;AACtD,mBAAa,GAAG,IAAI;AAAA,IACxB;AAEA,WAAO;AAAA,MACH,6BAA6B,eAAe,iBAAiB,SAAS;AAAA,MACtE,6BAA6B;AAAA,MAC7B,iBAAiB,eAAe,iBAAiB,SAAS;AAAA,MAC1D;AAAA,MACA;AAAA,IACJ;AAAA,EACJ;AAAA,EAEA,MAAM,2BAA2B,WAAW,CAAC,MAAM,GAAqB;AACpE,UAAM,6BAA6B,MAAM,UAAU;AAAA,MAC/C;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK;AAAA,IACnB;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,KAAK,WAAW,CAAC,cAAc,UAAU,QAAQ,GAAqC;AACxF,WAAO,MAAM,UAAU;AAAA,MACnB;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP;AAAA,UACA;AAAA,UACA,WAAW;AAAA,QACf;AAAA,MACJ;AAAA,MACA,CAAC,SAAS;AACN,YAAI,KAAK,aAAa,OAAO;AACzB,iBAAO;AAAA,YACH,gBAAgB,KAAK,aAAa;AAAA,UACtC;AAAA,QACJ,OAAO;AACH,iBAAO;AAAA,YACH,sBAAsB,KAAK,aAAa;AAAA,UAC5C;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;AAEO,MAAM,8BAA8B,MAAM;AAAA,EAC7C,YAAY,QAAgB,OAAe;AACvC,UAAM,aAAa,KAAK,yBAAyB,MAAM,qBAAqB;AAAA,EAChF;AACJ;AAEO,MAAM,+BAA+B,MAAM;AAAA,EAC9C,YAAY,QAAgB;AACxB,UAAM,UAAU,MAAM,sCAAsC;AAAA,EAChE;AACJ;AAEA,eAAe,8BACX,WACA,kBACF;AACE,MAAI,gBAAgB,iBAAiB,SAAS,QAAQ,SAAS,eAAe;AAC9E,MAAI,wBACA,iBAAiB,SAAS,gBAAgB,SAAS,eAAe;AACtE,MAAI,uBACA,iBAAiB,SAAS,eAAe,SAAS,eAAe;AACrE,MAAI,cAAc,iBAAiB,SAAS,QAAQ,SAAS;AAC7D,MAAI,sBAAsB,iBAAiB,SAAS,gBAAgB,SAAS;AAC7E,MAAI,qBAAqB,iBAAiB,SAAS,eAAe,SAAS;AAE3E,SAAO,iBAAiB,yBAAyB,sBAAsB;AACnE,UAAM,OAAO,MAAM,UAAU;AAAA,MACzB;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,QAAQ,iBAAiB;AAAA,UACzB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,kBAAkB;AAAA,IACrC;AAEA,qBAAiB,SAAS,QAAQ,MAAM,KAAK,GAAI,KAAK,QAAQ,SAAS,CAAC,CAAE;AAC1E,qBAAiB,SAAS,gBAAgB,MAAM,KAAK,GAAI,KAAK,gBAAgB,SAAS,CAAC,CAAE;AAC1F,qBAAiB,SAAS,eAAe,MAAM,KAAK,GAAI,KAAK,eAAe,SAAS,CAAC,CAAE;AACxF,oBAAgB,KAAK,QAAQ,SAAS,eAAe;AACrD,4BAAwB,KAAK,gBAAgB,SAAS,eAAe;AACrE,2BAAuB,KAAK,eAAe,SAAS,eAAe;AACnE,kBAAc,KAAK,QAAQ,SAAS;AACpC,0BAAsB,KAAK,gBAAgB,SAAS;AACpD,yBAAqB,KAAK,eAAe,SAAS;AAAA,EACtD;AACJ;AAEA,eAAe,wBACX,WACA,YACF;AACE,MAAI,cAAc,WAAW,kBAAkB,SAAS;AACxD,MAAI,QAAQ,WAAW,kBAAkB,SAAS;AAClD,SAAO,aAAa;AAChB,UAAM,OAAO,MAAM,UAAU;AAAA,MACzB;AAAA,QACI,OAAO;AAAA,QACP,WAAW;AAAA,UACP,IAAI,EAAE,QAAQ,WAAW,OAAQ;AAAA,UACjC;AAAA,QACJ;AAAA,MACJ;AAAA,MACA,CAAC,SAAS,KAAK,YAAY;AAAA,IAC/B;AAEA,eAAW,kBAAkB,MAAM,KAAK,GAAG,KAAK,KAAK;AACrD,kBAAc,KAAK,SAAS;AAC5B,YAAQ,KAAK,SAAS;AAAA,EAC1B;AAEA,QAAM,eAAe,WAAW,WAAW,MAAM,CAAC;AAElD,MACI,cAAc,MAAM,eAAe,2BACnC,aAAa,MAAM,aAAa,MAAM,CAAC,EAAE,eAAe,8BACxD,aAAa,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO,SACjD;AACE,UAAM,eAAe,aAAa,KAAK,aAAa,MAAM,CAAC,EAAE,MAAM;AACnE,QAAIC,eAAc,cAAc,iBAAiB,SAAS;AAC1D,QAAIC,SAAQ,cAAc,iBAAiB,SAAS;AAEpD,WAAOD,cAAa;AAChB,YAAM,OAAO,MAAM,UAAU;AAAA,QACzB;AAAA,UACI,OAAO;AAAA,UACP,WAAW;AAAA,YACP,SAAS,aAAa,KAAK,aAAa,MAAM,CAAC,EAAE,OAAO;AAAA,YACxD,OAAAC;AAAA,UACJ;AAAA,QACJ;AAAA,QACA,CAAC,SAAS,KAAK,OAAO,cAAc;AAAA,MACxC;AAEA,oBAAc,iBAAiB,MAAM,KAAK,GAAG,KAAK,KAAK;AACvD,MAAAD,eAAc,KAAK,UAAU;AAC7B,MAAAC,SAAQ,KAAK,UAAU;AAAA,IAC3B;AAAA,EACJ;AACJ;AAEA,eAAe,sBACX,WACA,CAAC,UAAU,MAAM,OAAO,GAC1B;AACE,QAAM,aAAa,MAAM,UAAU;AAAA,IAC/B;AAAA,MACI,OAAO;AAAA,MACP,WAAW;AAAA,QACP,MAAM,KAAK;AAAA,MACf;AAAA,IACJ;AAAA,IACA,CAAC,SAAS,KAAK,KAAK;AAAA,EACxB;AAEA,QAAM,UAAU,aAAa,KAAK,OAAO,UAAU;AAEnD,QAAM,SAAS,MAAM,UAAU;AAAA,IAC3B;AAAA,MACI,OAAO;AAAA,MACP,WAAW;AAAA,QACP;AAAA,QACA,MAAM;AAAA,UACF,MAAM,KAAK;AAAA,UACX,KAAK;AAAA,QACT;AAAA,QACA,SAAS,SAAS;AAAA,QAClB,aAAa,SAAS;AAAA,QACtB,aAAa,SAAS;AAAA,QACtB,WAAW,SAAS;AAAA,QACpB,yBAAyB,SAAS;AAAA,QAClC,mBAAmB,SAAS;AAAA,QAC5B,UAAU,SAAS;AAAA,MACvB;AAAA,IACJ;AAAA,IACA,CAAC,SAAS;AACN,aAAO,KAAK,OAAO,oBAAoB,OAAO,eAAe,eACvD,KAAK,MAAM,mBAAmB,MAAM,OAAO,eAAe,WACtD,KAAK,MAAM,mBAAmB,MAAM,MAAM,SAC1C,SACJ;AAAA,IACV;AAAA,EACJ;AAEA,SAAO;AAAA,IACH,MAAM;AAAA,MACF,SAAS,OAAO,eACV;AAAA,QACI,UAAU;AAAA,QACV,GAAI;AAAA,UACA,OAAO,cAAc,UAAU;AAAA,UAC/B,OAAO,cAAc,UAAU,KAAK;AAAA,QACxC;AAAA,MAMJ,IACA;AAAA,MACN,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,MAClB,MAAM,QAAQ,eACR,kBAAkB,OAAO,aAAa,UAAU,KAAK,IAAI,IACzD;AAAA,MACN,SAAS,QAAQ,QAAQ,SAAS;AAAA,MAClC,eAAe,OAAO;AAAA,MACtB,qBAAqB,OAAO,0BAA0B;AAAA,MACtD,OACI,OAAO,OAAO,eAAe,WACvB;AAAA,QACI,aAAa,OAAO,MAAM,QAAQ;AAAA,MACtC,IACA;AAAA,IACd;AAAA,EACJ;AACJ;",
6
6
  "names": ["result", "hasNextPage", "after"]
7
7
  }