@taquito/tzip12 10.1.2 → 10.2.1

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.
@@ -4,8 +4,8 @@ exports.VERSION = void 0;
4
4
  // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
5
5
  /* tslint:disable */
6
6
  exports.VERSION = {
7
- "commitHash": "eb5b2c4973cd11098b68ce62eb6702dea376e569",
8
- "version": "10.1.1"
7
+ "commitHash": "5711569ffaf481d88ba3251343a1788090b35dd4",
8
+ "version": "10.2.1"
9
9
  };
10
10
  /* tslint:enable */
11
11
  //# sourceMappingURL=version.js.map
@@ -374,8 +374,8 @@ var Tzip12Module = /** @class */ (function () {
374
374
  // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
375
375
  /* tslint:disable */
376
376
  var VERSION = {
377
- "commitHash": "eb5b2c4973cd11098b68ce62eb6702dea376e569",
378
- "version": "10.1.1"
377
+ "commitHash": "5711569ffaf481d88ba3251343a1788090b35dd4",
378
+ "version": "10.2.1"
379
379
  };
380
380
  /* tslint:enable */
381
381
 
@@ -1 +1 @@
1
- {"version":3,"file":"taquito-tzip12.es5.js","sources":["../src/tzip12-errors.ts","../src/tzip12-contract-abstraction.ts","../src/composer.ts","../src/tzip12-extension.ts","../src/version.ts"],"sourcesContent":["export class TokenMetadataNotFound implements Error {\n name: string = 'TokenMetadataNotFound';\n message: string;\n\n constructor(public address: string) {\n this.message = `No token metadata was found for the contract: ${address}`;\n }\n}\n\nexport class TokenIdNotFound implements Error {\n name: string = 'TokenIdNotFound';\n message: string;\n\n constructor(public tokenId: number) {\n this.message = `Could not find token metadata for the token ID: ${tokenId}`;\n }\n}\n\nexport class InvalidTokenMetadata implements Error {\n name = 'InvalidTokenMetadata';\n message = 'Non-compliance with the TZIP-012 standard. The required property `decimals` is missing.';\n}","import { MichelsonMap, Schema } from '@taquito/michelson-encoder';\nimport { ContractAbstraction, ContractProvider, Wallet } from '@taquito/taquito';\nimport { Tzip16ContractAbstraction, MetadataContext, View, bytes2Char, MetadataInterface } from '@taquito/tzip16'\nimport { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from './tzip12-errors';\n\nconst tokenMetadataBigMapType = {\n prim: 'big_map',\n args: [\n { prim: 'nat' }, \n { prim: 'pair', args: [\n { prim: 'nat' , annots: ['%token_id']}, \n { prim: \"map\", args: [{ prim: 'string' }, { prim: 'bytes' }], annots: ['%token_info'] }] }],\n annots: ['%token_metadata']\n};\n\ntype BigMapId = { int: string };\n\nexport interface TokenMetadata {\n token_id: number,\n decimals: number\n name?: string,\n symbol?: string,\n}\n\nexport class Tzip12ContractAbstraction {\n private _tzip16ContractAbstraction: Tzip16ContractAbstraction;\n\n constructor(\n private contractAbstraction: ContractAbstraction<ContractProvider | Wallet>,\n private context: MetadataContext\n ) {\n this._tzip16ContractAbstraction = new Tzip16ContractAbstraction(this.contractAbstraction, this.context)\n }\n\n /**\n * @description Fetches the contract metadata (according to the Tzip-016 standard)\n * @returns An object containing the metadata, the uri, an optional integrity check result and an optional sha256 hash \n * or `Undefined` if the contract has no metadata (non-compliant with Tzip-016)\n */\n private async getContractMetadata() {\n try {\n const contractMetadata = await this._tzip16ContractAbstraction.getMetadata();\n return contractMetadata.metadata;\n } catch (err) {\n // The contract is not compliant with Tzip-016. There is no contract metadata.\n }\n }\n\n /**\n * @description The Tzip-016 \"interfaces\" field MUST be present in the contract metadata. It should contain \"TZIP-012[version-info]\"\n * @returns True if \"interfaces\" field is present and contains \"TZIP-012\", false otherwise\n */\n async isTzip12Compliant() {\n let isCompliant = false;\n const metadata = await this.getContractMetadata();\n if (metadata) {\n const tzip12Interface = metadata.interfaces?.filter((x) => {\n return x.substring(0, 8) === \"TZIP-012\";\n });\n isCompliant = (tzip12Interface && tzip12Interface.length !== 0) ? true : false;\n }\n return isCompliant;\n }\n\n /**\n * @description Fetches the token metadata for a specified token ID.\n * The function first tries to find a `token_metadata` view in the contract metadata and to execute it with the token ID.\n * If there is no view, the function tries to find a `token_metadata` bigmap in the top-level pairs of the storage.\n * @param tokenId The ID of the token for which we want to retrieve token metadata\n * @returns An object of type `TokenMetadata`\n */\n async getTokenMetadata(tokenId: number) {\n const tokenMetadata = await this.retrieveTokenMetadataFromView(tokenId);\n return (!tokenMetadata) ? this.retrieveTokenMetadataFromBigMap(tokenId) : tokenMetadata;\n }\n\n private async retrieveTokenMetadataFromView(tokenId: number) {\n if (await this.getContractMetadata()) {\n const views = await this._tzip16ContractAbstraction.metadataViews();\n if (views && this.hasTokenMetadataView(views)) {\n return this.executeTokenMetadataView(views['token_metadata'](), tokenId);\n }\n }\n }\n\n private hasTokenMetadataView(views: {}) {\n for (let view of Object.keys(views)) {\n if (view === 'token_metadata') {\n return true;\n }\n }\n return false;\n }\n\n private async executeTokenMetadataView(tokenMetadataView: View, tokenId: number): Promise<TokenMetadata> {\n let tokenMetadata;\n try {\n tokenMetadata = await tokenMetadataView.executeView(tokenId);\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n const tokenMap = Object.values(tokenMetadata)[1];\n if (!MichelsonMap.isMichelsonMap(tokenMap)) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(tokenMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, (tokenMap as MichelsonMap<string, string>), metadataFromUri);\n }\n\n private async fetchTokenMetadataFromUri(tokenMetadata: MichelsonMap<string, string>) {\n const uri = tokenMetadata.get(\"\");\n if (uri) {\n try {\n const metadataFromUri = await this.context.metadataProvider.provideMetadata(\n this.contractAbstraction,\n bytes2Char(uri),\n this.context\n );\n return metadataFromUri.metadata;\n } catch (e) {\n if (e.name === 'InvalidUri') {\n console.warn(`The URI ${bytes2Char(uri)} is present in the token metadata, but is invalid.`);\n } else {\n throw e;\n }\n }\n }\n }\n\n private formatMetadataToken(tokenId: number, metadataTokenMap: MichelsonMap<string, string>, metadataFromUri?: any): TokenMetadata {\n const tokenMetadataDecoded = {\n 'token_id': tokenId\n };\n for (let keyTokenMetadata of metadataTokenMap.keys()) {\n if (keyTokenMetadata === 'decimals') {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: Number(bytes2Char(metadataTokenMap.get(keyTokenMetadata)!)) });\n }\n else if (!(keyTokenMetadata === '')) {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: bytes2Char(metadataTokenMap.get(keyTokenMetadata)!) });\n }\n }\n // if an URI is present, add the fetched properties to the object\n // if a property is in the URI and the map, prevalence is accorded to value from the URI\n if (metadataFromUri) {\n for(let property in metadataFromUri) {\n Object.assign(tokenMetadataDecoded, {[property]: metadataFromUri[property]})\n }\n }\n if(!('decimals' in tokenMetadataDecoded)) {\n throw new InvalidTokenMetadata();\n } \n return tokenMetadataDecoded;\n }\n\n private async retrieveTokenMetadataFromBigMap(tokenId: number) {\n const bigmapTokenMetadataId = this.findTokenMetadataBigMap();\n let pairNatMap;\n try {\n pairNatMap = await this.context.contract.getBigMapKeyByID<any>(\n bigmapTokenMetadataId['int'].toString(),\n tokenId.toString(),\n new Schema(tokenMetadataBigMapType)\n );\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n\n const michelsonMap = pairNatMap['token_info'];\n if (!MichelsonMap.isMichelsonMap(michelsonMap)) {\n throw new TokenIdNotFound(tokenId);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(michelsonMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, michelsonMap as MichelsonMap<string, string>, metadataFromUri)\n }\n\n private findTokenMetadataBigMap(): BigMapId {\n const tokenMetadataBigMapId = this.contractAbstraction.schema.FindFirstInTopLevelPair<BigMapId>(\n this.contractAbstraction.script.storage,\n tokenMetadataBigMapType\n );\n if (!tokenMetadataBigMapId) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n return tokenMetadataBigMapId;\n }\n\n\n}\n","import { Context, ContractAbstraction, ContractProvider, Wallet } from \"@taquito/taquito\";\nimport { Tzip12ContractAbstraction } from './tzip12-contract-abstraction'\nimport { MetadataContext } from \"@taquito/tzip16\"\n\nconst ABSTRACTION_KEY = Symbol(\"Tzip12ContractAbstractionObjectKey\");\n\nexport function tzip12<T extends ContractAbstraction<ContractProvider | Wallet>>(abs: T, context: Context) {\n return Object.assign(abs, {\n // namespace tzip12\n tzip12 (this: ContractAbstraction<ContractProvider | Wallet> & { [ABSTRACTION_KEY]?: Tzip12ContractAbstraction}) {\n if (!this[ABSTRACTION_KEY]) {\n this[ABSTRACTION_KEY] = new Tzip12ContractAbstraction(this, context as MetadataContext);\n }\n \n return this[ABSTRACTION_KEY]!\n }\n })\n}","import { Context, Extension } from \"@taquito/taquito\";\nimport { DEFAULT_HANDLERS, MetadataProviderInterface, MetadataProvider } from '@taquito/tzip16'\n\n// The same default metadataProvider is used for tzip16 and tzip12\nexport class Tzip12Module implements Extension {\n private _metadataProvider: MetadataProviderInterface;\n\n constructor(metadataProvider?: MetadataProviderInterface) {\n this._metadataProvider = metadataProvider ? metadataProvider : new MetadataProvider(DEFAULT_HANDLERS);\n }\n\n configureContext(context: Context) {\n Object.assign(context, { metadataProvider: this._metadataProvider });\n }\n}","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"commitHash\": \"eb5b2c4973cd11098b68ce62eb6702dea376e569\",\n \"version\": \"10.1.1\"\n};\n/* tslint:enable */\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAII,+BAAmB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAHlC,SAAI,GAAW,uBAAuB,CAAC;QAInC,IAAI,CAAC,OAAO,GAAG,mDAAiD,OAAS,CAAC;KAC7E;IACL,4BAAC;AAAD,CAAC,IAAA;;IAMG,yBAAmB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAHlC,SAAI,GAAW,iBAAiB,CAAC;QAI7B,IAAI,CAAC,OAAO,GAAG,qDAAmD,OAAS,CAAC;KAC/E;IACL,sBAAC;AAAD,CAAC,IAAA;;IAED;QACI,SAAI,GAAG,sBAAsB,CAAC;QAC9B,YAAO,GAAG,yFAAyF,CAAC;KACvG;IAAD,2BAAC;AAAD,CAAC;;AChBD,IAAM,uBAAuB,GAAG;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE;QACF,EAAE,IAAI,EAAE,KAAK,EAAE;QACf,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBAClB,EAAE,IAAI,EAAE,KAAK,EAAG,MAAM,EAAE,CAAC,WAAW,CAAC,EAAC;gBACtC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;aAAC,EAAE;KAAC;IACnG,MAAM,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC;;IAcE,mCACY,mBAAmE,EACnE,OAAwB;QADxB,wBAAmB,GAAnB,mBAAmB,CAAgD;QACnE,YAAO,GAAP,OAAO,CAAiB;QAEhC,IAAI,CAAC,0BAA0B,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;KAC1G;;;;;;IAOa,uDAAmB,GAAjC;;;;;;;wBAEiC,qBAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,EAAA;;wBAAtE,gBAAgB,GAAG,SAAmD;wBAC5E,sBAAO,gBAAgB,CAAC,QAAQ,EAAC;;;;;;;;KAIxC;;;;;IAMK,qDAAiB,GAAvB;;;;;;;wBACQ,WAAW,GAAG,KAAK,CAAC;wBACP,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;wBAA3C,QAAQ,GAAG,SAAgC;wBACjD,IAAI,QAAQ,EAAE;4BACJ,eAAe,GAAG,MAAA,QAAQ,CAAC,UAAU,0CAAE,MAAM,CAAC,UAAC,CAAC;gCAClD,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC;6BAC3C,CAAC,CAAC;4BACH,WAAW,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;yBAClF;wBACD,sBAAO,WAAW,EAAC;;;;KACtB;;;;;;;;IASK,oDAAgB,GAAtB,UAAuB,OAAe;;;;;4BACZ,qBAAM,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,EAAA;;wBAAjE,aAAa,GAAG,SAAiD;wBACvE,sBAAO,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,GAAG,aAAa,EAAC;;;;KAC3F;IAEa,iEAA6B,GAA3C,UAA4C,OAAe;;;;;4BACnD,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;6BAAhC,SAAgC,EAAhC,wBAAgC;wBAClB,qBAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,EAAA;;wBAA7D,KAAK,GAAG,SAAqD;wBACnE,IAAI,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;4BAC3C,sBAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAC;yBAC5E;;;;;;KAER;IAEO,wDAAoB,GAA5B,UAA6B,KAAS;;;YAClC,KAAiB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,gBAAA,4BAAE;gBAAhC,IAAI,IAAI,WAAA;gBACT,IAAI,IAAI,KAAK,gBAAgB,EAAE;oBAC3B,OAAO,IAAI,CAAC;iBACf;aACJ;;;;;;;;;QACD,OAAO,KAAK,CAAC;KAChB;IAEa,4DAAwB,GAAtC,UAAuC,iBAAuB,EAAE,OAAe;;;;;;;wBAGvD,qBAAM,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAA;;wBAA5D,aAAa,GAAG,SAA4C,CAAC;;;;wBAE7D,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;;wBAEjC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;4BACxC,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;yBACrE;wBACuB,qBAAM,IAAI,CAAC,yBAAyB,CAAC,QAAwC,CAAC,EAAA;;wBAAhG,eAAe,GAAG,SAA8E;wBACtG,sBAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAG,QAAyC,EAAE,eAAe,CAAC,EAAC;;;;KACzG;IAEa,6DAAyB,GAAvC,UAAwC,aAA2C;;;;;;wBACzE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;6BAC9B,GAAG,EAAH,wBAAG;;;;wBAEyB,qBAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CACvE,IAAI,CAAC,mBAAmB,EACxB,UAAU,CAAC,GAAG,CAAC,EACf,IAAI,CAAC,OAAO,CACf,EAAA;;wBAJK,eAAe,GAAG,SAIvB;wBACD,sBAAO,eAAe,CAAC,QAAQ,EAAC;;;wBAEhC,IAAI,GAAC,CAAC,IAAI,KAAK,YAAY,EAAE;4BACzB,OAAO,CAAC,IAAI,CAAC,aAAW,UAAU,CAAC,GAAG,CAAC,uDAAoD,CAAC,CAAC;yBAChG;6BAAM;4BACH,MAAM,GAAC,CAAC;yBACX;;;;;;KAGZ;IAEO,uDAAmB,GAA3B,UAA4B,OAAe,EAAE,gBAA8C,EAAE,eAAqB;;QAC9G,IAAM,oBAAoB,GAAG;YACzB,UAAU,EAAE,OAAO;SACtB,CAAC;;YACF,KAA6B,IAAA,KAAA,SAAA,gBAAgB,CAAC,IAAI,EAAE,CAAA,gBAAA,4BAAE;gBAAjD,IAAI,gBAAgB,WAAA;gBACrB,IAAI,gBAAgB,KAAK,UAAU,EAAE;oBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAI,GAAC,gBAAgB,IAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,CAAC,MAAG,CAAC;iBAC5H;qBACI,IAAI,EAAE,gBAAgB,KAAK,EAAE,CAAC,EAAE;oBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAI,GAAC,gBAAgB,IAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,MAAG,CAAC;iBACpH;aACJ;;;;;;;;;;;QAGD,IAAI,eAAe,EAAE;YACjB,KAAI,IAAI,QAAQ,IAAI,eAAe,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAG,GAAC,QAAQ,IAAG,eAAe,CAAC,QAAQ,CAAC,MAAE,CAAA;aAC/E;SACJ;QACD,IAAG,EAAE,UAAU,IAAI,oBAAoB,CAAC,EAAE;YACtC,MAAM,IAAI,oBAAoB,EAAE,CAAC;SACpC;QACD,OAAO,oBAAoB,CAAC;KAC/B;IAEa,mEAA+B,GAA7C,UAA8C,OAAe;;;;;;wBACnD,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;;;;wBAG5C,qBAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CACrD,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EACvC,OAAO,CAAC,QAAQ,EAAE,EAClB,IAAI,MAAM,CAAC,uBAAuB,CAAC,CACtC,EAAA;;wBAJD,UAAU,GAAG,SAIZ,CAAC;;;;wBAEF,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;;wBAGjC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;wBAC9C,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;4BAC5C,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;yBACtC;wBACuB,qBAAM,IAAI,CAAC,yBAAyB,CAAC,YAA4C,CAAC,EAAA;;wBAApG,eAAe,GAAG,SAAkF;wBAC1G,sBAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAA4C,EAAE,eAAe,CAAC,EAAA;;;;KAC1G;IAEO,2DAAuB,GAA/B;QACI,IAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,uBAAuB,CACjF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EACvC,uBAAuB,CAC1B,CAAC;QACF,IAAI,CAAC,qBAAqB,EAAE;YACxB,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SACrE;QACD,OAAO,qBAAqB,CAAC;KAChC;IAGL,gCAAC;AAAD,CAAC;;ACvLD,IAAM,eAAe,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;SAErD,MAAM,CAA2D,GAAM,EAAE,OAAgB;IACrG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;;QAEtB,MAAM,EAAN;YACI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,OAA0B,CAAC,CAAC;aAC3F;YAED,OAAO,IAAI,CAAC,eAAe,CAAE,CAAA;SAChC;KACJ,CAAC,CAAA;AACN;;ACdA;;IAII,sBAAY,gBAA4C;QACpD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;KACzG;IAED,uCAAgB,GAAhB,UAAiB,OAAgB;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxE;IACL,mBAAC;AAAD,CAAC;;ACbD;AACA;IACa,OAAO,GAAG;IACnB,YAAY,EAAE,0CAA0C;IACxD,SAAS,EAAE,QAAQ;EACrB;AACF;;;;"}
1
+ {"version":3,"file":"taquito-tzip12.es5.js","sources":["../src/tzip12-errors.ts","../src/tzip12-contract-abstraction.ts","../src/composer.ts","../src/tzip12-extension.ts","../src/version.ts"],"sourcesContent":["export class TokenMetadataNotFound implements Error {\n name: string = 'TokenMetadataNotFound';\n message: string;\n\n constructor(public address: string) {\n this.message = `No token metadata was found for the contract: ${address}`;\n }\n}\n\nexport class TokenIdNotFound implements Error {\n name: string = 'TokenIdNotFound';\n message: string;\n\n constructor(public tokenId: number) {\n this.message = `Could not find token metadata for the token ID: ${tokenId}`;\n }\n}\n\nexport class InvalidTokenMetadata implements Error {\n name = 'InvalidTokenMetadata';\n message = 'Non-compliance with the TZIP-012 standard. The required property `decimals` is missing.';\n}","import { MichelsonMap, Schema } from '@taquito/michelson-encoder';\nimport { ContractAbstraction, ContractProvider, Wallet } from '@taquito/taquito';\nimport { Tzip16ContractAbstraction, MetadataContext, View, bytes2Char, MetadataInterface } from '@taquito/tzip16'\nimport { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from './tzip12-errors';\n\nconst tokenMetadataBigMapType = {\n prim: 'big_map',\n args: [\n { prim: 'nat' }, \n { prim: 'pair', args: [\n { prim: 'nat' , annots: ['%token_id']}, \n { prim: \"map\", args: [{ prim: 'string' }, { prim: 'bytes' }], annots: ['%token_info'] }] }],\n annots: ['%token_metadata']\n};\n\ntype BigMapId = { int: string };\n\nexport interface TokenMetadata {\n token_id: number,\n decimals: number\n name?: string,\n symbol?: string,\n}\n\nexport class Tzip12ContractAbstraction {\n private _tzip16ContractAbstraction: Tzip16ContractAbstraction;\n\n constructor(\n private contractAbstraction: ContractAbstraction<ContractProvider | Wallet>,\n private context: MetadataContext\n ) {\n this._tzip16ContractAbstraction = new Tzip16ContractAbstraction(this.contractAbstraction, this.context)\n }\n\n /**\n * @description Fetches the contract metadata (according to the Tzip-016 standard)\n * @returns An object containing the metadata, the uri, an optional integrity check result and an optional sha256 hash \n * or `Undefined` if the contract has no metadata (non-compliant with Tzip-016)\n */\n private async getContractMetadata() {\n try {\n const contractMetadata = await this._tzip16ContractAbstraction.getMetadata();\n return contractMetadata.metadata;\n } catch (err) {\n // The contract is not compliant with Tzip-016. There is no contract metadata.\n }\n }\n\n /**\n * @description The Tzip-016 \"interfaces\" field MUST be present in the contract metadata. It should contain \"TZIP-012[version-info]\"\n * @returns True if \"interfaces\" field is present and contains \"TZIP-012\", false otherwise\n */\n async isTzip12Compliant() {\n let isCompliant = false;\n const metadata = await this.getContractMetadata();\n if (metadata) {\n const tzip12Interface = metadata.interfaces?.filter((x) => {\n return x.substring(0, 8) === \"TZIP-012\";\n });\n isCompliant = (tzip12Interface && tzip12Interface.length !== 0) ? true : false;\n }\n return isCompliant;\n }\n\n /**\n * @description Fetches the token metadata for a specified token ID.\n * The function first tries to find a `token_metadata` view in the contract metadata and to execute it with the token ID.\n * If there is no view, the function tries to find a `token_metadata` bigmap in the top-level pairs of the storage.\n * @param tokenId The ID of the token for which we want to retrieve token metadata\n * @returns An object of type `TokenMetadata`\n */\n async getTokenMetadata(tokenId: number) {\n const tokenMetadata = await this.retrieveTokenMetadataFromView(tokenId);\n return (!tokenMetadata) ? this.retrieveTokenMetadataFromBigMap(tokenId) : tokenMetadata;\n }\n\n private async retrieveTokenMetadataFromView(tokenId: number) {\n if (await this.getContractMetadata()) {\n const views = await this._tzip16ContractAbstraction.metadataViews();\n if (views && this.hasTokenMetadataView(views)) {\n return this.executeTokenMetadataView(views['token_metadata'](), tokenId);\n }\n }\n }\n\n private hasTokenMetadataView(views: {}) {\n for (let view of Object.keys(views)) {\n if (view === 'token_metadata') {\n return true;\n }\n }\n return false;\n }\n\n private async executeTokenMetadataView(tokenMetadataView: View, tokenId: number): Promise<TokenMetadata> {\n let tokenMetadata;\n try {\n tokenMetadata = await tokenMetadataView.executeView(tokenId);\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n const tokenMap = Object.values(tokenMetadata)[1];\n if (!MichelsonMap.isMichelsonMap(tokenMap)) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(tokenMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, (tokenMap as MichelsonMap<string, string>), metadataFromUri);\n }\n\n private async fetchTokenMetadataFromUri(tokenMetadata: MichelsonMap<string, string>) {\n const uri = tokenMetadata.get(\"\");\n if (uri) {\n try {\n const metadataFromUri = await this.context.metadataProvider.provideMetadata(\n this.contractAbstraction,\n bytes2Char(uri),\n this.context\n );\n return metadataFromUri.metadata;\n } catch (e) {\n if (e.name === 'InvalidUri') {\n console.warn(`The URI ${bytes2Char(uri)} is present in the token metadata, but is invalid.`);\n } else {\n throw e;\n }\n }\n }\n }\n\n private formatMetadataToken(tokenId: number, metadataTokenMap: MichelsonMap<string, string>, metadataFromUri?: any): TokenMetadata {\n const tokenMetadataDecoded = {\n 'token_id': tokenId\n };\n for (let keyTokenMetadata of metadataTokenMap.keys()) {\n if (keyTokenMetadata === 'decimals') {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: Number(bytes2Char(metadataTokenMap.get(keyTokenMetadata)!)) });\n }\n else if (!(keyTokenMetadata === '')) {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: bytes2Char(metadataTokenMap.get(keyTokenMetadata)!) });\n }\n }\n // if an URI is present, add the fetched properties to the object\n // if a property is in the URI and the map, prevalence is accorded to value from the URI\n if (metadataFromUri) {\n for(let property in metadataFromUri) {\n Object.assign(tokenMetadataDecoded, {[property]: metadataFromUri[property]})\n }\n }\n if(!('decimals' in tokenMetadataDecoded)) {\n throw new InvalidTokenMetadata();\n } \n return tokenMetadataDecoded;\n }\n\n private async retrieveTokenMetadataFromBigMap(tokenId: number) {\n const bigmapTokenMetadataId = this.findTokenMetadataBigMap();\n let pairNatMap;\n try {\n pairNatMap = await this.context.contract.getBigMapKeyByID<any>(\n bigmapTokenMetadataId['int'].toString(),\n tokenId.toString(),\n new Schema(tokenMetadataBigMapType)\n );\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n\n const michelsonMap = pairNatMap['token_info'];\n if (!MichelsonMap.isMichelsonMap(michelsonMap)) {\n throw new TokenIdNotFound(tokenId);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(michelsonMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, michelsonMap as MichelsonMap<string, string>, metadataFromUri)\n }\n\n private findTokenMetadataBigMap(): BigMapId {\n const tokenMetadataBigMapId = this.contractAbstraction.schema.FindFirstInTopLevelPair<BigMapId>(\n this.contractAbstraction.script.storage,\n tokenMetadataBigMapType\n );\n if (!tokenMetadataBigMapId) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n return tokenMetadataBigMapId;\n }\n\n\n}\n","import { Context, ContractAbstraction, ContractProvider, Wallet } from \"@taquito/taquito\";\nimport { Tzip12ContractAbstraction } from './tzip12-contract-abstraction'\nimport { MetadataContext } from \"@taquito/tzip16\"\n\nconst ABSTRACTION_KEY = Symbol(\"Tzip12ContractAbstractionObjectKey\");\n\nexport function tzip12<T extends ContractAbstraction<ContractProvider | Wallet>>(abs: T, context: Context) {\n return Object.assign(abs, {\n // namespace tzip12\n tzip12 (this: ContractAbstraction<ContractProvider | Wallet> & { [ABSTRACTION_KEY]?: Tzip12ContractAbstraction}) {\n if (!this[ABSTRACTION_KEY]) {\n this[ABSTRACTION_KEY] = new Tzip12ContractAbstraction(this, context as MetadataContext);\n }\n \n return this[ABSTRACTION_KEY]!\n }\n })\n}","import { Context, Extension } from \"@taquito/taquito\";\nimport { DEFAULT_HANDLERS, MetadataProviderInterface, MetadataProvider } from '@taquito/tzip16'\n\n// The same default metadataProvider is used for tzip16 and tzip12\nexport class Tzip12Module implements Extension {\n private _metadataProvider: MetadataProviderInterface;\n\n constructor(metadataProvider?: MetadataProviderInterface) {\n this._metadataProvider = metadataProvider ? metadataProvider : new MetadataProvider(DEFAULT_HANDLERS);\n }\n\n configureContext(context: Context) {\n Object.assign(context, { metadataProvider: this._metadataProvider });\n }\n}","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"commitHash\": \"5711569ffaf481d88ba3251343a1788090b35dd4\",\n \"version\": \"10.2.1\"\n};\n/* tslint:enable */\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAII,+BAAmB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAHlC,SAAI,GAAW,uBAAuB,CAAC;QAInC,IAAI,CAAC,OAAO,GAAG,mDAAiD,OAAS,CAAC;KAC7E;IACL,4BAAC;AAAD,CAAC,IAAA;;IAMG,yBAAmB,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;QAHlC,SAAI,GAAW,iBAAiB,CAAC;QAI7B,IAAI,CAAC,OAAO,GAAG,qDAAmD,OAAS,CAAC;KAC/E;IACL,sBAAC;AAAD,CAAC,IAAA;;IAED;QACI,SAAI,GAAG,sBAAsB,CAAC;QAC9B,YAAO,GAAG,yFAAyF,CAAC;KACvG;IAAD,2BAAC;AAAD,CAAC;;AChBD,IAAM,uBAAuB,GAAG;IAC5B,IAAI,EAAE,SAAS;IACf,IAAI,EAAE;QACF,EAAE,IAAI,EAAE,KAAK,EAAE;QACf,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;gBAClB,EAAE,IAAI,EAAE,KAAK,EAAG,MAAM,EAAE,CAAC,WAAW,CAAC,EAAC;gBACtC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,aAAa,CAAC,EAAE;aAAC,EAAE;KAAC;IACnG,MAAM,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC;;IAcE,mCACY,mBAAmE,EACnE,OAAwB;QADxB,wBAAmB,GAAnB,mBAAmB,CAAgD;QACnE,YAAO,GAAP,OAAO,CAAiB;QAEhC,IAAI,CAAC,0BAA0B,GAAG,IAAI,yBAAyB,CAAC,IAAI,CAAC,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAA;KAC1G;;;;;;IAOa,uDAAmB,GAAjC;;;;;;;wBAEiC,qBAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,EAAA;;wBAAtE,gBAAgB,GAAG,SAAmD;wBAC5E,sBAAO,gBAAgB,CAAC,QAAQ,EAAC;;;;;;;;KAIxC;;;;;IAMK,qDAAiB,GAAvB;;;;;;;wBACQ,WAAW,GAAG,KAAK,CAAC;wBACP,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;wBAA3C,QAAQ,GAAG,SAAgC;wBACjD,IAAI,QAAQ,EAAE;4BACJ,eAAe,GAAG,MAAA,QAAQ,CAAC,UAAU,0CAAE,MAAM,CAAC,UAAC,CAAC;gCAClD,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,UAAU,CAAC;6BAC3C,CAAC,CAAC;4BACH,WAAW,GAAG,CAAC,eAAe,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC;yBAClF;wBACD,sBAAO,WAAW,EAAC;;;;KACtB;;;;;;;;IASK,oDAAgB,GAAtB,UAAuB,OAAe;;;;;4BACZ,qBAAM,IAAI,CAAC,6BAA6B,CAAC,OAAO,CAAC,EAAA;;wBAAjE,aAAa,GAAG,SAAiD;wBACvE,sBAAO,CAAC,CAAC,aAAa,IAAI,IAAI,CAAC,+BAA+B,CAAC,OAAO,CAAC,GAAG,aAAa,EAAC;;;;KAC3F;IAEa,iEAA6B,GAA3C,UAA4C,OAAe;;;;;4BACnD,qBAAM,IAAI,CAAC,mBAAmB,EAAE,EAAA;;6BAAhC,SAAgC,EAAhC,wBAAgC;wBAClB,qBAAM,IAAI,CAAC,0BAA0B,CAAC,aAAa,EAAE,EAAA;;wBAA7D,KAAK,GAAG,SAAqD;wBACnE,IAAI,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;4BAC3C,sBAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,EAAE,OAAO,CAAC,EAAC;yBAC5E;;;;;;KAER;IAEO,wDAAoB,GAA5B,UAA6B,KAAS;;;YAClC,KAAiB,IAAA,KAAA,SAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA,gBAAA,4BAAE;gBAAhC,IAAI,IAAI,WAAA;gBACT,IAAI,IAAI,KAAK,gBAAgB,EAAE;oBAC3B,OAAO,IAAI,CAAC;iBACf;aACJ;;;;;;;;;QACD,OAAO,KAAK,CAAC;KAChB;IAEa,4DAAwB,GAAtC,UAAuC,iBAAuB,EAAE,OAAe;;;;;;;wBAGvD,qBAAM,iBAAiB,CAAC,WAAW,CAAC,OAAO,CAAC,EAAA;;wBAA5D,aAAa,GAAG,SAA4C,CAAC;;;;wBAE7D,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;;wBAEjC,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;wBACjD,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE;4BACxC,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;yBACrE;wBACuB,qBAAM,IAAI,CAAC,yBAAyB,CAAC,QAAwC,CAAC,EAAA;;wBAAhG,eAAe,GAAG,SAA8E;wBACtG,sBAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAG,QAAyC,EAAE,eAAe,CAAC,EAAC;;;;KACzG;IAEa,6DAAyB,GAAvC,UAAwC,aAA2C;;;;;;wBACzE,GAAG,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;6BAC9B,GAAG,EAAH,wBAAG;;;;wBAEyB,qBAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,eAAe,CACvE,IAAI,CAAC,mBAAmB,EACxB,UAAU,CAAC,GAAG,CAAC,EACf,IAAI,CAAC,OAAO,CACf,EAAA;;wBAJK,eAAe,GAAG,SAIvB;wBACD,sBAAO,eAAe,CAAC,QAAQ,EAAC;;;wBAEhC,IAAI,GAAC,CAAC,IAAI,KAAK,YAAY,EAAE;4BACzB,OAAO,CAAC,IAAI,CAAC,aAAW,UAAU,CAAC,GAAG,CAAC,uDAAoD,CAAC,CAAC;yBAChG;6BAAM;4BACH,MAAM,GAAC,CAAC;yBACX;;;;;;KAGZ;IAEO,uDAAmB,GAA3B,UAA4B,OAAe,EAAE,gBAA8C,EAAE,eAAqB;;QAC9G,IAAM,oBAAoB,GAAG;YACzB,UAAU,EAAE,OAAO;SACtB,CAAC;;YACF,KAA6B,IAAA,KAAA,SAAA,gBAAgB,CAAC,IAAI,EAAE,CAAA,gBAAA,4BAAE;gBAAjD,IAAI,gBAAgB,WAAA;gBACrB,IAAI,gBAAgB,KAAK,UAAU,EAAE;oBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAI,GAAC,gBAAgB,IAAG,MAAM,CAAC,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,CAAC,MAAG,CAAC;iBAC5H;qBACI,IAAI,EAAE,gBAAgB,KAAK,EAAE,CAAC,EAAE;oBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAI,GAAC,gBAAgB,IAAG,UAAU,CAAC,gBAAgB,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAAC,MAAG,CAAC;iBACpH;aACJ;;;;;;;;;;;QAGD,IAAI,eAAe,EAAE;YACjB,KAAI,IAAI,QAAQ,IAAI,eAAe,EAAE;gBACjC,MAAM,CAAC,MAAM,CAAC,oBAAoB,YAAG,GAAC,QAAQ,IAAG,eAAe,CAAC,QAAQ,CAAC,MAAE,CAAA;aAC/E;SACJ;QACD,IAAG,EAAE,UAAU,IAAI,oBAAoB,CAAC,EAAE;YACtC,MAAM,IAAI,oBAAoB,EAAE,CAAC;SACpC;QACD,OAAO,oBAAoB,CAAC;KAC/B;IAEa,mEAA+B,GAA7C,UAA8C,OAAe;;;;;;wBACnD,qBAAqB,GAAG,IAAI,CAAC,uBAAuB,EAAE,CAAC;;;;wBAG5C,qBAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CACrD,qBAAqB,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EACvC,OAAO,CAAC,QAAQ,EAAE,EAClB,IAAI,MAAM,CAAC,uBAAuB,CAAC,CACtC,EAAA;;wBAJD,UAAU,GAAG,SAIZ,CAAC;;;;wBAEF,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;;wBAGjC,YAAY,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;wBAC9C,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;4BAC5C,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;yBACtC;wBACuB,qBAAM,IAAI,CAAC,yBAAyB,CAAC,YAA4C,CAAC,EAAA;;wBAApG,eAAe,GAAG,SAAkF;wBAC1G,sBAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,YAA4C,EAAE,eAAe,CAAC,EAAA;;;;KAC1G;IAEO,2DAAuB,GAA/B;QACI,IAAM,qBAAqB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,uBAAuB,CACjF,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,OAAO,EACvC,uBAAuB,CAC1B,CAAC;QACF,IAAI,CAAC,qBAAqB,EAAE;YACxB,MAAM,IAAI,qBAAqB,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;SACrE;QACD,OAAO,qBAAqB,CAAC;KAChC;IAGL,gCAAC;AAAD,CAAC;;ACvLD,IAAM,eAAe,GAAG,MAAM,CAAC,oCAAoC,CAAC,CAAC;SAErD,MAAM,CAA2D,GAAM,EAAE,OAAgB;IACrG,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE;;QAEtB,MAAM,EAAN;YACI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE;gBACxB,IAAI,CAAC,eAAe,CAAC,GAAG,IAAI,yBAAyB,CAAC,IAAI,EAAE,OAA0B,CAAC,CAAC;aAC3F;YAED,OAAO,IAAI,CAAC,eAAe,CAAE,CAAA;SAChC;KACJ,CAAC,CAAA;AACN;;ACdA;;IAII,sBAAY,gBAA4C;QACpD,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;KACzG;IAED,uCAAgB,GAAhB,UAAiB,OAAgB;QAC7B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;KACxE;IACL,mBAAC;AAAD,CAAC;;ACbD;AACA;IACa,OAAO,GAAG;IACnB,YAAY,EAAE,0CAA0C;IACxD,SAAS,EAAE,QAAQ;EACrB;AACF;;;;"}
@@ -377,8 +377,8 @@
377
377
  // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
378
378
  /* tslint:disable */
379
379
  var VERSION = {
380
- "commitHash": "eb5b2c4973cd11098b68ce62eb6702dea376e569",
381
- "version": "10.1.1"
380
+ "commitHash": "5711569ffaf481d88ba3251343a1788090b35dd4",
381
+ "version": "10.2.1"
382
382
  };
383
383
  /* tslint:enable */
384
384
 
@@ -1 +1 @@
1
- {"version":3,"file":"taquito-tzip12.umd.js","sources":["../src/tzip12-errors.ts","../src/tzip12-contract-abstraction.ts","../src/composer.ts","../src/tzip12-extension.ts","../src/version.ts"],"sourcesContent":["export class TokenMetadataNotFound implements Error {\n name: string = 'TokenMetadataNotFound';\n message: string;\n\n constructor(public address: string) {\n this.message = `No token metadata was found for the contract: ${address}`;\n }\n}\n\nexport class TokenIdNotFound implements Error {\n name: string = 'TokenIdNotFound';\n message: string;\n\n constructor(public tokenId: number) {\n this.message = `Could not find token metadata for the token ID: ${tokenId}`;\n }\n}\n\nexport class InvalidTokenMetadata implements Error {\n name = 'InvalidTokenMetadata';\n message = 'Non-compliance with the TZIP-012 standard. The required property `decimals` is missing.';\n}","import { MichelsonMap, Schema } from '@taquito/michelson-encoder';\nimport { ContractAbstraction, ContractProvider, Wallet } from '@taquito/taquito';\nimport { Tzip16ContractAbstraction, MetadataContext, View, bytes2Char, MetadataInterface } from '@taquito/tzip16'\nimport { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from './tzip12-errors';\n\nconst tokenMetadataBigMapType = {\n prim: 'big_map',\n args: [\n { prim: 'nat' }, \n { prim: 'pair', args: [\n { prim: 'nat' , annots: ['%token_id']}, \n { prim: \"map\", args: [{ prim: 'string' }, { prim: 'bytes' }], annots: ['%token_info'] }] }],\n annots: ['%token_metadata']\n};\n\ntype BigMapId = { int: string };\n\nexport interface TokenMetadata {\n token_id: number,\n decimals: number\n name?: string,\n symbol?: string,\n}\n\nexport class Tzip12ContractAbstraction {\n private _tzip16ContractAbstraction: Tzip16ContractAbstraction;\n\n constructor(\n private contractAbstraction: ContractAbstraction<ContractProvider | Wallet>,\n private context: MetadataContext\n ) {\n this._tzip16ContractAbstraction = new Tzip16ContractAbstraction(this.contractAbstraction, this.context)\n }\n\n /**\n * @description Fetches the contract metadata (according to the Tzip-016 standard)\n * @returns An object containing the metadata, the uri, an optional integrity check result and an optional sha256 hash \n * or `Undefined` if the contract has no metadata (non-compliant with Tzip-016)\n */\n private async getContractMetadata() {\n try {\n const contractMetadata = await this._tzip16ContractAbstraction.getMetadata();\n return contractMetadata.metadata;\n } catch (err) {\n // The contract is not compliant with Tzip-016. There is no contract metadata.\n }\n }\n\n /**\n * @description The Tzip-016 \"interfaces\" field MUST be present in the contract metadata. It should contain \"TZIP-012[version-info]\"\n * @returns True if \"interfaces\" field is present and contains \"TZIP-012\", false otherwise\n */\n async isTzip12Compliant() {\n let isCompliant = false;\n const metadata = await this.getContractMetadata();\n if (metadata) {\n const tzip12Interface = metadata.interfaces?.filter((x) => {\n return x.substring(0, 8) === \"TZIP-012\";\n });\n isCompliant = (tzip12Interface && tzip12Interface.length !== 0) ? true : false;\n }\n return isCompliant;\n }\n\n /**\n * @description Fetches the token metadata for a specified token ID.\n * The function first tries to find a `token_metadata` view in the contract metadata and to execute it with the token ID.\n * If there is no view, the function tries to find a `token_metadata` bigmap in the top-level pairs of the storage.\n * @param tokenId The ID of the token for which we want to retrieve token metadata\n * @returns An object of type `TokenMetadata`\n */\n async getTokenMetadata(tokenId: number) {\n const tokenMetadata = await this.retrieveTokenMetadataFromView(tokenId);\n return (!tokenMetadata) ? this.retrieveTokenMetadataFromBigMap(tokenId) : tokenMetadata;\n }\n\n private async retrieveTokenMetadataFromView(tokenId: number) {\n if (await this.getContractMetadata()) {\n const views = await this._tzip16ContractAbstraction.metadataViews();\n if (views && this.hasTokenMetadataView(views)) {\n return this.executeTokenMetadataView(views['token_metadata'](), tokenId);\n }\n }\n }\n\n private hasTokenMetadataView(views: {}) {\n for (let view of Object.keys(views)) {\n if (view === 'token_metadata') {\n return true;\n }\n }\n return false;\n }\n\n private async executeTokenMetadataView(tokenMetadataView: View, tokenId: number): Promise<TokenMetadata> {\n let tokenMetadata;\n try {\n tokenMetadata = await tokenMetadataView.executeView(tokenId);\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n const tokenMap = Object.values(tokenMetadata)[1];\n if (!MichelsonMap.isMichelsonMap(tokenMap)) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(tokenMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, (tokenMap as MichelsonMap<string, string>), metadataFromUri);\n }\n\n private async fetchTokenMetadataFromUri(tokenMetadata: MichelsonMap<string, string>) {\n const uri = tokenMetadata.get(\"\");\n if (uri) {\n try {\n const metadataFromUri = await this.context.metadataProvider.provideMetadata(\n this.contractAbstraction,\n bytes2Char(uri),\n this.context\n );\n return metadataFromUri.metadata;\n } catch (e) {\n if (e.name === 'InvalidUri') {\n console.warn(`The URI ${bytes2Char(uri)} is present in the token metadata, but is invalid.`);\n } else {\n throw e;\n }\n }\n }\n }\n\n private formatMetadataToken(tokenId: number, metadataTokenMap: MichelsonMap<string, string>, metadataFromUri?: any): TokenMetadata {\n const tokenMetadataDecoded = {\n 'token_id': tokenId\n };\n for (let keyTokenMetadata of metadataTokenMap.keys()) {\n if (keyTokenMetadata === 'decimals') {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: Number(bytes2Char(metadataTokenMap.get(keyTokenMetadata)!)) });\n }\n else if (!(keyTokenMetadata === '')) {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: bytes2Char(metadataTokenMap.get(keyTokenMetadata)!) });\n }\n }\n // if an URI is present, add the fetched properties to the object\n // if a property is in the URI and the map, prevalence is accorded to value from the URI\n if (metadataFromUri) {\n for(let property in metadataFromUri) {\n Object.assign(tokenMetadataDecoded, {[property]: metadataFromUri[property]})\n }\n }\n if(!('decimals' in tokenMetadataDecoded)) {\n throw new InvalidTokenMetadata();\n } \n return tokenMetadataDecoded;\n }\n\n private async retrieveTokenMetadataFromBigMap(tokenId: number) {\n const bigmapTokenMetadataId = this.findTokenMetadataBigMap();\n let pairNatMap;\n try {\n pairNatMap = await this.context.contract.getBigMapKeyByID<any>(\n bigmapTokenMetadataId['int'].toString(),\n tokenId.toString(),\n new Schema(tokenMetadataBigMapType)\n );\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n\n const michelsonMap = pairNatMap['token_info'];\n if (!MichelsonMap.isMichelsonMap(michelsonMap)) {\n throw new TokenIdNotFound(tokenId);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(michelsonMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, michelsonMap as MichelsonMap<string, string>, metadataFromUri)\n }\n\n private findTokenMetadataBigMap(): BigMapId {\n const tokenMetadataBigMapId = this.contractAbstraction.schema.FindFirstInTopLevelPair<BigMapId>(\n this.contractAbstraction.script.storage,\n tokenMetadataBigMapType\n );\n if (!tokenMetadataBigMapId) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n return tokenMetadataBigMapId;\n }\n\n\n}\n","import { Context, ContractAbstraction, ContractProvider, Wallet } from \"@taquito/taquito\";\nimport { Tzip12ContractAbstraction } from './tzip12-contract-abstraction'\nimport { MetadataContext } from \"@taquito/tzip16\"\n\nconst ABSTRACTION_KEY = Symbol(\"Tzip12ContractAbstractionObjectKey\");\n\nexport function tzip12<T extends ContractAbstraction<ContractProvider | Wallet>>(abs: T, context: Context) {\n return Object.assign(abs, {\n // namespace tzip12\n tzip12 (this: ContractAbstraction<ContractProvider | Wallet> & { [ABSTRACTION_KEY]?: Tzip12ContractAbstraction}) {\n if (!this[ABSTRACTION_KEY]) {\n this[ABSTRACTION_KEY] = new Tzip12ContractAbstraction(this, context as MetadataContext);\n }\n \n return this[ABSTRACTION_KEY]!\n }\n })\n}","import { Context, Extension } from \"@taquito/taquito\";\nimport { DEFAULT_HANDLERS, MetadataProviderInterface, MetadataProvider } from '@taquito/tzip16'\n\n// The same default metadataProvider is used for tzip16 and tzip12\nexport class Tzip12Module implements Extension {\n private _metadataProvider: MetadataProviderInterface;\n\n constructor(metadataProvider?: MetadataProviderInterface) {\n this._metadataProvider = metadataProvider ? metadataProvider : new MetadataProvider(DEFAULT_HANDLERS);\n }\n\n configureContext(context: Context) {\n Object.assign(context, { metadataProvider: this._metadataProvider });\n }\n}","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"commitHash\": \"eb5b2c4973cd11098b68ce62eb6702dea376e569\",\n \"version\": \"10.1.1\"\n};\n/* tslint:enable */\n"],"names":["Tzip16ContractAbstraction","MichelsonMap","bytes2Char","Schema","MetadataProvider","DEFAULT_HANDLERS"],"mappings":"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"}
1
+ {"version":3,"file":"taquito-tzip12.umd.js","sources":["../src/tzip12-errors.ts","../src/tzip12-contract-abstraction.ts","../src/composer.ts","../src/tzip12-extension.ts","../src/version.ts"],"sourcesContent":["export class TokenMetadataNotFound implements Error {\n name: string = 'TokenMetadataNotFound';\n message: string;\n\n constructor(public address: string) {\n this.message = `No token metadata was found for the contract: ${address}`;\n }\n}\n\nexport class TokenIdNotFound implements Error {\n name: string = 'TokenIdNotFound';\n message: string;\n\n constructor(public tokenId: number) {\n this.message = `Could not find token metadata for the token ID: ${tokenId}`;\n }\n}\n\nexport class InvalidTokenMetadata implements Error {\n name = 'InvalidTokenMetadata';\n message = 'Non-compliance with the TZIP-012 standard. The required property `decimals` is missing.';\n}","import { MichelsonMap, Schema } from '@taquito/michelson-encoder';\nimport { ContractAbstraction, ContractProvider, Wallet } from '@taquito/taquito';\nimport { Tzip16ContractAbstraction, MetadataContext, View, bytes2Char, MetadataInterface } from '@taquito/tzip16'\nimport { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from './tzip12-errors';\n\nconst tokenMetadataBigMapType = {\n prim: 'big_map',\n args: [\n { prim: 'nat' }, \n { prim: 'pair', args: [\n { prim: 'nat' , annots: ['%token_id']}, \n { prim: \"map\", args: [{ prim: 'string' }, { prim: 'bytes' }], annots: ['%token_info'] }] }],\n annots: ['%token_metadata']\n};\n\ntype BigMapId = { int: string };\n\nexport interface TokenMetadata {\n token_id: number,\n decimals: number\n name?: string,\n symbol?: string,\n}\n\nexport class Tzip12ContractAbstraction {\n private _tzip16ContractAbstraction: Tzip16ContractAbstraction;\n\n constructor(\n private contractAbstraction: ContractAbstraction<ContractProvider | Wallet>,\n private context: MetadataContext\n ) {\n this._tzip16ContractAbstraction = new Tzip16ContractAbstraction(this.contractAbstraction, this.context)\n }\n\n /**\n * @description Fetches the contract metadata (according to the Tzip-016 standard)\n * @returns An object containing the metadata, the uri, an optional integrity check result and an optional sha256 hash \n * or `Undefined` if the contract has no metadata (non-compliant with Tzip-016)\n */\n private async getContractMetadata() {\n try {\n const contractMetadata = await this._tzip16ContractAbstraction.getMetadata();\n return contractMetadata.metadata;\n } catch (err) {\n // The contract is not compliant with Tzip-016. There is no contract metadata.\n }\n }\n\n /**\n * @description The Tzip-016 \"interfaces\" field MUST be present in the contract metadata. It should contain \"TZIP-012[version-info]\"\n * @returns True if \"interfaces\" field is present and contains \"TZIP-012\", false otherwise\n */\n async isTzip12Compliant() {\n let isCompliant = false;\n const metadata = await this.getContractMetadata();\n if (metadata) {\n const tzip12Interface = metadata.interfaces?.filter((x) => {\n return x.substring(0, 8) === \"TZIP-012\";\n });\n isCompliant = (tzip12Interface && tzip12Interface.length !== 0) ? true : false;\n }\n return isCompliant;\n }\n\n /**\n * @description Fetches the token metadata for a specified token ID.\n * The function first tries to find a `token_metadata` view in the contract metadata and to execute it with the token ID.\n * If there is no view, the function tries to find a `token_metadata` bigmap in the top-level pairs of the storage.\n * @param tokenId The ID of the token for which we want to retrieve token metadata\n * @returns An object of type `TokenMetadata`\n */\n async getTokenMetadata(tokenId: number) {\n const tokenMetadata = await this.retrieveTokenMetadataFromView(tokenId);\n return (!tokenMetadata) ? this.retrieveTokenMetadataFromBigMap(tokenId) : tokenMetadata;\n }\n\n private async retrieveTokenMetadataFromView(tokenId: number) {\n if (await this.getContractMetadata()) {\n const views = await this._tzip16ContractAbstraction.metadataViews();\n if (views && this.hasTokenMetadataView(views)) {\n return this.executeTokenMetadataView(views['token_metadata'](), tokenId);\n }\n }\n }\n\n private hasTokenMetadataView(views: {}) {\n for (let view of Object.keys(views)) {\n if (view === 'token_metadata') {\n return true;\n }\n }\n return false;\n }\n\n private async executeTokenMetadataView(tokenMetadataView: View, tokenId: number): Promise<TokenMetadata> {\n let tokenMetadata;\n try {\n tokenMetadata = await tokenMetadataView.executeView(tokenId);\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n const tokenMap = Object.values(tokenMetadata)[1];\n if (!MichelsonMap.isMichelsonMap(tokenMap)) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(tokenMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, (tokenMap as MichelsonMap<string, string>), metadataFromUri);\n }\n\n private async fetchTokenMetadataFromUri(tokenMetadata: MichelsonMap<string, string>) {\n const uri = tokenMetadata.get(\"\");\n if (uri) {\n try {\n const metadataFromUri = await this.context.metadataProvider.provideMetadata(\n this.contractAbstraction,\n bytes2Char(uri),\n this.context\n );\n return metadataFromUri.metadata;\n } catch (e) {\n if (e.name === 'InvalidUri') {\n console.warn(`The URI ${bytes2Char(uri)} is present in the token metadata, but is invalid.`);\n } else {\n throw e;\n }\n }\n }\n }\n\n private formatMetadataToken(tokenId: number, metadataTokenMap: MichelsonMap<string, string>, metadataFromUri?: any): TokenMetadata {\n const tokenMetadataDecoded = {\n 'token_id': tokenId\n };\n for (let keyTokenMetadata of metadataTokenMap.keys()) {\n if (keyTokenMetadata === 'decimals') {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: Number(bytes2Char(metadataTokenMap.get(keyTokenMetadata)!)) });\n }\n else if (!(keyTokenMetadata === '')) {\n Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: bytes2Char(metadataTokenMap.get(keyTokenMetadata)!) });\n }\n }\n // if an URI is present, add the fetched properties to the object\n // if a property is in the URI and the map, prevalence is accorded to value from the URI\n if (metadataFromUri) {\n for(let property in metadataFromUri) {\n Object.assign(tokenMetadataDecoded, {[property]: metadataFromUri[property]})\n }\n }\n if(!('decimals' in tokenMetadataDecoded)) {\n throw new InvalidTokenMetadata();\n } \n return tokenMetadataDecoded;\n }\n\n private async retrieveTokenMetadataFromBigMap(tokenId: number) {\n const bigmapTokenMetadataId = this.findTokenMetadataBigMap();\n let pairNatMap;\n try {\n pairNatMap = await this.context.contract.getBigMapKeyByID<any>(\n bigmapTokenMetadataId['int'].toString(),\n tokenId.toString(),\n new Schema(tokenMetadataBigMapType)\n );\n } catch (err) {\n throw new TokenIdNotFound(tokenId);\n }\n\n const michelsonMap = pairNatMap['token_info'];\n if (!MichelsonMap.isMichelsonMap(michelsonMap)) {\n throw new TokenIdNotFound(tokenId);\n }\n const metadataFromUri = await this.fetchTokenMetadataFromUri(michelsonMap as MichelsonMap<string, string>);\n return this.formatMetadataToken(tokenId, michelsonMap as MichelsonMap<string, string>, metadataFromUri)\n }\n\n private findTokenMetadataBigMap(): BigMapId {\n const tokenMetadataBigMapId = this.contractAbstraction.schema.FindFirstInTopLevelPair<BigMapId>(\n this.contractAbstraction.script.storage,\n tokenMetadataBigMapType\n );\n if (!tokenMetadataBigMapId) {\n throw new TokenMetadataNotFound(this.contractAbstraction.address);\n }\n return tokenMetadataBigMapId;\n }\n\n\n}\n","import { Context, ContractAbstraction, ContractProvider, Wallet } from \"@taquito/taquito\";\nimport { Tzip12ContractAbstraction } from './tzip12-contract-abstraction'\nimport { MetadataContext } from \"@taquito/tzip16\"\n\nconst ABSTRACTION_KEY = Symbol(\"Tzip12ContractAbstractionObjectKey\");\n\nexport function tzip12<T extends ContractAbstraction<ContractProvider | Wallet>>(abs: T, context: Context) {\n return Object.assign(abs, {\n // namespace tzip12\n tzip12 (this: ContractAbstraction<ContractProvider | Wallet> & { [ABSTRACTION_KEY]?: Tzip12ContractAbstraction}) {\n if (!this[ABSTRACTION_KEY]) {\n this[ABSTRACTION_KEY] = new Tzip12ContractAbstraction(this, context as MetadataContext);\n }\n \n return this[ABSTRACTION_KEY]!\n }\n })\n}","import { Context, Extension } from \"@taquito/taquito\";\nimport { DEFAULT_HANDLERS, MetadataProviderInterface, MetadataProvider } from '@taquito/tzip16'\n\n// The same default metadataProvider is used for tzip16 and tzip12\nexport class Tzip12Module implements Extension {\n private _metadataProvider: MetadataProviderInterface;\n\n constructor(metadataProvider?: MetadataProviderInterface) {\n this._metadataProvider = metadataProvider ? metadataProvider : new MetadataProvider(DEFAULT_HANDLERS);\n }\n\n configureContext(context: Context) {\n Object.assign(context, { metadataProvider: this._metadataProvider });\n }\n}","\n// IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!\n/* tslint:disable */\nexport const VERSION = {\n \"commitHash\": \"5711569ffaf481d88ba3251343a1788090b35dd4\",\n \"version\": \"10.2.1\"\n};\n/* tslint:enable */\n"],"names":["Tzip16ContractAbstraction","MichelsonMap","bytes2Char","Schema","MetadataProvider","DEFAULT_HANDLERS"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@taquito/tzip12",
3
- "version": "10.1.2",
3
+ "version": "10.2.1",
4
4
  "description": "Tzip12",
5
5
  "keywords": [
6
6
  "tezos",
@@ -10,6 +10,10 @@
10
10
  "main": "dist/taquito-tzip12.umd.js",
11
11
  "module": "dist/taquito-tzip12.es5.js",
12
12
  "typings": "dist/types/taquito-tzip12.d.ts",
13
+ "files": [
14
+ "dist",
15
+ "signature.json"
16
+ ],
13
17
  "publishConfig": {
14
18
  "access": "public"
15
19
  },
@@ -59,9 +63,9 @@
59
63
  ]
60
64
  },
61
65
  "dependencies": {
62
- "@taquito/michelson-encoder": "^10.1.2",
63
- "@taquito/taquito": "^10.1.2",
64
- "@taquito/tzip16": "^10.1.2",
66
+ "@taquito/michelson-encoder": "^10.2.1",
67
+ "@taquito/taquito": "^10.2.1",
68
+ "@taquito/tzip16": "^10.2.1",
65
69
  "bignumber.js": "^9.0.1"
66
70
  },
67
71
  "devDependencies": {
@@ -94,5 +98,5 @@
94
98
  "typedoc": "^0.20.36",
95
99
  "typescript": "^4.1.5"
96
100
  },
97
- "gitHead": "d78608e9da010b98c288cd73c8d5b1beb322492f"
101
+ "gitHead": "c3d65aa8a91c161ca2560e10d48f85b6b63255b0"
98
102
  }
package/.eslintrc.json DELETED
@@ -1,19 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true,
5
- "jest": true,
6
- "node": true
7
- },
8
- "extends": [
9
- "eslint:recommended",
10
- "../../.eslintrc.json"
11
- ],
12
- "parser": "@typescript-eslint/parser",
13
- "parserOptions": {
14
- "ecmaVersion": 12,
15
- "sourceType": "module"
16
- },
17
- "rules": {
18
- }
19
- }
package/rollup.config.ts DELETED
@@ -1,30 +0,0 @@
1
- import sourceMaps from 'rollup-plugin-sourcemaps';
2
- import camelCase from 'lodash.camelcase';
3
- import typescript from 'rollup-plugin-typescript2';
4
- import json from 'rollup-plugin-json';
5
-
6
- const pkg = require('./package.json');
7
-
8
- const libraryName = 'taquito-tzip12';
9
-
10
- export default {
11
- input: `src/${libraryName}.ts`,
12
- output: [
13
- { file: pkg.main, name: camelCase(libraryName), format: 'umd', sourcemap: true },
14
- { file: pkg.module, format: 'es', sourcemap: true },
15
- ],
16
- // Indicate here external modules you don't wanna include in your bundle (i.e.: 'lodash')
17
- external: [],
18
- watch: {
19
- include: 'src/**',
20
- },
21
- plugins: [
22
- // Allow json resolution
23
- json(),
24
- // Compile TypeScript files
25
- typescript({ tsconfig: './tsconfig.prod.json', useTsconfigDeclarationDir: true }),
26
-
27
- // Resolve source maps to the original source
28
- sourceMaps(),
29
- ],
30
- };
package/src/composer.ts DELETED
@@ -1,18 +0,0 @@
1
- import { Context, ContractAbstraction, ContractProvider, Wallet } from "@taquito/taquito";
2
- import { Tzip12ContractAbstraction } from './tzip12-contract-abstraction'
3
- import { MetadataContext } from "@taquito/tzip16"
4
-
5
- const ABSTRACTION_KEY = Symbol("Tzip12ContractAbstractionObjectKey");
6
-
7
- export function tzip12<T extends ContractAbstraction<ContractProvider | Wallet>>(abs: T, context: Context) {
8
- return Object.assign(abs, {
9
- // namespace tzip12
10
- tzip12 (this: ContractAbstraction<ContractProvider | Wallet> & { [ABSTRACTION_KEY]?: Tzip12ContractAbstraction}) {
11
- if (!this[ABSTRACTION_KEY]) {
12
- this[ABSTRACTION_KEY] = new Tzip12ContractAbstraction(this, context as MetadataContext);
13
- }
14
-
15
- return this[ABSTRACTION_KEY]!
16
- }
17
- })
18
- }
@@ -1,9 +0,0 @@
1
- /**
2
- * @packageDocumentation
3
- * @module @taquito/tzip12
4
- */
5
- export * from './tzip12-contract-abstraction';
6
- export * from './composer';
7
- export * from './tzip12-errors';
8
- export * from './tzip12-extension';
9
- export { VERSION } from './version';
@@ -1,188 +0,0 @@
1
- import { MichelsonMap, Schema } from '@taquito/michelson-encoder';
2
- import { ContractAbstraction, ContractProvider, Wallet } from '@taquito/taquito';
3
- import { Tzip16ContractAbstraction, MetadataContext, View, bytes2Char, MetadataInterface } from '@taquito/tzip16'
4
- import { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from './tzip12-errors';
5
-
6
- const tokenMetadataBigMapType = {
7
- prim: 'big_map',
8
- args: [
9
- { prim: 'nat' },
10
- { prim: 'pair', args: [
11
- { prim: 'nat' , annots: ['%token_id']},
12
- { prim: "map", args: [{ prim: 'string' }, { prim: 'bytes' }], annots: ['%token_info'] }] }],
13
- annots: ['%token_metadata']
14
- };
15
-
16
- type BigMapId = { int: string };
17
-
18
- export interface TokenMetadata {
19
- token_id: number,
20
- decimals: number
21
- name?: string,
22
- symbol?: string,
23
- }
24
-
25
- export class Tzip12ContractAbstraction {
26
- private _tzip16ContractAbstraction: Tzip16ContractAbstraction;
27
-
28
- constructor(
29
- private contractAbstraction: ContractAbstraction<ContractProvider | Wallet>,
30
- private context: MetadataContext
31
- ) {
32
- this._tzip16ContractAbstraction = new Tzip16ContractAbstraction(this.contractAbstraction, this.context)
33
- }
34
-
35
- /**
36
- * @description Fetches the contract metadata (according to the Tzip-016 standard)
37
- * @returns An object containing the metadata, the uri, an optional integrity check result and an optional sha256 hash
38
- * or `Undefined` if the contract has no metadata (non-compliant with Tzip-016)
39
- */
40
- private async getContractMetadata() {
41
- try {
42
- const contractMetadata = await this._tzip16ContractAbstraction.getMetadata();
43
- return contractMetadata.metadata;
44
- } catch (err) {
45
- // The contract is not compliant with Tzip-016. There is no contract metadata.
46
- }
47
- }
48
-
49
- /**
50
- * @description The Tzip-016 "interfaces" field MUST be present in the contract metadata. It should contain "TZIP-012[version-info]"
51
- * @returns True if "interfaces" field is present and contains "TZIP-012", false otherwise
52
- */
53
- async isTzip12Compliant() {
54
- let isCompliant = false;
55
- const metadata = await this.getContractMetadata();
56
- if (metadata) {
57
- const tzip12Interface = metadata.interfaces?.filter((x) => {
58
- return x.substring(0, 8) === "TZIP-012";
59
- });
60
- isCompliant = (tzip12Interface && tzip12Interface.length !== 0) ? true : false;
61
- }
62
- return isCompliant;
63
- }
64
-
65
- /**
66
- * @description Fetches the token metadata for a specified token ID.
67
- * The function first tries to find a `token_metadata` view in the contract metadata and to execute it with the token ID.
68
- * If there is no view, the function tries to find a `token_metadata` bigmap in the top-level pairs of the storage.
69
- * @param tokenId The ID of the token for which we want to retrieve token metadata
70
- * @returns An object of type `TokenMetadata`
71
- */
72
- async getTokenMetadata(tokenId: number) {
73
- const tokenMetadata = await this.retrieveTokenMetadataFromView(tokenId);
74
- return (!tokenMetadata) ? this.retrieveTokenMetadataFromBigMap(tokenId) : tokenMetadata;
75
- }
76
-
77
- private async retrieveTokenMetadataFromView(tokenId: number) {
78
- if (await this.getContractMetadata()) {
79
- const views = await this._tzip16ContractAbstraction.metadataViews();
80
- if (views && this.hasTokenMetadataView(views)) {
81
- return this.executeTokenMetadataView(views['token_metadata'](), tokenId);
82
- }
83
- }
84
- }
85
-
86
- private hasTokenMetadataView(views: {}) {
87
- for (let view of Object.keys(views)) {
88
- if (view === 'token_metadata') {
89
- return true;
90
- }
91
- }
92
- return false;
93
- }
94
-
95
- private async executeTokenMetadataView(tokenMetadataView: View, tokenId: number): Promise<TokenMetadata> {
96
- let tokenMetadata;
97
- try {
98
- tokenMetadata = await tokenMetadataView.executeView(tokenId);
99
- } catch (err) {
100
- throw new TokenIdNotFound(tokenId);
101
- }
102
- const tokenMap = Object.values(tokenMetadata)[1];
103
- if (!MichelsonMap.isMichelsonMap(tokenMap)) {
104
- throw new TokenMetadataNotFound(this.contractAbstraction.address);
105
- }
106
- const metadataFromUri = await this.fetchTokenMetadataFromUri(tokenMap as MichelsonMap<string, string>);
107
- return this.formatMetadataToken(tokenId, (tokenMap as MichelsonMap<string, string>), metadataFromUri);
108
- }
109
-
110
- private async fetchTokenMetadataFromUri(tokenMetadata: MichelsonMap<string, string>) {
111
- const uri = tokenMetadata.get("");
112
- if (uri) {
113
- try {
114
- const metadataFromUri = await this.context.metadataProvider.provideMetadata(
115
- this.contractAbstraction,
116
- bytes2Char(uri),
117
- this.context
118
- );
119
- return metadataFromUri.metadata;
120
- } catch (e) {
121
- if (e.name === 'InvalidUri') {
122
- console.warn(`The URI ${bytes2Char(uri)} is present in the token metadata, but is invalid.`);
123
- } else {
124
- throw e;
125
- }
126
- }
127
- }
128
- }
129
-
130
- private formatMetadataToken(tokenId: number, metadataTokenMap: MichelsonMap<string, string>, metadataFromUri?: any): TokenMetadata {
131
- const tokenMetadataDecoded = {
132
- 'token_id': tokenId
133
- };
134
- for (let keyTokenMetadata of metadataTokenMap.keys()) {
135
- if (keyTokenMetadata === 'decimals') {
136
- Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: Number(bytes2Char(metadataTokenMap.get(keyTokenMetadata)!)) });
137
- }
138
- else if (!(keyTokenMetadata === '')) {
139
- Object.assign(tokenMetadataDecoded, { [keyTokenMetadata]: bytes2Char(metadataTokenMap.get(keyTokenMetadata)!) });
140
- }
141
- }
142
- // if an URI is present, add the fetched properties to the object
143
- // if a property is in the URI and the map, prevalence is accorded to value from the URI
144
- if (metadataFromUri) {
145
- for(let property in metadataFromUri) {
146
- Object.assign(tokenMetadataDecoded, {[property]: metadataFromUri[property]})
147
- }
148
- }
149
- if(!('decimals' in tokenMetadataDecoded)) {
150
- throw new InvalidTokenMetadata();
151
- }
152
- return tokenMetadataDecoded;
153
- }
154
-
155
- private async retrieveTokenMetadataFromBigMap(tokenId: number) {
156
- const bigmapTokenMetadataId = this.findTokenMetadataBigMap();
157
- let pairNatMap;
158
- try {
159
- pairNatMap = await this.context.contract.getBigMapKeyByID<any>(
160
- bigmapTokenMetadataId['int'].toString(),
161
- tokenId.toString(),
162
- new Schema(tokenMetadataBigMapType)
163
- );
164
- } catch (err) {
165
- throw new TokenIdNotFound(tokenId);
166
- }
167
-
168
- const michelsonMap = pairNatMap['token_info'];
169
- if (!MichelsonMap.isMichelsonMap(michelsonMap)) {
170
- throw new TokenIdNotFound(tokenId);
171
- }
172
- const metadataFromUri = await this.fetchTokenMetadataFromUri(michelsonMap as MichelsonMap<string, string>);
173
- return this.formatMetadataToken(tokenId, michelsonMap as MichelsonMap<string, string>, metadataFromUri)
174
- }
175
-
176
- private findTokenMetadataBigMap(): BigMapId {
177
- const tokenMetadataBigMapId = this.contractAbstraction.schema.FindFirstInTopLevelPair<BigMapId>(
178
- this.contractAbstraction.script.storage,
179
- tokenMetadataBigMapType
180
- );
181
- if (!tokenMetadataBigMapId) {
182
- throw new TokenMetadataNotFound(this.contractAbstraction.address);
183
- }
184
- return tokenMetadataBigMapId;
185
- }
186
-
187
-
188
- }
@@ -1,22 +0,0 @@
1
- export class TokenMetadataNotFound implements Error {
2
- name: string = 'TokenMetadataNotFound';
3
- message: string;
4
-
5
- constructor(public address: string) {
6
- this.message = `No token metadata was found for the contract: ${address}`;
7
- }
8
- }
9
-
10
- export class TokenIdNotFound implements Error {
11
- name: string = 'TokenIdNotFound';
12
- message: string;
13
-
14
- constructor(public tokenId: number) {
15
- this.message = `Could not find token metadata for the token ID: ${tokenId}`;
16
- }
17
- }
18
-
19
- export class InvalidTokenMetadata implements Error {
20
- name = 'InvalidTokenMetadata';
21
- message = 'Non-compliance with the TZIP-012 standard. The required property `decimals` is missing.';
22
- }
@@ -1,15 +0,0 @@
1
- import { Context, Extension } from "@taquito/taquito";
2
- import { DEFAULT_HANDLERS, MetadataProviderInterface, MetadataProvider } from '@taquito/tzip16'
3
-
4
- // The same default metadataProvider is used for tzip16 and tzip12
5
- export class Tzip12Module implements Extension {
6
- private _metadataProvider: MetadataProviderInterface;
7
-
8
- constructor(metadataProvider?: MetadataProviderInterface) {
9
- this._metadataProvider = metadataProvider ? metadataProvider : new MetadataProvider(DEFAULT_HANDLERS);
10
- }
11
-
12
- configureContext(context: Context) {
13
- Object.assign(context, { metadataProvider: this._metadataProvider });
14
- }
15
- }
package/src/version.ts DELETED
@@ -1,8 +0,0 @@
1
-
2
- // IMPORTANT: THIS FILE IS AUTO GENERATED! DO NOT MANUALLY EDIT OR CHECKIN!
3
- /* tslint:disable */
4
- export const VERSION = {
5
- "commitHash": "eb5b2c4973cd11098b68ce62eb6702dea376e569",
6
- "version": "10.1.1"
7
- };
8
- /* tslint:enable */
@@ -1,444 +0,0 @@
1
- import { MichelsonMap } from '@taquito/taquito';
2
- import { char2Bytes, InvalidUri } from '@taquito/tzip16';
3
- import { Tzip12ContractAbstraction } from '../src/tzip12-contract-abstraction';
4
- import { InvalidTokenMetadata, TokenIdNotFound, TokenMetadataNotFound } from '../src/tzip12-errors';
5
-
6
- describe('Tzip12 contract abstraction test', () => {
7
-
8
- let mockContractAbstraction: any = {};
9
- let mockContext: any = {};
10
- let mockTzip16ContractAbstraction: any = {};
11
- let tzip12Abs: Tzip12ContractAbstraction;
12
- let mockMichelsonStorageView: any;
13
- let mockMetadataProvider: {
14
- provideMetadata: jest.Mock<any, any>;
15
- };
16
- let mockSchema: {
17
- FindFirstInTopLevelPair: jest.Mock<any, any>;
18
- };
19
- let mockRpcContractProvider: {
20
- getBigMapKeyByID: jest.Mock<any, any>;
21
- };
22
-
23
- beforeEach(() => {
24
- mockMetadataProvider = {
25
- provideMetadata: jest.fn()
26
- };
27
- mockTzip16ContractAbstraction = {
28
- getMetadata: jest.fn(),
29
- metadataViews: jest.fn()
30
- };
31
- mockMichelsonStorageView = {
32
- executeView: jest.fn()
33
- };
34
- mockSchema = {
35
- FindFirstInTopLevelPair: jest.fn()
36
- };
37
- mockRpcContractProvider = {
38
- getBigMapKeyByID: jest.fn()
39
- };
40
- mockContractAbstraction.address = 'test';
41
- mockContractAbstraction['schema'] = mockSchema;
42
- mockContractAbstraction['script'] = {
43
- script: {
44
- code: [],
45
- storage: {
46
- prim: 'Pair',
47
- args: [
48
- {
49
- int: '20350'
50
- },
51
- []
52
- ]
53
- }
54
- }
55
- };
56
- tzip12Abs = new Tzip12ContractAbstraction(mockContractAbstraction, mockContext);
57
- tzip12Abs['_tzip16ContractAbstraction'] = mockTzip16ContractAbstraction;
58
- mockContext['metadataProvider'] = mockMetadataProvider;
59
- mockContext['contract'] = mockRpcContractProvider;
60
- });
61
-
62
- it('Test 1 for getContractMetadata(): Should return the `Tzip-016` contract metadata', async (done) => {
63
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
64
- uri: 'https://test',
65
- metadata: { name: 'Taquito test' }
66
- });
67
-
68
- expect(await tzip12Abs['getContractMetadata']()).toEqual(
69
- { name: 'Taquito test' }
70
- );
71
- done();
72
- });
73
-
74
- it('Test 2 for getContractMetadata(): Should return undefined when the contract has no `Tzip-016` metadata', async (done) => {
75
- mockTzip16ContractAbstraction.getMetadata.mockImplementation(() => {
76
- throw new Error();
77
- });
78
-
79
- expect(await tzip12Abs['getContractMetadata']()).toBeUndefined();
80
- done();
81
- });
82
-
83
- it('Test 1 for isTzip12Compliant(): Should return true', async (done) => {
84
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
85
- uri: 'https://test',
86
- metadata: {
87
- name: 'Taquito test',
88
- interfaces: ["TZIP-012[-<version-info>]"]
89
- }
90
- });
91
-
92
- expect(await tzip12Abs.isTzip12Compliant()).toEqual(true);
93
- done();
94
- });
95
-
96
- it('Test 2 for isTzip12Compliant(): Should return true', async (done) => {
97
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
98
- uri: 'https://test',
99
- metadata: {
100
- name: 'Taquito test',
101
- interfaces: ["TZIP-test", "TZIP-012[-<version-info>]", "TZIP-test2"]
102
- }
103
- });
104
-
105
- expect(await tzip12Abs.isTzip12Compliant()).toEqual(true);
106
- done();
107
- });
108
-
109
- it('Test 3 for isTzip12Compliant(): Should return false when no interfaces property', async (done) => {
110
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
111
- uri: 'https://test',
112
- metadata: {
113
- name: 'Taquito test'
114
- }
115
- });
116
-
117
- expect(await tzip12Abs.isTzip12Compliant()).toEqual(false);
118
- done();
119
- });
120
-
121
- it('Test 4 for isTzip12Compliant(): Should return false when no TZIP-012 in interfaces property', async (done) => {
122
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
123
- uri: 'https://test',
124
- metadata: {
125
- name: 'Taquito test',
126
- interfaces: ["TZIP-test"]
127
- }
128
- });
129
-
130
- expect(await tzip12Abs.isTzip12Compliant()).toEqual(false);
131
- done();
132
- });
133
-
134
- it('Test 1 for executeTokenMetadataView(): Should properly return the TokenMetadata', async (done) => {
135
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
136
- tokenMap.set('name', char2Bytes('Taquito'));
137
- tokenMap.set('symbol', char2Bytes('XTZ'));
138
- tokenMap.set('decimals', char2Bytes('3'));
139
-
140
- // takes as parameter the nat token-id and returns the (pair nat (map string bytes)) value
141
- mockMichelsonStorageView.executeView.mockResolvedValue({
142
- '0': '0',
143
- '1': tokenMap
144
- })
145
-
146
- const tokenMetadata = await tzip12Abs['executeTokenMetadataView'](mockMichelsonStorageView, 0);
147
- expect(tokenMetadata).toEqual({
148
- token_id: 0,
149
- name: 'Taquito',
150
- symbol: 'XTZ',
151
- decimals: 3
152
- });
153
- done();
154
- });
155
-
156
- it('Test 2 for executeTokenMetadataView(): Should throw TokenIdNotFound', async (done) => {
157
-
158
- mockMichelsonStorageView.executeView.mockImplementation(() => {
159
- throw new Error();
160
- });
161
-
162
- expect(tzip12Abs['executeTokenMetadataView'](mockMichelsonStorageView, 0)).rejects.toEqual(new TokenIdNotFound(0));
163
- done();
164
- });
165
-
166
- it('Test 3 for executeTokenMetadataView(): should throw TokenMetadataNotFound if the type of the view result is wrong (no map)', async (done) => {
167
-
168
- mockMichelsonStorageView.executeView.mockResolvedValue({
169
- '0': '0',
170
- '1': 'I am not a map'
171
- })
172
-
173
- expect(tzip12Abs['executeTokenMetadataView'](mockMichelsonStorageView, 0)).rejects.toEqual(new TokenMetadataNotFound(mockContractAbstraction.address));
174
- done();
175
- });
176
-
177
- it('Test 4 for executeTokenMetadataView(): should throw TokenMetadataNotFound if the type of the view result is wrong', async (done) => {
178
-
179
- mockMichelsonStorageView.executeView.mockResolvedValue('wrong type')
180
-
181
- expect(tzip12Abs['executeTokenMetadataView'](mockMichelsonStorageView, 0)).rejects.toEqual(new TokenMetadataNotFound(mockContractAbstraction.address));
182
- done();
183
- });
184
-
185
- it('Test 5 for executeTokenMetadataView(): Should properly return the TokenMetadata when the map contains a URI', async (done) => {
186
- mockMetadataProvider.provideMetadata.mockResolvedValue({
187
- uri: 'https://test',
188
- metadata: {
189
- name: 'Taquito test',
190
- decimals: 3,
191
- symbol: 'XTZ!',
192
- more: 'more data'
193
- }
194
- });
195
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
196
- tokenMap.set('', char2Bytes('https://storage.googleapis.com/tzip-16/token-metadata.json'));
197
-
198
- mockMichelsonStorageView.executeView.mockResolvedValue({
199
- 'token_id': '0',
200
- 'token_info': tokenMap
201
- })
202
-
203
- const tokenMetadata = await tzip12Abs['executeTokenMetadataView'](mockMichelsonStorageView, 0);
204
- expect(tokenMetadata).toEqual({
205
- token_id: 0,
206
- name: 'Taquito test',
207
- decimals: 3,
208
- symbol: 'XTZ!',
209
- more: 'more data'
210
- });
211
- done();
212
- });
213
-
214
- it('Test 1 for fetchTokenMetadataFromUri(): Should warn that the URI is invalid and return undefined', async (done) => {
215
- const tokenMap = new MichelsonMap();
216
- tokenMap.set('test', char2Bytes('test'));
217
- tokenMap.set('', char2Bytes('invalidURI'));
218
- tokenMap.set('testtest', char2Bytes('testtest'));
219
-
220
- mockMetadataProvider.provideMetadata.mockImplementation(() => {
221
- throw new InvalidUri(char2Bytes('invalidURI'));
222
- });
223
-
224
- const tokenMetadata = await tzip12Abs['fetchTokenMetadataFromUri'](tokenMap as MichelsonMap<string, string>);
225
- expect(tokenMetadata).toBeUndefined();
226
- done();
227
- });
228
-
229
- it('Test 2 for fetchTokenMetadataFromUri(): Should return undefined when no URI', async (done) => {
230
- const tokenMap = new MichelsonMap();
231
- tokenMap.set('test', char2Bytes('test'));
232
- tokenMap.set('testtest', char2Bytes('testtest'));
233
-
234
- const tokenMetadata = await tzip12Abs['fetchTokenMetadataFromUri'](tokenMap as MichelsonMap<string, string>);
235
- expect(tokenMetadata).toBeUndefined();
236
- done();
237
- });
238
-
239
- it('Test 1 for retrieveTokenMetadataFromView(): Should properly return token metadata from token_metadata view', async (done) => {
240
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
241
- uri: 'https://test',
242
- metadata: { name: 'Taquito test' }
243
- });
244
-
245
- mockTzip16ContractAbstraction.metadataViews.mockResolvedValue({ 'token_metadata': () => mockMichelsonStorageView });
246
-
247
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
248
- tokenMap.set('name', char2Bytes('Taquito'));
249
- tokenMap.set('symbol', char2Bytes('XTZ'));
250
- tokenMap.set('decimals', char2Bytes('3'));
251
-
252
- // takes as parameter the nat token-id and returns the (pair nat (map string bytes)) value
253
- mockMichelsonStorageView.executeView.mockResolvedValue({
254
- 'token_id': '0',
255
- 'token_info': tokenMap
256
- })
257
-
258
- const tokenMetadata = await tzip12Abs['retrieveTokenMetadataFromView'](0);
259
- expect(tokenMetadata).toEqual({
260
- token_id: 0,
261
- name: 'Taquito',
262
- symbol: 'XTZ',
263
- decimals: 3
264
- });
265
- done();
266
- });
267
-
268
- it('Test 2 for retrieveTokenMetadataFromView(): Should return undefined when there is no contract metadata', async (done) => {
269
- const tokenMetadata = await tzip12Abs['retrieveTokenMetadataFromView'](0);
270
- expect(tokenMetadata).toBeUndefined();
271
- done();
272
- });
273
-
274
- it('Test 3 for retrieveTokenMetadataFromView(): Should return undefined when there is no token_metadata view', async (done) => {
275
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
276
- uri: 'https://test',
277
- metadata: { name: 'Taquito test' }
278
- });
279
-
280
- mockTzip16ContractAbstraction.metadataViews.mockResolvedValue({});
281
-
282
- const tokenMetadata = await tzip12Abs['retrieveTokenMetadataFromView'](0);
283
- expect(tokenMetadata).toBeUndefined();
284
- done();
285
- });
286
-
287
- it('Test 1 for retrieveTokenMetadataFromBigMap(): Should succeed to return the token metadata', async (done) => {
288
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
289
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
290
- tokenMap.set('name', char2Bytes('Taquito'));
291
- tokenMap.set('symbol', char2Bytes('XTZ'));
292
- tokenMap.set('decimals', char2Bytes('3'));
293
- mockRpcContractProvider.getBigMapKeyByID.mockResolvedValue({
294
- 'token_id': '0',
295
- 'token_info': tokenMap
296
- });
297
-
298
- const tokenMetadata = await tzip12Abs['retrieveTokenMetadataFromBigMap'](0);
299
- expect(tokenMetadata).toEqual({
300
- token_id: 0,
301
- name: 'Taquito',
302
- symbol: 'XTZ',
303
- decimals: 3
304
- });
305
- done();
306
- });
307
-
308
- it('Test 2 for retrieveTokenMetadataFromBigMap(): Should throw TokenMetadataNotFound', async (done) => {
309
- mockSchema.FindFirstInTopLevelPair.mockReturnValue(undefined);
310
- try {
311
- await tzip12Abs['retrieveTokenMetadataFromBigMap'](0)
312
- } catch (err) {
313
- expect(err).toBeInstanceOf(TokenMetadataNotFound)
314
- }
315
- done();
316
- });
317
-
318
- it('Test 3 for retrieveTokenMetadataFromBigMap(): Should throw TokenIdNotFound', async (done) => {
319
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
320
- mockRpcContractProvider.getBigMapKeyByID.mockImplementation(() => {
321
- throw new Error();
322
- });
323
-
324
- expect(tzip12Abs['retrieveTokenMetadataFromBigMap'](0)).rejects.toEqual(new TokenIdNotFound(0));
325
-
326
- done();
327
- });
328
-
329
- it('Test 4 for retrieveTokenMetadataFromBigMap(): Should throw TokenIdNotFound', async (done) => {
330
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
331
- mockRpcContractProvider.getBigMapKeyByID.mockResolvedValue('I am not a pair');
332
-
333
- expect(tzip12Abs['retrieveTokenMetadataFromBigMap'](0)).rejects.toEqual(new TokenIdNotFound(0));
334
- done();
335
- });
336
-
337
- it('Test 1 for getTokenMetadata(): Should succeed to fetch the token metadata', async (done) => {
338
- mockTzip16ContractAbstraction.getMetadata.mockImplementation(() => {
339
- throw new Error();
340
- });
341
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
342
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
343
- tokenMap.set('name', char2Bytes('Taquito'));
344
- tokenMap.set('symbol', char2Bytes('XTZ'));
345
- tokenMap.set('decimals', char2Bytes('3'));
346
- mockRpcContractProvider.getBigMapKeyByID.mockResolvedValue({
347
- 'token_id': '0',
348
- 'token_info': tokenMap
349
- });
350
-
351
- const tokenMetadata = await tzip12Abs.getTokenMetadata(0);
352
- expect(tokenMetadata).toEqual({
353
- token_id: 0,
354
- name: 'Taquito',
355
- symbol: 'XTZ',
356
- decimals: 3
357
- });
358
- done();
359
- });
360
-
361
- it('Test 2 for getTokenMetadata(): Should succeed to fetch the token metadata from URI and token_info map', async (done) => {
362
- mockMetadataProvider.provideMetadata.mockResolvedValue({
363
- uri: 'https://test',
364
- metadata: { name: 'Taquito test' }
365
- });
366
-
367
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
368
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
369
- tokenMap.set('', char2Bytes('https://test'));
370
- tokenMap.set('name', char2Bytes('Taquito'));
371
- tokenMap.set('symbol', char2Bytes('XTZ'));
372
- tokenMap.set('decimals', char2Bytes('3'));
373
- mockRpcContractProvider.getBigMapKeyByID.mockResolvedValue({
374
- 'token_id': '0',
375
- 'token_info': tokenMap
376
- });
377
-
378
- const tokenMetadata = await tzip12Abs.getTokenMetadata(0);
379
- expect(tokenMetadata).toEqual({
380
- token_id: 0,
381
- name: 'Taquito test',
382
- symbol: 'XTZ',
383
- decimals: 3
384
- });
385
- done();
386
- });
387
-
388
- it('Test 3 for getTokenMetadata(): Should succeed to fetch the token metadata from URI and token_info map', async (done) => {
389
- mockTzip16ContractAbstraction.getMetadata.mockResolvedValue({
390
- uri: 'https://contractMetadata',
391
- metadata: { name: 'Contract metadata' }
392
- });
393
-
394
- mockMetadataProvider.provideMetadata.mockResolvedValue({
395
- uri: 'https://test',
396
- metadata: { name: 'Taquito test' }
397
- });
398
-
399
- mockTzip16ContractAbstraction.metadataViews.mockResolvedValue({ 'token_metadata': () => mockMichelsonStorageView });
400
-
401
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
402
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
403
- tokenMap.set('', char2Bytes('https://test'));
404
- tokenMap.set('name', char2Bytes('Taquito'));
405
- tokenMap.set('symbol', char2Bytes('XTZ'));
406
- tokenMap.set('decimals', char2Bytes('3'));
407
-
408
- // takes as parameter the nat token-id and returns the (pair nat (map string bytes)) value
409
- mockMichelsonStorageView.executeView.mockResolvedValue({
410
- 'token_id': '0',
411
- 'token_info': tokenMap
412
- })
413
-
414
- const tokenMetadata = await tzip12Abs.getTokenMetadata(0);
415
- expect(tokenMetadata).toEqual({
416
- token_id: 0,
417
- name: 'Taquito test',
418
- symbol: 'XTZ',
419
- decimals: 3
420
- });
421
- done();
422
- });
423
-
424
- it('Test 4 for getTokenMetadata(): Should throw InvalidTokenMetadata', async (done) => {
425
- mockTzip16ContractAbstraction.getMetadata.mockImplementation(() => {
426
- throw new Error();
427
- });
428
- mockSchema.FindFirstInTopLevelPair.mockReturnValue({ int: '20350' });
429
- const tokenMap = new MichelsonMap({ prim: "map", args: [{ prim: "string" }, { prim: "bytes" }] });
430
- tokenMap.set('name', char2Bytes('Taquito'));
431
- tokenMap.set('symbol', char2Bytes('XTZ'));
432
- mockRpcContractProvider.getBigMapKeyByID.mockResolvedValue({
433
- 'token_id': '0',
434
- 'token_info': tokenMap
435
- });
436
-
437
- try {
438
- await tzip12Abs.getTokenMetadata(0)
439
- } catch (err) {
440
- expect (err).toBeInstanceOf(InvalidTokenMetadata)
441
- }
442
- done();
443
- });
444
- });
package/tsconfig.json DELETED
@@ -1,15 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "compilerOptions": {
4
- "declarationDir": "dist/types",
5
- "outDir": "dist/lib",
6
- "typeRoots": [
7
- "node_modules/@types"
8
- ],
9
- "jsx": "react"
10
- },
11
- "include": [
12
- "src"
13
- ]
14
- }
15
-
@@ -1,11 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.prod.json",
3
- "compilerOptions": {
4
- "declarationDir": "./dist/types",
5
- "outDir": "./dist/lib",
6
- "typeRoots": ["./node_modules/@types"],
7
- "jsx": "react"
8
- },
9
- "include": ["./src/**/*"]
10
- }
11
-
package/tslint.json DELETED
@@ -1,3 +0,0 @@
1
- {
2
- "extends": "../../tslint.json"
3
- }