{"mappings":"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","sources":["src/index.ts","src/getProbableInterfaces.ts","src/interfaces.ts","src/JsonType.ts","src/parseContract.ts","src/ParsedContract.ts"],"sourcesContent":["export * from './getProbableInterfaces';\nexport * from './interfaces';\nexport * from './JsonType';\nexport * from './parseContract';\nexport * from './ParsedContract';\n","import { StandardInterfaceId, interfaces } from './interfaces';\n\n/**\n * Guesses which standards a contract _probably_ implements based on exported\n * method names.\n *\n * @param methodNames Exported method names\n * @returns Interfaces the contract probably implements, as well as which\n *  methods likely constitute which interfaces\n */\nexport function getProbableInterfaces(methodNames: string[]): {\n  probableInterfaces: StandardInterfaceId[];\n  byMethod: Record<string, StandardInterfaceId[]>;\n} {\n  const probableInterfaces = Object.keys(interfaces).filter(i =>\n    interfaces[i as StandardInterfaceId].methods.every(\n      m => methodNames.indexOf(m.name) !== -1,\n    ),\n  ) as StandardInterfaceId[];\n\n  const byMethod: Record<string, StandardInterfaceId[]> = {};\n  methodNames.forEach(methodName => {\n    byMethod[methodName] = probableInterfaces.filter(\n      i => interfaces[i].methods.map(m => m.name).indexOf(methodName) !== -1,\n    );\n  });\n\n  return { probableInterfaces, byMethod };\n}\n","import { JsonType } from './JsonType';\n\nexport enum StandardInterfaceId {\n  NEP141 = 'nep141',\n  NEP145 = 'nep145',\n  NEP148 = 'nep148',\n  NEP171 = 'nep171',\n  NEP177 = 'nep177',\n  NEP178 = 'nep178',\n  NEP199 = 'nep199',\n  NEP330 = 'nep330',\n}\n\n/**\n * Well-known smart contract interface specification\n */\nexport interface StandardInterface {\n  /** Unique interface ID */\n  id: StandardInterfaceId;\n  /** Human-readable interface name */\n  name: string;\n  /** Methods provided by interface */\n  methods: StandardInterfaceMethod[];\n}\n\nexport interface StandardInterfaceArgument {\n  name: string;\n  /**\n   * An argument can support one or multiple types\n   * (e.g. Rust's `Option<String>` becomes `['string', 'null']`)\n   */\n  type: JsonType | JsonType[];\n}\n\nexport interface StandardInterfaceMethod {\n  name: string;\n  args: StandardInterfaceArgument[];\n}\n\n/**\n * Mapping interface ID to interface specification\n */\nexport const interfaces: Readonly<\n  Record<StandardInterfaceId, StandardInterface>\n> = Object.freeze({\n  [StandardInterfaceId.NEP141]: {\n    id: StandardInterfaceId.NEP141,\n    name: 'FT Core (NEP-141)',\n    methods: [\n      {\n        name: 'ft_transfer',\n        args: [\n          { name: 'receiver_id', type: 'string' },\n          { name: 'amount', type: 'string' },\n          { name: 'memo', type: ['string', 'null'] },\n        ],\n      },\n      {\n        name: 'ft_transfer_call',\n        args: [\n          { name: 'receiver_id', type: 'string' },\n          { name: 'amount', type: 'string' },\n          { name: 'memo', type: ['string', 'null'] },\n          { name: 'msg', type: 'string' },\n        ],\n      },\n      {\n        name: 'ft_total_supply',\n        args: [],\n      },\n      {\n        name: 'ft_balance_of',\n        args: [{ name: 'account_id', type: 'string' }],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP145]: {\n    id: StandardInterfaceId.NEP145,\n    name: 'Storage Management (NEP-145)',\n    methods: [\n      {\n        name: 'storage_deposit',\n        args: [\n          { name: 'account_id', type: ['string', 'null'] },\n          { name: 'registration_only', type: ['boolean', 'null'] },\n        ],\n      },\n      {\n        name: 'storage_withdraw',\n        args: [{ name: 'amount', type: ['string', 'null'] }],\n      },\n      {\n        name: 'storage_unregister',\n        args: [{ name: 'force', type: ['boolean', 'null'] }],\n      },\n      {\n        name: 'storage_balance_bounds',\n        args: [],\n      },\n      {\n        name: 'storage_balance_of',\n        args: [{ name: 'account_id', type: 'string' }],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP148]: {\n    id: StandardInterfaceId.NEP148,\n    name: 'FT Metadata (NEP-148)',\n    methods: [\n      {\n        name: 'ft_metadata',\n        args: [],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP171]: {\n    id: StandardInterfaceId.NEP171,\n    name: 'NFT Core (NEP-171)',\n    methods: [\n      {\n        name: 'nft_transfer',\n        args: [\n          { name: 'receiver_id', type: 'string' },\n          { name: 'token_id', type: 'string' },\n          { name: 'approval_id', type: ['number', 'null'] },\n          { name: 'memo', type: ['string', 'null'] },\n        ],\n      },\n      {\n        name: 'nft_transfer_call',\n        args: [\n          { name: 'receiver_id', type: 'string' },\n          { name: 'token_id', type: 'string' },\n          { name: 'approval_id', type: ['number', 'null'] },\n          { name: 'memo', type: ['string', 'null'] },\n          { name: 'msg', type: 'string' },\n        ],\n      },\n      {\n        name: 'nft_token',\n        args: [{ name: 'token_id', type: 'string' }],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP177]: {\n    id: StandardInterfaceId.NEP177,\n    name: 'NFT Metadata (NEP-177)',\n    methods: [\n      {\n        name: 'nft_metadata',\n        args: [],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP178]: {\n    id: StandardInterfaceId.NEP178,\n    name: 'NFT Approval Management (NEP-178)',\n    methods: [\n      {\n        name: 'nft_approve',\n        args: [\n          { name: 'token_id', type: 'string' },\n          { name: 'account_id', type: 'string' },\n          { name: 'msg', type: ['string', 'null'] },\n        ],\n      },\n      {\n        name: 'nft_revoke',\n        args: [\n          { name: 'token_id', type: 'string' },\n          { name: 'account_id', type: 'string' },\n        ],\n      },\n      {\n        name: 'nft_revoke_all',\n        args: [{ name: 'token_id', type: 'string' }],\n      },\n      {\n        name: 'nft_is_approved',\n        args: [\n          { name: 'token_id', type: 'string' },\n          { name: 'approved_account_id', type: 'string' },\n          { name: 'approval_id', type: ['number', 'null'] },\n        ],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP199]: {\n    id: StandardInterfaceId.NEP199,\n    name: 'Royalties and Payouts (NEP-199)',\n    methods: [\n      {\n        name: 'nft_payout',\n        args: [\n          { name: 'token_id', type: 'string' },\n          { name: 'balance', type: 'string' },\n          { name: 'max_len_payout', type: 'number' },\n        ],\n      },\n      {\n        name: 'nft_transfer_payout',\n        args: [\n          { name: 'receiver_id', type: 'string' },\n          { name: 'token_id', type: 'string' },\n          { name: 'approval_id', type: 'number' },\n          { name: 'balance', type: 'string' },\n          { name: 'max_len_payout', type: 'number' },\n        ],\n      },\n    ],\n  },\n  [StandardInterfaceId.NEP330]: {\n    id: StandardInterfaceId.NEP330,\n    name: 'Source Metadata (NEP-330)',\n    methods: [\n      {\n        name: 'contract_source_metadata',\n        args: [],\n      },\n    ],\n  },\n});\n","/**\n * Data types supported by JSON format\n */\nexport type JsonType =\n  | 'string'\n  | 'number'\n  | 'object'\n  | 'array'\n  | 'boolean'\n  | 'null';\n","import { getProbableInterfaces } from './getProbableInterfaces';\nimport { ParsedContract } from './ParsedContract';\n\nexport async function parseContract(\n  wasmBase64: string,\n): Promise<ParsedContract> {\n  const bytes = base64StringToUint8Array(wasmBase64);\n  const wasmModule = await WebAssembly.compile(bytes);\n  const methodNames = await exportedFunctionNames(wasmModule);\n  const probableInterfaces = getProbableInterfaces(methodNames);\n\n  return {\n    methodNames,\n    ...probableInterfaces,\n  };\n}\n\n/**\n * Converts a base64-encoded string to a byte array. Works in browser and Node\n * environments.\n *\n * @param strb64 base64 string\n * @returns Decoded byte array\n */\nfunction base64StringToUint8Array(strb64: string): Uint8Array {\n  return new Uint8Array(\n    atob(strb64.toString().trim())\n      .split('')\n      .map(c => c.charCodeAt(0)),\n  );\n}\n\n/**\n * Retrieves the names of all exported functions from a WebAssembly module.\n *\n * @param {WebAssembly.Module} wasmModule - The WebAssembly module to extract the exported function names from.\n * @return {Promise<string[]>} An array of strings containing the names of all exported functions.\n */\nasync function exportedFunctionNames(\n  wasmModule: WebAssembly.Module,\n): Promise<string[]> {\n  const exports = WebAssembly.Module.exports(wasmModule);\n\n  const exportedFunctionNames = exports\n    .filter(e => e.kind === 'function')\n    .map(e => e.name);\n\n  return exportedFunctionNames;\n}\n","import { StandardInterfaceId } from './interfaces';\n\nexport interface ParsedContract {\n  /**\n   * Standard interfaces the original contract is likely to support\n   */\n  probableInterfaces: StandardInterfaceId[];\n  /**\n   * Maps method names to the ID of the interface they are likey to constitute\n   */\n  byMethod: Record<string, StandardInterfaceId[]>;\n  /**\n   * Names of functions exported from the original contract\n   */\n  methodNames: string[];\n}\n"],"names":[],"version":3,"file":"bundle.mjs.map"}