@iota/graphql-transport 0.0.0-dev-20251015065834

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +248 -0
  2. package/LICENSE +201 -0
  3. package/README.md +104 -0
  4. package/dist/cjs/generated/queries.d.ts +9099 -0
  5. package/dist/cjs/generated/queries.js +3021 -0
  6. package/dist/cjs/generated/queries.js.map +7 -0
  7. package/dist/cjs/index.d.ts +1 -0
  8. package/dist/cjs/index.js +19 -0
  9. package/dist/cjs/index.js.map +7 -0
  10. package/dist/cjs/mappers/bcs.d.ts +4 -0
  11. package/dist/cjs/mappers/bcs.js +71 -0
  12. package/dist/cjs/mappers/bcs.js.map +7 -0
  13. package/dist/cjs/mappers/checkpoint.d.ts +3 -0
  14. package/dist/cjs/mappers/checkpoint.js +64 -0
  15. package/dist/cjs/mappers/checkpoint.js.map +7 -0
  16. package/dist/cjs/mappers/display.d.ts +8 -0
  17. package/dist/cjs/mappers/display.js +43 -0
  18. package/dist/cjs/mappers/display.js.map +7 -0
  19. package/dist/cjs/mappers/move.d.ts +57 -0
  20. package/dist/cjs/mappers/move.js +231 -0
  21. package/dist/cjs/mappers/move.js.map +7 -0
  22. package/dist/cjs/mappers/object.d.ts +10 -0
  23. package/dist/cjs/mappers/object.js +79 -0
  24. package/dist/cjs/mappers/object.js.map +7 -0
  25. package/dist/cjs/mappers/owner.d.ts +3 -0
  26. package/dist/cjs/mappers/owner.js +48 -0
  27. package/dist/cjs/mappers/owner.js.map +7 -0
  28. package/dist/cjs/mappers/stakes.d.ts +3 -0
  29. package/dist/cjs/mappers/stakes.js +48 -0
  30. package/dist/cjs/mappers/stakes.js.map +7 -0
  31. package/dist/cjs/mappers/transaction-block.d.ts +7 -0
  32. package/dist/cjs/mappers/transaction-block.js +487 -0
  33. package/dist/cjs/mappers/transaction-block.js.map +7 -0
  34. package/dist/cjs/mappers/util.d.ts +2 -0
  35. package/dist/cjs/mappers/util.js +31 -0
  36. package/dist/cjs/mappers/util.js.map +7 -0
  37. package/dist/cjs/mappers/validator.d.ts +3 -0
  38. package/dist/cjs/mappers/validator.js +64 -0
  39. package/dist/cjs/mappers/validator.js.map +7 -0
  40. package/dist/cjs/methods.d.ts +19 -0
  41. package/dist/cjs/methods.js +1377 -0
  42. package/dist/cjs/methods.js.map +7 -0
  43. package/dist/cjs/package.json +5 -0
  44. package/dist/cjs/transport.d.ts +44 -0
  45. package/dist/cjs/transport.js +155 -0
  46. package/dist/cjs/transport.js.map +7 -0
  47. package/dist/esm/generated/queries.d.ts +9099 -0
  48. package/dist/esm/generated/queries.js +3001 -0
  49. package/dist/esm/generated/queries.js.map +7 -0
  50. package/dist/esm/index.d.ts +1 -0
  51. package/dist/esm/index.js +2 -0
  52. package/dist/esm/index.js.map +7 -0
  53. package/dist/esm/mappers/bcs.d.ts +4 -0
  54. package/dist/esm/mappers/bcs.js +51 -0
  55. package/dist/esm/mappers/bcs.js.map +7 -0
  56. package/dist/esm/mappers/checkpoint.d.ts +3 -0
  57. package/dist/esm/mappers/checkpoint.js +44 -0
  58. package/dist/esm/mappers/checkpoint.js.map +7 -0
  59. package/dist/esm/mappers/display.d.ts +8 -0
  60. package/dist/esm/mappers/display.js +23 -0
  61. package/dist/esm/mappers/display.js.map +7 -0
  62. package/dist/esm/mappers/move.d.ts +57 -0
  63. package/dist/esm/mappers/move.js +211 -0
  64. package/dist/esm/mappers/move.js.map +7 -0
  65. package/dist/esm/mappers/object.d.ts +10 -0
  66. package/dist/esm/mappers/object.js +59 -0
  67. package/dist/esm/mappers/object.js.map +7 -0
  68. package/dist/esm/mappers/owner.d.ts +3 -0
  69. package/dist/esm/mappers/owner.js +28 -0
  70. package/dist/esm/mappers/owner.js.map +7 -0
  71. package/dist/esm/mappers/stakes.d.ts +3 -0
  72. package/dist/esm/mappers/stakes.js +28 -0
  73. package/dist/esm/mappers/stakes.js.map +7 -0
  74. package/dist/esm/mappers/transaction-block.d.ts +7 -0
  75. package/dist/esm/mappers/transaction-block.js +467 -0
  76. package/dist/esm/mappers/transaction-block.js.map +7 -0
  77. package/dist/esm/mappers/util.d.ts +2 -0
  78. package/dist/esm/mappers/util.js +11 -0
  79. package/dist/esm/mappers/util.js.map +7 -0
  80. package/dist/esm/mappers/validator.d.ts +3 -0
  81. package/dist/esm/mappers/validator.js +44 -0
  82. package/dist/esm/mappers/validator.js.map +7 -0
  83. package/dist/esm/methods.d.ts +19 -0
  84. package/dist/esm/methods.js +1406 -0
  85. package/dist/esm/methods.js.map +7 -0
  86. package/dist/esm/package.json +5 -0
  87. package/dist/esm/transport.d.ts +44 -0
  88. package/dist/esm/transport.js +135 -0
  89. package/dist/esm/transport.js.map +7 -0
  90. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  91. package/dist/tsconfig.tsbuildinfo +1 -0
  92. package/package.json +67 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 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} from '@iota/iota-sdk/client';\nimport { Transaction } from '@iota/iota-sdk/transactions';\nimport { normalizeStructTag, normalizeIotaAddress, parseStructTag } 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} 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 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!),\n coinObjectCount: balance.coinObjectCount!,\n totalBalance: balance.totalBalance,\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 afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions) {\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 afterFriends,\n afterFunctions,\n afterStructs,\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 hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.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 afterFriends = moveModule.friends?.pageInfo.endCursor;\n let afterFunctions = moveModule.functions?.pageInfo.endCursor;\n let afterStructs = moveModule.structs?.pageInfo.endCursor;\n\n while (hasMoreFriends || hasMoreStructs || hasMoreFunctions) {\n const page = await transport.graphqlQuery(\n {\n query: PaginateMoveModuleListsDocument,\n variables: {\n module,\n packageId: pkg,\n hasMoreFriends,\n hasMoreFunctions,\n hasMoreStructs,\n afterFriends,\n afterFunctions,\n afterStructs,\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 hasMoreFriends = page.friends?.pageInfo.hasNextPage ?? false;\n hasMoreFunctions = page.functions?.pageInfo.hasNextPage ?? false;\n hasMoreStructs = page.structs?.pageInfo.hasNextPage ?? false;\n afterFriends = page.friends?.pageInfo.endCursor;\n afterFunctions = page.functions?.pageInfo.endCursor;\n afterStructs = page.structs?.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 const unsupportedFilters: string[] = [];\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 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 },\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: 'Could not find the referenced object',\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 'AuthenticatorStateUpdateV1':\n graphqlTransactionKindFilter =\n TransactionBlockKindInput.AuthenticatorStateUpdateV1;\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 };\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\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
+ "mappings": "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",
6
+ "names": ["import_bcs", "module", "result", "hasNextPage", "after"]
7
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "private": true,
3
+ "type": "commonjs",
4
+ "sideEffects": false
5
+ }
@@ -0,0 +1,44 @@
1
+ import type { TypedDocumentNode } from '@graphql-typed-document-node/core';
2
+ import type { IotaTransport, IotaTransportRequestOptions, IotaTransportSubscribeOptions } from '@iota/iota-sdk/client';
3
+ import type { DocumentNode } from 'graphql';
4
+ import { TypedDocumentString } from './generated/queries.js';
5
+ import { RPC_METHODS } from './methods.js';
6
+ export interface IotaClientGraphQLTransportOptions {
7
+ url: string;
8
+ fallbackTransportUrl?: string;
9
+ fallbackMethods?: (keyof typeof RPC_METHODS)[];
10
+ unsupportedMethods?: (keyof typeof RPC_METHODS)[];
11
+ }
12
+ export type GraphQLDocument<Result = Record<string, unknown>, Variables = Record<string, unknown>> = string | DocumentNode | TypedDocumentNode<Result, Variables> | TypedDocumentString<Result, Variables>;
13
+ export type GraphQLQueryOptions<Result = Record<string, unknown>, Variables = Record<string, unknown>> = {
14
+ query: GraphQLDocument<Result, Variables>;
15
+ operationName?: string;
16
+ extensions?: Record<string, unknown>;
17
+ } & (Variables extends {
18
+ [key: string]: never;
19
+ } ? {
20
+ variables?: Variables;
21
+ } : {
22
+ variables: Variables;
23
+ });
24
+ export type GraphQLQueryResult<Result = Record<string, unknown>> = {
25
+ data?: Result;
26
+ errors?: GraphQLResponseErrors;
27
+ extensions?: Record<string, unknown>;
28
+ };
29
+ export type GraphQLResponseErrors = Array<{
30
+ message: string;
31
+ locations?: {
32
+ line: number;
33
+ column: number;
34
+ }[];
35
+ path?: (string | number)[];
36
+ }>;
37
+ export declare class IotaClientGraphQLTransport implements IotaTransport {
38
+ #private;
39
+ constructor(options: IotaClientGraphQLTransportOptions);
40
+ graphqlQuery<Result = Record<string, unknown>, Variables = Record<string, unknown>, Data = Result>(options: GraphQLQueryOptions<Result, Variables>, getData?: (result: Result) => Data): Promise<NonNullable<Data>>;
41
+ graphqlRequest<Result = Record<string, unknown>, Variables = Record<string, unknown>>(options: GraphQLQueryOptions<Result, Variables>): Promise<Response>;
42
+ request<T = unknown>(input: IotaTransportRequestOptions): Promise<T>;
43
+ subscribe<T = unknown>(input: IotaTransportSubscribeOptions<T>): Promise<() => Promise<boolean>>;
44
+ }
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __typeError = (msg) => {
7
+ throw TypeError(msg);
8
+ };
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
22
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
23
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
24
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
25
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
26
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
27
+ var transport_exports = {};
28
+ __export(transport_exports, {
29
+ IotaClientGraphQLTransport: () => IotaClientGraphQLTransport
30
+ });
31
+ module.exports = __toCommonJS(transport_exports);
32
+ var import_client = require("@iota/iota-sdk/client");
33
+ var import_graphql = require("graphql");
34
+ var import_queries = require("./generated/queries.js");
35
+ var import_methods = require("./methods.js");
36
+ var _options, _fallbackTransport, _fallbackMethods, _unsupportedMethods, _IotaClientGraphQLTransport_instances, tryUseFallback_fn;
37
+ class IotaClientGraphQLTransport {
38
+ constructor(options) {
39
+ __privateAdd(this, _IotaClientGraphQLTransport_instances);
40
+ __privateAdd(this, _options);
41
+ __privateAdd(this, _fallbackTransport);
42
+ __privateAdd(this, _fallbackMethods);
43
+ __privateAdd(this, _unsupportedMethods);
44
+ __privateSet(this, _options, options);
45
+ __privateSet(this, _fallbackMethods, options.fallbackMethods || [
46
+ "executeTransactionBlock",
47
+ "dryRunTransactionBlock",
48
+ "devInspectTransactionBlock",
49
+ "getTotalTransactions",
50
+ "getNetworkMetrics",
51
+ "getParticipationMetrics",
52
+ "getMoveCallMetrics",
53
+ "getAllEpochAddressMetrics",
54
+ "getEpochs",
55
+ "getDynamicFieldObjectV2"
56
+ ]);
57
+ __privateSet(this, _unsupportedMethods, options.unsupportedMethods || ["getOwnedObjects"]);
58
+ if (options.fallbackTransportUrl) {
59
+ __privateSet(this, _fallbackTransport, new import_client.IotaHTTPTransport({
60
+ url: options.fallbackTransportUrl
61
+ }));
62
+ }
63
+ }
64
+ async graphqlQuery(options, getData) {
65
+ const res = await this.graphqlRequest(options);
66
+ if (!res.ok) {
67
+ throw new Error("Failed to fetch");
68
+ }
69
+ const { data, errors } = await res.json();
70
+ handleGraphQLErrors(errors);
71
+ const extractedData = data && (getData ? getData(data) : data);
72
+ if (extractedData == null) {
73
+ throw new Error("Missing response data");
74
+ }
75
+ return extractedData;
76
+ }
77
+ async graphqlRequest(options) {
78
+ return fetch(__privateGet(this, _options).url, {
79
+ method: "POST",
80
+ headers: {
81
+ "Content-Type": "application/json"
82
+ },
83
+ body: JSON.stringify({
84
+ query: typeof options.query === "string" || options.query instanceof import_queries.TypedDocumentString ? options.query.toString() : (0, import_graphql.print)(options.query),
85
+ variables: options.variables,
86
+ extensions: options.extensions,
87
+ operationName: options.operationName
88
+ })
89
+ });
90
+ }
91
+ async request(input) {
92
+ let clientMethod;
93
+ switch (input.method) {
94
+ case "rpc.discover":
95
+ clientMethod = "getRpcApiVersion";
96
+ break;
97
+ case "iotax_getLatestAddressMetrics":
98
+ clientMethod = "getAddressMetrics";
99
+ break;
100
+ default:
101
+ clientMethod = input.method.split("_")[1];
102
+ }
103
+ const allowFallback = __privateGet(this, _fallbackMethods).includes(clientMethod);
104
+ const isUnsupported = __privateGet(this, _unsupportedMethods).includes(clientMethod);
105
+ const method = import_methods.RPC_METHODS[clientMethod];
106
+ if (isUnsupported) {
107
+ return __privateMethod(this, _IotaClientGraphQLTransport_instances, tryUseFallback_fn).call(this, input);
108
+ }
109
+ if (!method && !allowFallback) {
110
+ throw new import_methods.UnsupportedMethodError(input.method);
111
+ }
112
+ try {
113
+ if (!method) throw new Error("Missing method");
114
+ return method(this, input.params);
115
+ } catch (error) {
116
+ if (allowFallback || error instanceof import_methods.UnsupportedParamError) {
117
+ return __privateMethod(this, _IotaClientGraphQLTransport_instances, tryUseFallback_fn).call(this, input);
118
+ } else {
119
+ throw error;
120
+ }
121
+ }
122
+ }
123
+ async subscribe(input) {
124
+ if (!__privateGet(this, _fallbackTransport)) {
125
+ throw new import_methods.UnsupportedMethodError(input.method);
126
+ }
127
+ return __privateGet(this, _fallbackTransport).subscribe(input);
128
+ }
129
+ }
130
+ _options = new WeakMap();
131
+ _fallbackTransport = new WeakMap();
132
+ _fallbackMethods = new WeakMap();
133
+ _unsupportedMethods = new WeakMap();
134
+ _IotaClientGraphQLTransport_instances = new WeakSet();
135
+ tryUseFallback_fn = async function(input) {
136
+ if (!__privateGet(this, _fallbackTransport)) {
137
+ throw new import_methods.UnsupportedMethodError(input.method);
138
+ }
139
+ return __privateGet(this, _fallbackTransport).request(input);
140
+ };
141
+ function handleGraphQLErrors(errors) {
142
+ if (!errors || errors.length === 0) return;
143
+ const errorInstances = errors.map((error) => new GraphQLResponseError(error));
144
+ if (errorInstances.length === 1) {
145
+ throw errorInstances[0];
146
+ }
147
+ throw new AggregateError(errorInstances);
148
+ }
149
+ class GraphQLResponseError extends Error {
150
+ constructor(error) {
151
+ super(error.message);
152
+ this.locations = error.locations;
153
+ }
154
+ }
155
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/transport.ts"],
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { TypedDocumentNode } from '@graphql-typed-document-node/core';\nimport type {\n IotaTransport,\n IotaTransportRequestOptions,\n IotaTransportSubscribeOptions,\n} from '@iota/iota-sdk/client';\nimport { IotaHTTPTransport } from '@iota/iota-sdk/client';\nimport type { DocumentNode } from 'graphql';\nimport { print } from 'graphql';\n\nimport { TypedDocumentString } from './generated/queries.js';\nimport { RPC_METHODS, UnsupportedMethodError, UnsupportedParamError } from './methods.js';\n\nexport interface IotaClientGraphQLTransportOptions {\n url: string;\n fallbackTransportUrl?: string;\n fallbackMethods?: (keyof typeof RPC_METHODS)[];\n unsupportedMethods?: (keyof typeof RPC_METHODS)[];\n}\n\nexport type GraphQLDocument<\n Result = Record<string, unknown>,\n Variables = Record<string, unknown>,\n> =\n | string\n | DocumentNode\n | TypedDocumentNode<Result, Variables>\n | TypedDocumentString<Result, Variables>;\n\nexport type GraphQLQueryOptions<\n Result = Record<string, unknown>,\n Variables = Record<string, unknown>,\n> = {\n query: GraphQLDocument<Result, Variables>;\n operationName?: string;\n extensions?: Record<string, unknown>;\n} & (Variables extends { [key: string]: never }\n ? { variables?: Variables }\n : {\n variables: Variables;\n });\n\nexport type GraphQLQueryResult<Result = Record<string, unknown>> = {\n data?: Result;\n errors?: GraphQLResponseErrors;\n extensions?: Record<string, unknown>;\n};\n\nexport type GraphQLResponseErrors = Array<{\n message: string;\n locations?: { line: number; column: number }[];\n path?: (string | number)[];\n}>;\n\nexport class IotaClientGraphQLTransport implements IotaTransport {\n #options: IotaClientGraphQLTransportOptions;\n #fallbackTransport?: IotaTransport;\n #fallbackMethods: (keyof typeof RPC_METHODS)[];\n #unsupportedMethods: (keyof typeof RPC_METHODS)[];\n\n constructor(options: IotaClientGraphQLTransportOptions) {\n this.#options = options;\n this.#fallbackMethods = options.fallbackMethods || [\n 'executeTransactionBlock',\n 'dryRunTransactionBlock',\n 'devInspectTransactionBlock',\n 'getTotalTransactions',\n 'getNetworkMetrics',\n 'getParticipationMetrics',\n 'getMoveCallMetrics',\n 'getAllEpochAddressMetrics',\n 'getEpochs',\n 'getDynamicFieldObjectV2',\n ];\n this.#unsupportedMethods = options.unsupportedMethods || ['getOwnedObjects'];\n\n if (options.fallbackTransportUrl) {\n this.#fallbackTransport = new IotaHTTPTransport({\n url: options.fallbackTransportUrl,\n });\n }\n }\n\n async graphqlQuery<\n Result = Record<string, unknown>,\n Variables = Record<string, unknown>,\n Data = Result,\n >(\n options: GraphQLQueryOptions<Result, Variables>,\n getData?: (result: Result) => Data,\n ): Promise<NonNullable<Data>> {\n const res = await this.graphqlRequest(options);\n\n if (!res.ok) {\n throw new Error('Failed to fetch');\n }\n\n const { data, errors } = (await res.json()) as GraphQLQueryResult<Result>;\n\n handleGraphQLErrors(errors);\n\n const extractedData = data && (getData ? getData(data) : data);\n\n if (extractedData == null) {\n throw new Error('Missing response data');\n }\n\n return extractedData as NonNullable<Data>;\n }\n\n async graphqlRequest<Result = Record<string, unknown>, Variables = Record<string, unknown>>(\n options: GraphQLQueryOptions<Result, Variables>,\n ): Promise<Response> {\n return fetch(this.#options.url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n query:\n typeof options.query === 'string' ||\n options.query instanceof TypedDocumentString\n ? options.query.toString()\n : print(options.query),\n variables: options.variables,\n extensions: options.extensions,\n operationName: options.operationName,\n }),\n });\n }\n\n async request<T = unknown>(input: IotaTransportRequestOptions): Promise<T> {\n let clientMethod: keyof typeof RPC_METHODS;\n\n switch (input.method) {\n case 'rpc.discover':\n clientMethod = 'getRpcApiVersion';\n break;\n case 'iotax_getLatestAddressMetrics':\n clientMethod = 'getAddressMetrics';\n break;\n default:\n clientMethod = input.method.split('_')[1] as keyof typeof RPC_METHODS;\n }\n\n // Methods with allowed fallback will go through GraphQL first and only default to JSON-RPC if they fail\n const allowFallback = this.#fallbackMethods.includes(clientMethod);\n // Unsupported methods will go through JSON-RPC directly\n const isUnsupported = this.#unsupportedMethods.includes(clientMethod);\n\n const method = RPC_METHODS[clientMethod];\n\n if (isUnsupported) {\n // If Unsupported we force to try fallback\n return this.#tryUseFallback(input);\n }\n\n // No method and no fallback allowed\n if (!method && !allowFallback) {\n throw new UnsupportedMethodError(input.method);\n }\n\n try {\n // Method doesnt have a graphql implementation\n if (!method) throw new Error('Missing method');\n\n return method(this, input.params as never) as Promise<T>;\n } catch (error) {\n // Method has an allowed fallback or is partially unsupported\n if (allowFallback || error instanceof UnsupportedParamError) {\n return this.#tryUseFallback(input);\n } else {\n throw error;\n }\n }\n }\n\n async subscribe<T = unknown>(\n input: IotaTransportSubscribeOptions<T>,\n ): Promise<() => Promise<boolean>> {\n if (!this.#fallbackTransport) {\n throw new UnsupportedMethodError(input.method);\n }\n\n return this.#fallbackTransport.subscribe(input);\n }\n\n async #tryUseFallback<T = unknown>(input: IotaTransportRequestOptions): Promise<T> {\n if (!this.#fallbackTransport) {\n throw new UnsupportedMethodError(input.method);\n }\n\n return this.#fallbackTransport.request(input);\n }\n}\n\nfunction handleGraphQLErrors(errors: GraphQLResponseErrors | undefined): void {\n if (!errors || errors.length === 0) return;\n\n const errorInstances = errors.map((error) => new GraphQLResponseError(error));\n\n if (errorInstances.length === 1) {\n throw errorInstances[0];\n }\n\n throw new AggregateError(errorInstances);\n}\n\nclass GraphQLResponseError extends Error {\n locations?: Array<{ line: number; column: number }>;\n\n constructor(error: GraphQLResponseErrors[0]) {\n super(error.message);\n this.locations = error.locations;\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }