{"version":3,"file":"inputs.mjs","names":["data","objectsById"],"sources":["../../../src/transaction-analyzer/rules/inputs.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { SuiClientTypes } from '@mysten/sui/client';\nimport { normalizeStructTag, normalizeSuiAddress } from '@mysten/sui/utils';\nimport { createAnalyzer } from '../analyzer.js';\nimport { data } from './core.js';\nimport { objectsById } from './objects.js';\n\nexport type AnalyzedCommandInput =\n\t| {\n\t\t\t$kind: 'Pure';\n\t\t\tindex: number;\n\t\t\tbytes: string; // base64 encoded\n\t\t\t// TODO: add parsed value and type\n\t\t\taccessLevel: 'read' | 'mutate' | 'transfer';\n\t  }\n\t| {\n\t\t\t$kind: 'Object';\n\t\t\tindex: number;\n\t\t\tobject: SuiClientTypes.Object<{ content: true }>;\n\t\t\taccessLevel: 'read' | 'mutate' | 'transfer';\n\t  }\n\t| ({\n\t\t\t$kind: 'Withdrawal';\n\t\t\tindex: number;\n\t\t\tamount: bigint;\n\t\t\tcoinType: string;\n\t\t\taccessLevel: 'read' | 'mutate' | 'transfer';\n\t  } & (\n\t\t\t| { withdrawFrom: 'Sender' | 'Sponsor' }\n\t\t\t| {\n\t\t\t\t\twithdrawFrom: 'SenderAllowance';\n\t\t\t\t\t/** The address whose balance is debited. */\n\t\t\t\t\tfunder: string;\n\t\t\t\t\t/** The allowance object authorizing the withdrawal. */\n\t\t\t\t\tallowance: string;\n\t\t\t  }\n\t  ));\n\nexport const inputs = createAnalyzer({\n\tdependencies: { data, objectsById },\n\tanalyze:\n\t\t() =>\n\t\t({ data, objectsById }) => {\n\t\t\treturn {\n\t\t\t\tresult: data.inputs.map((input, index): AnalyzedCommandInput => {\n\t\t\t\t\tswitch (input.$kind) {\n\t\t\t\t\t\tcase 'Pure':\n\t\t\t\t\t\t\treturn { $kind: 'Pure', index, bytes: input.Pure.bytes!, accessLevel: 'transfer' };\n\t\t\t\t\t\tcase 'Object': {\n\t\t\t\t\t\t\tlet objectId: string;\n\t\t\t\t\t\t\tswitch (input.Object.$kind) {\n\t\t\t\t\t\t\t\tcase 'ImmOrOwnedObject':\n\t\t\t\t\t\t\t\t\tobjectId = input.Object.ImmOrOwnedObject.objectId;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'SharedObject':\n\t\t\t\t\t\t\t\t\tobjectId = input.Object.SharedObject.objectId;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tcase 'Receiving':\n\t\t\t\t\t\t\t\t\tobjectId = input.Object.Receiving.objectId;\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tthrow new Error(`Unknown object input kind: ${JSON.stringify(input)}`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst object = objectsById.get(objectId);\n\t\t\t\t\t\t\tif (!object) {\n\t\t\t\t\t\t\t\tthrow new Error(`Missing object for id ${objectId}`);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn { $kind: 'Object', index, object, accessLevel: 'read' };\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcase 'FundsWithdrawal': {\n\t\t\t\t\t\t\tconst { reservation, typeArg, withdrawFrom } = input.FundsWithdrawal;\n\t\t\t\t\t\t\tif (reservation.$kind !== 'MaxAmountU64') {\n\t\t\t\t\t\t\t\tthrow new Error(`Unsupported reservation type: ${reservation.$kind}`);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tlet coinType: string;\n\t\t\t\t\t\t\tswitch (typeArg.$kind) {\n\t\t\t\t\t\t\t\tcase 'Balance':\n\t\t\t\t\t\t\t\t\tcoinType = normalizeStructTag(typeArg.Balance);\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Unsupported FundsWithdrawal typeArg: ${JSON.stringify(typeArg)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tswitch (withdrawFrom.$kind) {\n\t\t\t\t\t\t\t\tcase 'Sender':\n\t\t\t\t\t\t\t\tcase 'Sponsor':\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t$kind: 'Withdrawal',\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tamount: BigInt(reservation.MaxAmountU64),\n\t\t\t\t\t\t\t\t\t\tcoinType,\n\t\t\t\t\t\t\t\t\t\twithdrawFrom: withdrawFrom.$kind,\n\t\t\t\t\t\t\t\t\t\taccessLevel: 'transfer',\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tcase 'SenderAllowance':\n\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t$kind: 'Withdrawal',\n\t\t\t\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\t\t\t\tamount: BigInt(reservation.MaxAmountU64),\n\t\t\t\t\t\t\t\t\t\tcoinType,\n\t\t\t\t\t\t\t\t\t\twithdrawFrom: 'SenderAllowance',\n\t\t\t\t\t\t\t\t\t\tfunder: normalizeSuiAddress(withdrawFrom.SenderAllowance.funder),\n\t\t\t\t\t\t\t\t\t\tallowance: normalizeSuiAddress(withdrawFrom.SenderAllowance.allowance),\n\t\t\t\t\t\t\t\t\t\taccessLevel: 'transfer',\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t\t\t\t`Unsupported FundsWithdrawal source: ${JSON.stringify(withdrawFrom)}`,\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tthrow new Error(`Unknown input type: ${JSON.stringify(input)}`);\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n});\n"],"mappings":";;;;;;AAwCA,MAAa,SAAS,eAAe;CACpC,cAAc;EAAE;EAAM;EAAa;CACnC,gBAEE,EAAE,cAAM,iCAAkB;AAC1B,SAAO,EACN,QAAQA,OAAK,OAAO,KAAK,OAAO,UAAgC;AAC/D,WAAQ,MAAM,OAAd;IACC,KAAK,OACJ,QAAO;KAAE,OAAO;KAAQ;KAAO,OAAO,MAAM,KAAK;KAAQ,aAAa;KAAY;IACnF,KAAK,UAAU;KACd,IAAI;AACJ,aAAQ,MAAM,OAAO,OAArB;MACC,KAAK;AACJ,kBAAW,MAAM,OAAO,iBAAiB;AACzC;MACD,KAAK;AACJ,kBAAW,MAAM,OAAO,aAAa;AACrC;MACD,KAAK;AACJ,kBAAW,MAAM,OAAO,UAAU;AAClC;MACD,QACC,OAAM,IAAI,MAAM,8BAA8B,KAAK,UAAU,MAAM,GAAG;;KAGxE,MAAM,SAASC,cAAY,IAAI,SAAS;AACxC,SAAI,CAAC,OACJ,OAAM,IAAI,MAAM,yBAAyB,WAAW;AAGrD,YAAO;MAAE,OAAO;MAAU;MAAO;MAAQ,aAAa;MAAQ;;IAE/D,KAAK,mBAAmB;KACvB,MAAM,EAAE,aAAa,SAAS,iBAAiB,MAAM;AACrD,SAAI,YAAY,UAAU,eACzB,OAAM,IAAI,MAAM,iCAAiC,YAAY,QAAQ;KAEtE,IAAI;AACJ,aAAQ,QAAQ,OAAhB;MACC,KAAK;AACJ,kBAAW,mBAAmB,QAAQ,QAAQ;AAC9C;MACD,QACC,OAAM,IAAI,MACT,wCAAwC,KAAK,UAAU,QAAQ,GAC/D;;AAEH,aAAQ,aAAa,OAArB;MACC,KAAK;MACL,KAAK,UACJ,QAAO;OACN,OAAO;OACP;OACA,QAAQ,OAAO,YAAY,aAAa;OACxC;OACA,cAAc,aAAa;OAC3B,aAAa;OACb;MACF,KAAK,kBACJ,QAAO;OACN,OAAO;OACP;OACA,QAAQ,OAAO,YAAY,aAAa;OACxC;OACA,cAAc;OACd,QAAQ,oBAAoB,aAAa,gBAAgB,OAAO;OAChE,WAAW,oBAAoB,aAAa,gBAAgB,UAAU;OACtE,aAAa;OACb;MACF,QACC,OAAM,IAAI,MACT,uCAAuC,KAAK,UAAU,aAAa,GACnE;;;IAGJ,QACC,OAAM,IAAI,MAAM,uBAAuB,KAAK,UAAU,MAAM,GAAG;;IAEhE,EACF;;CAEH,CAAC"}