@iota/graphql-transport 0.9.2 → 0.11.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.
@@ -169,13 +169,29 @@ function moveDataToRpcContent(data, layout) {
169
169
  }
170
170
  if ("Vector" in data) {
171
171
  if (typeof layout !== "object" || !("vector" in layout)) {
172
- throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);
172
+ throw new Error(`Invalid layout for data: ${JSON.stringify(data)}`);
173
173
  }
174
174
  const itemLayout = layout.vector;
175
175
  return data.Vector.map((item) => moveDataToRpcContent(item, itemLayout));
176
176
  }
177
177
  if ("Option" in data) {
178
- return data.Option && moveDataToRpcContent(data.Option, layout);
178
+ if (data.Option === null) {
179
+ return null;
180
+ }
181
+ if (typeof layout !== "object" || !("struct" in layout)) {
182
+ throw new Error(`Invalid layout for Option data: ${JSON.stringify(layout)}`);
183
+ }
184
+ const vecField = layout.struct.fields.find((field) => field.name === "vec");
185
+ if (!vecField) {
186
+ throw new Error(`Could not find the expected 'vec' field in the Option layout.`);
187
+ }
188
+ const innerLayout = vecField.layout;
189
+ const innerData = data.Option;
190
+ if (typeof innerLayout === "object" && "vector" in innerLayout && innerData && !("Vector" in innerData)) {
191
+ const itemLayout = innerLayout.vector;
192
+ return moveDataToRpcContent(innerData, itemLayout);
193
+ }
194
+ return moveDataToRpcContent(innerData, innerLayout);
179
195
  }
180
196
  if ("Struct" in data) {
181
197
  const result = {};
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/mappers/move.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 {\n MoveStruct,\n MoveValue,\n IotaMoveAbility,\n IotaMoveNormalizedFunction,\n IotaMoveNormalizedModule,\n IotaMoveNormalizedStruct,\n IotaMoveNormalizedType,\n} from '@iota/iota-sdk/client';\nimport { normalizeIotaAddress, parseStructTag } from '@iota/iota-sdk/utils';\n\nimport type {\n Rpc_Move_Function_FieldsFragment,\n Rpc_Move_Module_FieldsFragment,\n Rpc_Move_Struct_FieldsFragment,\n} from '../generated/queries.js';\nimport { toShortTypeString } from './util.js';\n\nexport type OpenMoveTypeSignatureBody =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: OpenMoveTypeSignatureBody }\n | {\n datatype: {\n package: string;\n module: string;\n type: string;\n typeParameters?: [OpenMoveTypeSignatureBody];\n };\n }\n | { typeParameter: number };\n\nexport function mapOpenMoveType(type: { ref?: '&' | '&mut'; body: OpenMoveTypeSignatureBody }) {\n const body = mapNormalizedType(type.body);\n\n if (type.ref === '&') {\n return {\n Reference: body,\n };\n }\n\n if (type.ref === '&mut') {\n return {\n MutableReference: body,\n };\n }\n\n return body;\n}\n\nexport function mapNormalizedType(type: OpenMoveTypeSignatureBody): IotaMoveNormalizedType {\n switch (type) {\n case 'address':\n return 'Address';\n case 'bool':\n return 'Bool';\n case 'u8':\n return 'U8';\n case 'u16':\n return 'U16';\n case 'u32':\n return 'U32';\n case 'u64':\n return 'U64';\n case 'u128':\n return 'U128';\n case 'u256':\n return 'U256';\n }\n\n if ('vector' in type) {\n return {\n Vector: mapNormalizedType(type.vector),\n };\n }\n\n if ('typeParameter' in type) {\n return {\n TypeParameter: type.typeParameter,\n };\n }\n\n if ('datatype' in type) {\n return {\n Struct: {\n address: toShortTypeString(type.datatype.package),\n module: type.datatype.module,\n name: type.datatype.type,\n typeArguments: type.datatype.typeParameters?.map(mapNormalizedType) ?? [],\n },\n };\n }\n\n throw new Error('Invalid type');\n}\n\nexport function mapNormalizedMoveFunction(\n fn: Rpc_Move_Function_FieldsFragment,\n): IotaMoveNormalizedFunction {\n return {\n visibility: `${fn.visibility?.[0]}${fn.visibility?.slice(1).toLowerCase()}` as never,\n isEntry: fn.isEntry!,\n typeParameters:\n fn.typeParameters?.map((param) => ({\n abilities:\n param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n })) ?? [],\n return: fn.return?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n parameters: fn.parameters?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n };\n}\n\nexport function mapNormalizedMoveStruct(\n struct: Rpc_Move_Struct_FieldsFragment,\n): IotaMoveNormalizedStruct {\n return {\n abilities: {\n abilities:\n struct.abilities?.map(\n (ability) =>\n `${ability[0]}${ability.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n },\n fields:\n struct.fields?.map((field) => ({\n name: field.name,\n type: mapOpenMoveType(field.type?.signature),\n })) ?? [],\n typeParameters:\n struct.typeParameters?.map((param) => ({\n isPhantom: param.isPhantom!,\n constraints: {\n abilities: param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ),\n },\n })) ?? [],\n };\n}\n\nexport function mapNormalizedMoveModule(\n module: Rpc_Move_Module_FieldsFragment,\n address: string,\n): IotaMoveNormalizedModule {\n const exposedFunctions: Record<string, IotaMoveNormalizedFunction> = {};\n const structs: Record<string, IotaMoveNormalizedStruct> = {};\n\n module.functions?.nodes\n .filter(\n (func) => func.visibility === 'PUBLIC' || func.isEntry || func.visibility === 'FRIEND',\n )\n .forEach((func) => {\n exposedFunctions[func.name] = mapNormalizedMoveFunction(func);\n });\n\n module.structs?.nodes.forEach((struct) => {\n structs[struct.name] = mapNormalizedMoveStruct(struct);\n });\n\n return {\n address: toShortTypeString(address),\n name: module.name,\n fileFormatVersion: module.fileFormatVersion,\n friends:\n module.friends.nodes?.map((friend) => ({\n address: toShortTypeString(friend.package.address),\n name: friend.name,\n })) ?? [],\n structs,\n exposedFunctions,\n };\n}\n\ntype MoveData =\n | { Address: number[] }\n | { UID: number[] }\n | { ID: number[] }\n | { Bool: boolean }\n | { Number: string }\n | { String: string }\n | { Vector: MoveData[] }\n | { Option: MoveData | null }\n | { Struct: [{ name: string; value: MoveData }] };\n\nexport type MoveTypeLayout =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: MoveTypeLayout }\n | {\n struct: {\n type: string;\n fields: { name: string; layout: MoveTypeLayout }[];\n };\n };\n\nexport function moveDataToRpcContent(data: MoveData, layout: MoveTypeLayout): MoveValue {\n if ('Address' in data) {\n return normalizeIotaAddress(\n data.Address.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('UID' in data) {\n return {\n id: normalizeIotaAddress(\n data.UID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n ),\n };\n }\n\n if ('ID' in data) {\n return normalizeIotaAddress(\n data.ID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('Bool' in data) {\n return data.Bool;\n }\n\n if ('Number' in data) {\n return layout === 'u64' || layout === 'u128' || layout === 'u256'\n ? String(data.Number)\n : Number.parseInt(data.Number, 10);\n }\n\n if ('String' in data) {\n return data.String;\n }\n\n if ('Vector' in data) {\n if (typeof layout !== 'object' || !('vector' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);\n }\n const itemLayout = layout.vector;\n return data.Vector.map((item) => moveDataToRpcContent(item, itemLayout));\n }\n\n if ('Option' in data) {\n return data.Option && moveDataToRpcContent(data.Option, layout);\n }\n\n if ('Struct' in data) {\n const result: MoveStruct = {};\n\n if (typeof layout !== 'object' || !('struct' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);\n }\n\n data.Struct.forEach((item, index) => {\n const { name, layout: itemLayout } = layout.struct.fields[index];\n\n result[name] = moveDataToRpcContent(item.value, itemLayout);\n });\n\n // https://github.com/iotaledger/iota/blob/5849f6845a3ab9fdb4c17523994adad461478a4c/crates/iota-json-rpc-types/src/iota_move.rs#L481\n const tag = parseStructTag(layout.struct.type);\n const structName = `${toShortTypeString(tag.address)}::${tag.module}::${tag.name}`;\n\n switch (structName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return result['bytes'];\n case '0x2::url::Url':\n return result['url'];\n case '0x2::object::ID':\n return result['bytes'];\n case '0x2::object::UID':\n return {\n id: result['id'] as string,\n };\n case '0x2::balance::Balance':\n return result['value'];\n case '0x1::option::Option':\n return (result['vec'] as MoveValue[])[0] ?? null;\n }\n\n return {\n type: toShortTypeString(layout.struct.type),\n fields: result,\n };\n }\n\n throw new Error('Invalid move data: ' + JSON.stringify(data));\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Copyright (c) Mysten Labs, Inc.\n// Modifications Copyright (c) 2024 IOTA Stiftung\n// SPDX-License-Identifier: Apache-2.0\n\nimport type {\n MoveStruct,\n MoveValue,\n IotaMoveAbility,\n IotaMoveNormalizedFunction,\n IotaMoveNormalizedModule,\n IotaMoveNormalizedStruct,\n IotaMoveNormalizedType,\n} from '@iota/iota-sdk/client';\nimport { normalizeIotaAddress, parseStructTag } from '@iota/iota-sdk/utils';\n\nimport type {\n Rpc_Move_Function_FieldsFragment,\n Rpc_Move_Module_FieldsFragment,\n Rpc_Move_Struct_FieldsFragment,\n} from '../generated/queries.js';\nimport { toShortTypeString } from './util.js';\n\nexport type OpenMoveTypeSignatureBody =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: OpenMoveTypeSignatureBody }\n | {\n datatype: {\n package: string;\n module: string;\n type: string;\n typeParameters?: [OpenMoveTypeSignatureBody];\n };\n }\n | { typeParameter: number };\n\nexport function mapOpenMoveType(type: { ref?: '&' | '&mut'; body: OpenMoveTypeSignatureBody }) {\n const body = mapNormalizedType(type.body);\n\n if (type.ref === '&') {\n return {\n Reference: body,\n };\n }\n\n if (type.ref === '&mut') {\n return {\n MutableReference: body,\n };\n }\n\n return body;\n}\n\nexport function mapNormalizedType(type: OpenMoveTypeSignatureBody): IotaMoveNormalizedType {\n switch (type) {\n case 'address':\n return 'Address';\n case 'bool':\n return 'Bool';\n case 'u8':\n return 'U8';\n case 'u16':\n return 'U16';\n case 'u32':\n return 'U32';\n case 'u64':\n return 'U64';\n case 'u128':\n return 'U128';\n case 'u256':\n return 'U256';\n }\n\n if ('vector' in type) {\n return {\n Vector: mapNormalizedType(type.vector),\n };\n }\n\n if ('typeParameter' in type) {\n return {\n TypeParameter: type.typeParameter,\n };\n }\n\n if ('datatype' in type) {\n return {\n Struct: {\n address: toShortTypeString(type.datatype.package),\n module: type.datatype.module,\n name: type.datatype.type,\n typeArguments: type.datatype.typeParameters?.map(mapNormalizedType) ?? [],\n },\n };\n }\n\n throw new Error('Invalid type');\n}\n\nexport function mapNormalizedMoveFunction(\n fn: Rpc_Move_Function_FieldsFragment,\n): IotaMoveNormalizedFunction {\n return {\n visibility: `${fn.visibility?.[0]}${fn.visibility?.slice(1).toLowerCase()}` as never,\n isEntry: fn.isEntry!,\n typeParameters:\n fn.typeParameters?.map((param) => ({\n abilities:\n param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n })) ?? [],\n return: fn.return?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n parameters: fn.parameters?.map((param) => mapOpenMoveType(param.signature)) ?? [],\n };\n}\n\nexport function mapNormalizedMoveStruct(\n struct: Rpc_Move_Struct_FieldsFragment,\n): IotaMoveNormalizedStruct {\n return {\n abilities: {\n abilities:\n struct.abilities?.map(\n (ability) =>\n `${ability[0]}${ability.slice(1).toLowerCase()}` as IotaMoveAbility,\n ) ?? [],\n },\n fields:\n struct.fields?.map((field) => ({\n name: field.name,\n type: mapOpenMoveType(field.type?.signature),\n })) ?? [],\n typeParameters:\n struct.typeParameters?.map((param) => ({\n isPhantom: param.isPhantom!,\n constraints: {\n abilities: param.constraints?.map(\n (constraint) =>\n `${constraint[0]}${constraint.slice(1).toLowerCase()}` as IotaMoveAbility,\n ),\n },\n })) ?? [],\n };\n}\n\nexport function mapNormalizedMoveModule(\n module: Rpc_Move_Module_FieldsFragment,\n address: string,\n): IotaMoveNormalizedModule {\n const exposedFunctions: Record<string, IotaMoveNormalizedFunction> = {};\n const structs: Record<string, IotaMoveNormalizedStruct> = {};\n\n module.functions?.nodes\n .filter(\n (func) => func.visibility === 'PUBLIC' || func.isEntry || func.visibility === 'FRIEND',\n )\n .forEach((func) => {\n exposedFunctions[func.name] = mapNormalizedMoveFunction(func);\n });\n\n module.structs?.nodes.forEach((struct) => {\n structs[struct.name] = mapNormalizedMoveStruct(struct);\n });\n\n return {\n address: toShortTypeString(address),\n name: module.name,\n fileFormatVersion: module.fileFormatVersion,\n friends:\n module.friends.nodes?.map((friend) => ({\n address: toShortTypeString(friend.package.address),\n name: friend.name,\n })) ?? [],\n structs,\n exposedFunctions,\n };\n}\n\ntype MoveData =\n | { Address: number[] }\n | { UID: number[] }\n | { ID: number[] }\n | { Bool: boolean }\n | { Number: string }\n | { String: string }\n | { Vector: MoveData[] }\n | { Option: MoveData | null }\n | { Struct: [{ name: string; value: MoveData }] };\n\nexport type MoveTypeLayout =\n | 'address'\n | 'bool'\n | 'u8'\n | 'u16'\n | 'u32'\n | 'u64'\n | 'u128'\n | 'u256'\n | { vector: MoveTypeLayout }\n | {\n struct: {\n type: string;\n fields: { name: string; layout: MoveTypeLayout }[];\n };\n };\n\nexport function moveDataToRpcContent(data: MoveData, layout: MoveTypeLayout): MoveValue {\n if ('Address' in data) {\n return normalizeIotaAddress(\n data.Address.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('UID' in data) {\n return {\n id: normalizeIotaAddress(\n data.UID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n ),\n };\n }\n\n if ('ID' in data) {\n return normalizeIotaAddress(\n data.ID.map((byte) => byte.toString(16).padStart(2, '0')).join(''),\n );\n }\n\n if ('Bool' in data) {\n return data.Bool;\n }\n\n if ('Number' in data) {\n return layout === 'u64' || layout === 'u128' || layout === 'u256'\n ? String(data.Number)\n : Number.parseInt(data.Number, 10);\n }\n\n if ('String' in data) {\n return data.String;\n }\n\n if ('Vector' in data) {\n if (typeof layout !== 'object' || !('vector' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}`);\n }\n const itemLayout = layout.vector;\n return data.Vector.map((item) => moveDataToRpcContent(item, itemLayout));\n }\n\n if ('Option' in data) {\n if (data.Option === null) {\n return null;\n }\n\n if (typeof layout !== 'object' || !('struct' in layout)) {\n throw new Error(`Invalid layout for Option data: ${JSON.stringify(layout)}`);\n }\n\n const vecField = layout.struct.fields.find((field) => field.name === 'vec');\n if (!vecField) {\n throw new Error(`Could not find the expected 'vec' field in the Option layout.`);\n }\n\n const innerLayout = vecField.layout;\n const innerData = data.Option;\n\n if (\n typeof innerLayout === 'object' &&\n 'vector' in innerLayout &&\n innerData &&\n !('Vector' in innerData)\n ) {\n const itemLayout = innerLayout.vector;\n return moveDataToRpcContent(innerData, itemLayout);\n }\n\n return moveDataToRpcContent(innerData, innerLayout);\n }\n\n if ('Struct' in data) {\n const result: MoveStruct = {};\n\n if (typeof layout !== 'object' || !('struct' in layout)) {\n throw new Error(`Invalid layout for data: ${JSON.stringify(data)}}`);\n }\n\n data.Struct.forEach((item, index) => {\n const { name, layout: itemLayout } = layout.struct.fields[index];\n\n result[name] = moveDataToRpcContent(item.value, itemLayout);\n });\n\n // https://github.com/iotaledger/iota/blob/5849f6845a3ab9fdb4c17523994adad461478a4c/crates/iota-json-rpc-types/src/iota_move.rs#L481\n const tag = parseStructTag(layout.struct.type);\n const structName = `${toShortTypeString(tag.address)}::${tag.module}::${tag.name}`;\n\n switch (structName) {\n case '0x1::string::String':\n case '0x1::ascii::String':\n return result['bytes'];\n case '0x2::url::Url':\n return result['url'];\n case '0x2::object::ID':\n return result['bytes'];\n case '0x2::object::UID':\n return {\n id: result['id'] as string,\n };\n case '0x2::balance::Balance':\n return result['value'];\n case '0x1::option::Option':\n return (result['vec'] as MoveValue[])[0] ?? null;\n }\n\n return {\n type: toShortTypeString(layout.struct.type),\n fields: result,\n };\n }\n\n throw new Error('Invalid move data: ' + JSON.stringify(data));\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["module"]
7
7
  }
@@ -886,52 +886,27 @@ const RPC_METHODS = {
886
886
  hasNextPage: pageInfo.hasNextPage
887
887
  };
888
888
  },
889
+ async getDynamicFieldObjectV2(transport, inputs) {
890
+ return await getDynamicFieldObject(transport, inputs);
891
+ },
892
+ /**
893
+ * @deprecated The V1 of this method is deprecated, use `getDynamicFieldObjectV2` instead.
894
+ */
889
895
  async getDynamicFieldObject(transport, [parentId, name]) {
890
- const nameLayout = await transport.graphqlQuery(
891
- {
892
- query: import_queries.GetTypeLayoutDocument,
893
- variables: {
894
- type: name.type
895
- }
896
- },
897
- (data) => data.type.layout
898
- );
899
- const bcsName = (0, import_bcs2.mapJsonToBcs)(name.value, nameLayout);
900
- const parent = await transport.graphqlQuery(
896
+ return await getDynamicFieldObject(transport, [
897
+ parentId,
898
+ name,
901
899
  {
902
- query: import_queries.GetDynamicFieldObjectDocument,
903
- variables: {
904
- parentId,
905
- name: {
906
- type: name.type,
907
- bcs: bcsName
908
- }
909
- }
910
- },
911
- (data) => {
912
- return data.owner?.dynamicObjectField?.value?.__typename === "MoveObject" ? data.owner.dynamicObjectField.value.owner?.__typename === "Parent" ? data.owner.dynamicObjectField.value.owner.parent : void 0 : void 0;
900
+ // These are the same defaults as in the JSON RPC.
901
+ showBcs: true,
902
+ showContent: true,
903
+ showDisplay: true,
904
+ showOwner: true,
905
+ showPreviousTransaction: true,
906
+ showStorageRebate: true,
907
+ showType: true
913
908
  }
914
- );
915
- return {
916
- data: {
917
- content: {
918
- dataType: "moveObject",
919
- ...(0, import_move.moveDataToRpcContent)(
920
- parent?.asMoveObject?.contents?.data,
921
- parent?.asMoveObject?.contents?.type.layout
922
- )
923
- },
924
- digest: parent?.digest,
925
- objectId: parent?.address,
926
- type: (0, import_util.toShortTypeString)(parent?.asMoveObject?.contents?.type.repr),
927
- version: parent?.version.toString(),
928
- storageRebate: parent.storageRebate,
929
- previousTransaction: parent.previousTransactionBlock?.digest,
930
- owner: parent.owner?.__typename === "Parent" ? {
931
- ObjectOwner: parent.owner.parent?.address
932
- } : void 0
933
- }
934
- };
909
+ ]);
935
910
  },
936
911
  async executeTransactionBlock(transport, [txBytes, signatures, options]) {
937
912
  const { effects, errors } = await transport.graphqlQuery(
@@ -1247,6 +1222,41 @@ const RPC_METHODS = {
1247
1222
  attributes,
1248
1223
  featureFlags
1249
1224
  };
1225
+ },
1226
+ async isTransactionIndexedOnNode(transport, [digest]) {
1227
+ const isTransactionIndexedOnNode = await transport.graphqlQuery(
1228
+ {
1229
+ query: import_queries.IsTransactionIndexedOnNodeDocument,
1230
+ variables: {
1231
+ digest
1232
+ }
1233
+ },
1234
+ (data) => data.isTransactionIndexedOnNode
1235
+ );
1236
+ return isTransactionIndexedOnNode;
1237
+ },
1238
+ async view(transport, [functionName, typeArgs, callArgs]) {
1239
+ return await transport.graphqlQuery(
1240
+ {
1241
+ query: import_queries.ViewDocument,
1242
+ variables: {
1243
+ functionName,
1244
+ typeArgs,
1245
+ arguments: callArgs
1246
+ }
1247
+ },
1248
+ (data) => {
1249
+ if (data.moveViewCall.error) {
1250
+ return {
1251
+ executionError: data.moveViewCall.error
1252
+ };
1253
+ } else {
1254
+ return {
1255
+ functionReturnValues: data.moveViewCall.results
1256
+ };
1257
+ }
1258
+ }
1259
+ );
1250
1260
  }
1251
1261
  };
1252
1262
  class UnsupportedParamError extends Error {
@@ -1333,4 +1343,58 @@ async function paginateCheckpointLists(transport, checkpoint) {
1333
1343
  }
1334
1344
  }
1335
1345
  }
1346
+ async function getDynamicFieldObject(transport, [parentId, name, options]) {
1347
+ const nameLayout = await transport.graphqlQuery(
1348
+ {
1349
+ query: import_queries.GetTypeLayoutDocument,
1350
+ variables: {
1351
+ type: name.type
1352
+ }
1353
+ },
1354
+ (data) => data.type.layout
1355
+ );
1356
+ const bcsName = (0, import_bcs2.mapJsonToBcs)(name.value, nameLayout);
1357
+ const parent = await transport.graphqlQuery(
1358
+ {
1359
+ query: import_queries.GetDynamicFieldObjectDocument,
1360
+ variables: {
1361
+ parentId,
1362
+ name: {
1363
+ type: name.type,
1364
+ bcs: bcsName
1365
+ },
1366
+ showBcs: options?.showBcs,
1367
+ showContent: options?.showContent,
1368
+ showDisplay: options?.showDisplay,
1369
+ showOwner: options?.showOwner,
1370
+ showPreviousTransaction: options?.showPreviousTransaction,
1371
+ showStorageRebate: options?.showStorageRebate,
1372
+ showType: options?.showType
1373
+ }
1374
+ },
1375
+ (data) => {
1376
+ return data.owner?.dynamicObjectField?.value?.__typename === "MoveObject" ? data.owner.dynamicObjectField.value.owner?.__typename === "Parent" ? data.owner.dynamicObjectField.value.owner.parent : void 0 : void 0;
1377
+ }
1378
+ );
1379
+ return {
1380
+ data: {
1381
+ content: parent.asMoveObject ? {
1382
+ dataType: "moveObject",
1383
+ ...(0, import_move.moveDataToRpcContent)(
1384
+ parent.asMoveObject?.contents?.data,
1385
+ parent.asMoveObject?.contents?.type.layout
1386
+ )
1387
+ } : void 0,
1388
+ digest: parent?.digest,
1389
+ objectId: parent?.address,
1390
+ type: parent?.asMoveObject ? (0, import_util.toShortTypeString)(parent.asMoveObject.contents?.type.repr) : void 0,
1391
+ version: parent?.version.toString(),
1392
+ storageRebate: parent.storageRebate,
1393
+ previousTransaction: parent.previousTransactionBlock?.digest,
1394
+ owner: parent.owner?.__typename === "Parent" ? {
1395
+ ObjectOwner: parent.owner.parent?.address
1396
+ } : void 0
1397
+ }
1398
+ };
1399
+ }
1336
1400
  //# sourceMappingURL=methods.js.map