@ledgerhq/context-module 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/README.md +17 -5
  2. package/lib/cjs/package.json +13 -13
  3. package/lib/cjs/src/ContextModuleBuilder.js +1 -1
  4. package/lib/cjs/src/ContextModuleBuilder.js.map +3 -3
  5. package/lib/cjs/src/ContextModuleBuilder.test.js +1 -1
  6. package/lib/cjs/src/ContextModuleBuilder.test.js.map +3 -3
  7. package/lib/cjs/src/DefaultContextModule.test.js +1 -1
  8. package/lib/cjs/src/DefaultContextModule.test.js.map +2 -2
  9. package/lib/cjs/src/config/di/configTypes.js +1 -1
  10. package/lib/cjs/src/config/di/configTypes.js.map +2 -2
  11. package/lib/cjs/src/config/model/ContextModuleBuildArgs.js +2 -0
  12. package/lib/cjs/src/config/model/ContextModuleBuildArgs.js.map +7 -0
  13. package/lib/cjs/src/config/model/ContextModuleConfig.js +1 -1
  14. package/lib/cjs/src/config/model/ContextModuleConfig.js.map +1 -1
  15. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  16. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  17. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  18. package/lib/cjs/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  19. package/lib/cjs/src/nft/data/HttpNftDataSource.js +1 -1
  20. package/lib/cjs/src/nft/data/HttpNftDataSource.js.map +3 -3
  21. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js +1 -1
  22. package/lib/cjs/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  23. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  24. package/lib/cjs/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  25. package/lib/cjs/src/shared/constant/HttpHeaders.js +2 -0
  26. package/lib/cjs/src/shared/constant/HttpHeaders.js.map +7 -0
  27. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js +1 -1
  28. package/lib/cjs/src/shared/model/TypedDataClearSignContext.js.map +2 -2
  29. package/lib/cjs/src/token/data/HttpTokenDataSource.js +1 -1
  30. package/lib/cjs/src/token/data/HttpTokenDataSource.js.map +3 -3
  31. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js +1 -1
  32. package/lib/cjs/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  33. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js +1 -1
  34. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.js.map +3 -3
  35. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js +1 -1
  36. package/lib/cjs/src/transaction/data/HttpTransactionDataSource.test.js.map +3 -3
  37. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  38. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  39. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  40. package/lib/cjs/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  41. package/lib/cjs/src/trusted-name/data/TrustedNameDataSource.js +1 -1
  42. package/lib/cjs/src/trusted-name/data/TrustedNameDataSource.js.map +1 -1
  43. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  44. package/lib/cjs/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  45. package/lib/cjs/src/typed-data/data/FiltersDto.js +1 -1
  46. package/lib/cjs/src/typed-data/data/FiltersDto.js.map +1 -1
  47. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  48. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  49. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  50. package/lib/cjs/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  51. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  52. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  53. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  54. package/lib/cjs/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +2 -2
  55. package/lib/cjs/src/web3-check/data/HttpWeb3CheckDataSource.js +1 -1
  56. package/lib/cjs/src/web3-check/data/HttpWeb3CheckDataSource.js.map +3 -3
  57. package/lib/cjs/src/web3-check/data/HttpWeb3CheckDataSource.test.js +1 -1
  58. package/lib/cjs/src/web3-check/data/HttpWeb3CheckDataSource.test.js.map +3 -3
  59. package/lib/esm/package.json +13 -13
  60. package/lib/esm/src/ContextModuleBuilder.js +1 -1
  61. package/lib/esm/src/ContextModuleBuilder.js.map +3 -3
  62. package/lib/esm/src/ContextModuleBuilder.test.js +1 -1
  63. package/lib/esm/src/ContextModuleBuilder.test.js.map +3 -3
  64. package/lib/esm/src/DefaultContextModule.test.js +1 -1
  65. package/lib/esm/src/DefaultContextModule.test.js.map +2 -2
  66. package/lib/esm/src/config/di/configTypes.js +1 -1
  67. package/lib/esm/src/config/di/configTypes.js.map +2 -2
  68. package/lib/esm/src/config/model/ContextModuleBuildArgs.js +1 -0
  69. package/lib/esm/src/config/model/ContextModuleBuildArgs.js.map +7 -0
  70. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js +1 -1
  71. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.js.map +3 -3
  72. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js +1 -1
  73. package/lib/esm/src/external-plugin/data/HttpExternalPluginDataSource.test.js.map +3 -3
  74. package/lib/esm/src/nft/data/HttpNftDataSource.js +1 -1
  75. package/lib/esm/src/nft/data/HttpNftDataSource.js.map +3 -3
  76. package/lib/esm/src/nft/data/HttpNftDataSource.test.js +1 -1
  77. package/lib/esm/src/nft/data/HttpNftDataSource.test.js.map +3 -3
  78. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js +1 -1
  79. package/lib/esm/src/pki/data/HttpPkiCertificateDataSource.js.map +3 -3
  80. package/lib/esm/src/shared/constant/HttpHeaders.js +2 -0
  81. package/lib/esm/src/shared/constant/HttpHeaders.js.map +7 -0
  82. package/lib/esm/src/shared/model/TypedDataClearSignContext.js.map +2 -2
  83. package/lib/esm/src/token/data/HttpTokenDataSource.js +1 -1
  84. package/lib/esm/src/token/data/HttpTokenDataSource.js.map +3 -3
  85. package/lib/esm/src/token/data/HttpTokenDataSource.test.js +1 -1
  86. package/lib/esm/src/token/data/HttpTokenDataSource.test.js.map +3 -3
  87. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js +1 -1
  88. package/lib/esm/src/transaction/data/HttpTransactionDataSource.js.map +3 -3
  89. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js +1 -1
  90. package/lib/esm/src/transaction/data/HttpTransactionDataSource.test.js.map +3 -3
  91. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js +1 -1
  92. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.js.map +3 -3
  93. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js +1 -1
  94. package/lib/esm/src/trusted-name/data/HttpTrustedNameDataSource.test.js.map +3 -3
  95. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js +1 -1
  96. package/lib/esm/src/trusted-name/domain/TrustedNameContextLoader.js.map +3 -3
  97. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js +1 -1
  98. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.js.map +3 -3
  99. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js +1 -1
  100. package/lib/esm/src/typed-data/data/HttpTypedDataDataSource.test.js.map +3 -3
  101. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js +1 -1
  102. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.js.map +3 -3
  103. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js +1 -1
  104. package/lib/esm/src/typed-data/domain/DefaultTypedDataContextLoader.test.js.map +2 -2
  105. package/lib/esm/src/web3-check/data/HttpWeb3CheckDataSource.js +1 -1
  106. package/lib/esm/src/web3-check/data/HttpWeb3CheckDataSource.js.map +3 -3
  107. package/lib/esm/src/web3-check/data/HttpWeb3CheckDataSource.test.js +1 -1
  108. package/lib/esm/src/web3-check/data/HttpWeb3CheckDataSource.test.js.map +3 -3
  109. package/lib/types/src/ContextModuleBuilder.d.ts +4 -1
  110. package/lib/types/src/ContextModuleBuilder.d.ts.map +1 -1
  111. package/lib/types/src/config/di/configTypes.d.ts +1 -0
  112. package/lib/types/src/config/di/configTypes.d.ts.map +1 -1
  113. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts +4 -0
  114. package/lib/types/src/config/model/ContextModuleBuildArgs.d.ts.map +1 -0
  115. package/lib/types/src/config/model/ContextModuleConfig.d.ts +1 -0
  116. package/lib/types/src/config/model/ContextModuleConfig.d.ts.map +1 -1
  117. package/lib/types/src/external-plugin/data/HttpExternalPluginDataSource.d.ts.map +1 -1
  118. package/lib/types/src/nft/data/HttpNftDataSource.d.ts.map +1 -1
  119. package/lib/types/src/pki/data/HttpPkiCertificateDataSource.d.ts.map +1 -1
  120. package/lib/types/src/shared/constant/HttpHeaders.d.ts +3 -0
  121. package/lib/types/src/shared/constant/HttpHeaders.d.ts.map +1 -0
  122. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts +17 -5
  123. package/lib/types/src/shared/model/TypedDataClearSignContext.d.ts.map +1 -1
  124. package/lib/types/src/token/data/HttpTokenDataSource.d.ts.map +1 -1
  125. package/lib/types/src/transaction/data/HttpTransactionDataSource.d.ts.map +1 -1
  126. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts +2 -2
  127. package/lib/types/src/trusted-name/data/HttpTrustedNameDataSource.d.ts.map +1 -1
  128. package/lib/types/src/trusted-name/data/TrustedNameDataSource.d.ts +2 -0
  129. package/lib/types/src/trusted-name/data/TrustedNameDataSource.d.ts.map +1 -1
  130. package/lib/types/src/trusted-name/domain/TrustedNameContextLoader.d.ts.map +1 -1
  131. package/lib/types/src/typed-data/data/FiltersDto.d.ts +17 -1
  132. package/lib/types/src/typed-data/data/FiltersDto.d.ts.map +1 -1
  133. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts +2 -0
  134. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.d.ts.map +1 -1
  135. package/lib/types/src/typed-data/data/HttpTypedDataDataSource.test.d.ts.map +1 -1
  136. package/lib/types/src/typed-data/domain/DefaultTypedDataContextLoader.d.ts.map +1 -1
  137. package/lib/types/src/web3-check/data/HttpWeb3CheckDataSource.d.ts.map +1 -1
  138. package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
  139. package/package.json +13 -13
@@ -1,2 +1,2 @@
1
- import n from"axios";import u from"@/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as d}from"../../external-plugin/data/HttpExternalPluginDataSource";import l from"../../../package.json";vi.mock("axios");const a=t=>({data:t});describe("HttpExternalPuginDataSource",()=>{let t;const i={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x1ef",contractName:"otherName",selectors:{"0x01ee":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}},{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}}],name:"test"},r={"0x1ef":u,"0x0abc":u},o={"0x1ef":{"0x01ee":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}},"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}}};beforeAll(()=>{const s={cal:{url:"https://crypto-assets-service.api.ledger.com/v1"}};t=new d(s),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const s=`context-module/${l.version}`,e=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(n,"request").mockImplementation(e),await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(e).toHaveBeenCalledWith(expect.objectContaining({headers:{"X-Ledger-Client-Version":s}}))}),it("should return undefined when no abis is undefined",async()=>{const s=a([{b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no selectors",async()=>{const s=a([{abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const s=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const s=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data for the contract address",async()=>{const e=a([{abis:{"0x1":u},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no b2c signature",async()=>{const s=a([{b2c:i,abis:r}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no ecc20OfInterest",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{method:"swap",plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no plugin",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no signature",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no serialized data",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",signature:"0x002"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return a correct response",async()=>{const s=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should normalize the address and selector",async()=>{const s=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(s);const e=await t.getDappInfos({chainId:1,address:"0x0AbC",selector:"0x01Ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should return an error when axios throws an error",async()=>{vi.spyOn(n,"request").mockRejectedValue(new Error("error"));const s=await t.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(s.extract()).toEqual(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))})});
1
+ import n from"axios";import u from"@/external-plugin/__tests__/abi.json";import{HttpExternalPluginDataSource as d}from"../../external-plugin/data/HttpExternalPluginDataSource";import{LEDGER_CLIENT_VERSION_HEADER as l}from"../../shared/constant/HttpHeaders";import p from"../../../package.json";vi.mock("axios");const a=s=>({data:s});describe("HttpExternalPuginDataSource",()=>{let s;const i={blockchainName:"ethereum",chainId:1,contracts:[{address:"0x1ef",contractName:"otherName",selectors:{"0x01ee":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}},{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin"}}}],name:"test"},r={"0x1ef":u,"0x0abc":u},o={"0x1ef":{"0x01ee":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}},"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001",signature:"0x002"}}};beforeAll(()=>{const t={cal:{url:"https://crypto-assets-service.api.ledger.com/v1"}};s=new d(t),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const t=`context-module/${p.version}`,e=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(n,"request").mockImplementation(e),await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"}),expect(e).toHaveBeenCalledWith(expect.objectContaining({headers:{[l]:t}}))}),it("should return undefined when no abis is undefined",async()=>{const t=a([{b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no selectors",async()=>{const t=a([{abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const t=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data",async()=>{const t=a([{abis:{},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no abis data for the contract address",async()=>{const e=a([{abis:{"0x1":u},b2c:i,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no b2c signature",async()=>{const t=a([{b2c:i,abis:r}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual(void 0)}),it("should return undefined when no ecc20OfInterest",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{method:"swap",plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no plugin",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],method:"swap"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no method",async()=>{const e=a([{b2c:{blockchainName:"ethereum",chainId:1,contracts:[{address:"0x0abc",contractName:"name",selectors:{"0x01ff":{erc20OfInterest:["fromToken"],plugin:"plugin"}}}],name:"test"},abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no signature",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",serialized_data:"0x001"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return undefined when no serialized data",async()=>{const e=a([{b2c:i,abis:r,b2c_signatures:{"0x0abc":{"0x01ff":{plugin:"plugin",signature:"0x002"}}}}]);vi.spyOn(n,"request").mockResolvedValue(e);const c=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(c.extract()).toEqual(void 0)}),it("should return a correct response",async()=>{const t=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should normalize the address and selector",async()=>{const t=a([{b2c:i,abis:r,b2c_signatures:o}]);vi.spyOn(n,"request").mockResolvedValue(t);const e=await s.getDappInfos({chainId:1,address:"0x0AbC",selector:"0x01Ff"});expect(e.extract()).toEqual({abi:u,selectorDetails:{erc20OfInterest:["fromToken"],method:"swap",plugin:"plugin",serializedData:"0x001",signature:"0x002"}})}),it("should return an error when axios throws an error",async()=>{vi.spyOn(n,"request").mockRejectedValue(new Error("error"));const t=await s.getDappInfos({chainId:1,address:"0x0abc",selector:"0x01ff"});expect(t.extract()).toEqual(new Error("[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos"))})});
2
2
  //# sourceMappingURL=HttpExternalPluginDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/external-plugin/data/HttpExternalPluginDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/external-plugin/data/HttpExternalPluginDataSource\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\nconst axiosResponseBuilder = (dto: Partial<DAppDto>[]) => {\n return { data: dto };\n};\n\ndescribe(\"HttpExternalPuginDataSource\", () => {\n let datasource: ExternalPluginDataSource;\n const exampleB2c: B2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x1ef\",\n contractName: \"otherName\",\n selectors: {\n \"0x01ee\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n ],\n name: \"test\",\n };\n const exampleAbis: Abis = { \"0x1ef\": ABI, \"0x0abc\": ABI };\n const exampleB2cSignatures: B2cSignatures = {\n \"0x1ef\": {\n \"0x01ee\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n \"0x0abc\": {\n \"0x01ff\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n };\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n },\n } as ContextModuleConfig;\n datasource = new HttpExternalPluginDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { \"X-Ledger-Client-Version\": version },\n }),\n );\n });\n\n it(\"should return undefined when no abis is undefined\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no selectors\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data for the contract address\", async () => {\n // GIVEN\n const abis: Abis = { \"0x1\": ABI };\n const response = axiosResponseBuilder([\n { abis, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no b2c signature\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no ecc20OfInterest\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { method: \"swap\", plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no plugin\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], method: \"swap\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", serialized_data: \"0x001\" } },\n } as unknown as B2cSignatures;\n\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no serialized data\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", signature: \"0x002\" } },\n } as unknown as B2cSignatures;\n\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should normalize the address and selector\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0AbC\",\n selector: \"0x01Ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["axios", "ABI", "HttpExternalPluginDataSource", "PACKAGE", "axiosResponseBuilder", "dto", "datasource", "exampleB2c", "exampleAbis", "exampleB2cSignatures", "config", "version", "requestSpy", "response", "result"]
4
+ "sourcesContent": ["import axios from \"axios\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport ABI from \"@/external-plugin/__tests__/abi.json\";\nimport {\n type Abis,\n type B2c,\n type B2cSignatures,\n type DAppDto,\n} from \"@/external-plugin/data/DAppDto\";\nimport { type ExternalPluginDataSource } from \"@/external-plugin/data/ExternalPluginDataSource\";\nimport { HttpExternalPluginDataSource } from \"@/external-plugin/data/HttpExternalPluginDataSource\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\nconst axiosResponseBuilder = (dto: Partial<DAppDto>[]) => {\n return { data: dto };\n};\n\ndescribe(\"HttpExternalPuginDataSource\", () => {\n let datasource: ExternalPluginDataSource;\n const exampleB2c: B2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x1ef\",\n contractName: \"otherName\",\n selectors: {\n \"0x01ee\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n },\n },\n },\n ],\n name: \"test\",\n };\n const exampleAbis: Abis = { \"0x1ef\": ABI, \"0x0abc\": ABI };\n const exampleB2cSignatures: B2cSignatures = {\n \"0x1ef\": {\n \"0x01ee\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n \"0x0abc\": {\n \"0x01ff\": {\n plugin: \"plugin\",\n serialized_data: \"0x001\",\n signature: \"0x002\",\n },\n },\n };\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n },\n } as ContextModuleConfig;\n datasource = new HttpExternalPluginDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return undefined when no abis is undefined\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no selectors\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { abis: {}, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no abis data for the contract address\", async () => {\n // GIVEN\n const abis: Abis = { \"0x1\": ABI };\n const response = axiosResponseBuilder([\n { abis, b2c: exampleB2c, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no b2c signature\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no ecc20OfInterest\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { method: \"swap\", plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no plugin\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], method: \"swap\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no method\", async () => {\n // GIVEN\n const b2c = {\n blockchainName: \"ethereum\",\n chainId: 1,\n contracts: [\n {\n address: \"0x0abc\",\n contractName: \"name\",\n selectors: {\n \"0x01ff\": { erc20OfInterest: [\"fromToken\"], plugin: \"plugin\" },\n },\n },\n ],\n name: \"test\",\n } as unknown as B2c;\n const response = axiosResponseBuilder([\n { b2c, abis: exampleAbis, b2c_signatures: exampleB2cSignatures },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", serialized_data: \"0x001\" } },\n } as unknown as B2cSignatures;\n\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return undefined when no serialized data\", async () => {\n // GIVEN\n const B2CSignature = {\n \"0x0abc\": { \"0x01ff\": { plugin: \"plugin\", signature: \"0x002\" } },\n } as unknown as B2cSignatures;\n\n // FIXME\n const response = axiosResponseBuilder([\n { b2c: exampleB2c, abis: exampleAbis, b2c_signatures: B2CSignature },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(undefined);\n });\n\n it(\"should return a correct response\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should normalize the address and selector\", async () => {\n // GIVEN\n const response = axiosResponseBuilder([\n {\n b2c: exampleB2c,\n abis: exampleAbis,\n b2c_signatures: exampleB2cSignatures,\n },\n ]);\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0AbC\",\n selector: \"0x01Ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual({\n abi: ABI,\n selectorDetails: {\n erc20OfInterest: [\"fromToken\"],\n method: \"swap\",\n plugin: \"plugin\",\n serializedData: \"0x001\",\n signature: \"0x002\",\n },\n });\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getDappInfos({\n chainId: 1,\n address: \"0x0abc\",\n selector: \"0x01ff\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpExternalPluginDataSource: Error fetching dapp infos\",\n ),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["axios", "ABI", "HttpExternalPluginDataSource", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "axiosResponseBuilder", "dto", "datasource", "exampleB2c", "exampleAbis", "exampleB2cSignatures", "config", "version", "requestSpy", "response", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var u=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var d=(i,r,o,e)=>{for(var t=e>1?void 0:e?f(r,o):r,s=i.length-1,l;s>=0;s--)(l=i[s])&&(t=(e?l(r,o,t):l(t))||t);return e&&t&&u(r,o,t),t};import m from"axios";import{injectable as g}from"inversify";import{Left as a,Right as p}from"purify-ts";import c from"../../../package.json";let n=class{async getSetPluginPayload({chainId:r,address:o,selector:e}){try{const t=await m.request({method:"GET",url:`https://nft.api.live.ledger.com/v1/ethereum/${r}/contracts/${o}/plugin-selector/${e}`,headers:{"X-Ledger-Client-Version":`context-module/${c.version}`}});return t.data.payload?p(t.data.payload):a(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}catch{return a(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}}async getNftInfosPayload({chainId:r,address:o}){try{const e=await m.request({method:"GET",url:`https://nft.api.live.ledger.com/v1/ethereum/${r}/contracts/${o}`,headers:{"X-Ledger-Client-Version":`context-module/${c.version}`}});return e.data.payload?p(e.data.payload):a(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}catch{return a(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}}};n=d([g()],n);export{n as HttpNftDataSource};
1
+ var f=Object.defineProperty;var E=Object.getOwnPropertyDescriptor;var m=(i,r,o,e)=>{for(var t=e>1?void 0:e?E(r,o):r,s=i.length-1,l;s>=0;s--)(l=i[s])&&(t=(e?l(r,o,t):l(t))||t);return e&&t&&f(r,o,t),t};import d from"axios";import{injectable as h}from"inversify";import{Left as a,Right as p}from"purify-ts";import{LEDGER_CLIENT_VERSION_HEADER as c}from"../../shared/constant/HttpHeaders";import u from"../../../package.json";let n=class{async getSetPluginPayload({chainId:r,address:o,selector:e}){try{const t=await d.request({method:"GET",url:`https://nft.api.live.ledger.com/v1/ethereum/${r}/contracts/${o}/plugin-selector/${e}`,headers:{[c]:`context-module/${u.version}`}});return t.data.payload?p(t.data.payload):a(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}catch{return a(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}}async getNftInfosPayload({chainId:r,address:o}){try{const e=await d.request({method:"GET",url:`https://nft.api.live.ledger.com/v1/ethereum/${r}/contracts/${o}`,headers:{[c]:`context-module/${u.version}`}});return e.data.payload?p(e.data.payload):a(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}catch{return a(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}}};n=m([h()],n);export{n as HttpNftDataSource};
2
2
  //# sourceMappingURL=HttpNftDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/nft/data/HttpNftDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport {\n GetNftInformationsParams,\n GetSetPluginPayloadParams,\n NftDataSource,\n} from \"@/nft/data/NftDataSource\";\nimport PACKAGE from \"@root/package.json\";\n\n@injectable()\nexport class HttpNftDataSource implements NftDataSource {\n public async getSetPluginPayload({\n chainId,\n address,\n selector,\n }: GetSetPluginPayloadParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `https://nft.api.live.ledger.com/v1/ethereum/${chainId}/contracts/${address}/plugin-selector/${selector}`,\n headers: {\n \"X-Ledger-Client-Version\": `context-module/${PACKAGE.version}`,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: unexpected empty response\",\n ),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload\",\n ),\n );\n }\n }\n\n public async getNftInfosPayload({\n chainId,\n address,\n }: GetNftInformationsParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `https://nft.api.live.ledger.com/v1/ethereum/${chainId}/contracts/${address}`,\n headers: {\n \"X-Ledger-Client-Version\": `context-module/${PACKAGE.version}`,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(new Error(\"[ContextModule] HttpNftDataSource: no nft metadata\"));\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch nft informations\",\n ),\n );\n }\n }\n}\n"],
5
- "mappings": "wMAAA,OAAOA,MAAW,QAClB,OAAS,cAAAC,MAAkB,YAC3B,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAOpC,OAAOC,MAAa,qBAGb,IAAMC,EAAN,KAAiD,CACtD,MAAa,oBAAoB,CAC/B,QAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAA8D,CAC5D,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,+CAA+CJ,CAAO,cAAcC,CAAO,oBAAoBC,CAAQ,GAC5G,QAAS,CACP,0BAA2B,kBAAkBG,EAAQ,OAAO,EAC9D,CACF,CAAC,EAED,OAAOF,EAAS,KAAK,QACjBG,EAAMH,EAAS,KAAK,OAAO,EAC3BI,EACE,IAAI,MACF,8DACF,CACF,CACN,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,uEACF,CACF,CACF,CACF,CAEA,MAAa,mBAAmB,CAC9B,QAAAP,EACA,QAAAC,CACF,EAA6D,CAC3D,GAAI,CACF,MAAME,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,+CAA+CJ,CAAO,cAAcC,CAAO,GAChF,QAAS,CACP,0BAA2B,kBAAkBI,EAAQ,OAAO,EAC9D,CACF,CAAC,EAED,OAAOF,EAAS,KAAK,QACjBG,EAAMH,EAAS,KAAK,OAAO,EAC3BI,EAAK,IAAI,MAAM,oDAAoD,CAAC,CAC1E,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,qEACF,CACF,CACF,CACF,CACF,EAvDaR,EAANS,EAAA,CADNC,EAAW,GACCV",
6
- "names": ["axios", "injectable", "Left", "Right", "PACKAGE", "HttpNftDataSource", "chainId", "address", "selector", "response", "axios", "PACKAGE", "Right", "Left", "__decorateClass", "injectable"]
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport {\n GetNftInformationsParams,\n GetSetPluginPayloadParams,\n NftDataSource,\n} from \"@/nft/data/NftDataSource\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\n@injectable()\nexport class HttpNftDataSource implements NftDataSource {\n public async getSetPluginPayload({\n chainId,\n address,\n selector,\n }: GetSetPluginPayloadParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `https://nft.api.live.ledger.com/v1/ethereum/${chainId}/contracts/${address}/plugin-selector/${selector}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: unexpected empty response\",\n ),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload\",\n ),\n );\n }\n }\n\n public async getNftInfosPayload({\n chainId,\n address,\n }: GetNftInformationsParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<{ payload: string }>({\n method: \"GET\",\n url: `https://nft.api.live.ledger.com/v1/ethereum/${chainId}/contracts/${address}`,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n\n return response.data.payload\n ? Right(response.data.payload)\n : Left(new Error(\"[ContextModule] HttpNftDataSource: no nft metadata\"));\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch nft informations\",\n ),\n );\n }\n }\n}\n"],
5
+ "mappings": "wMAAA,OAAOA,MAAW,QAClB,OAAS,cAAAC,MAAkB,YAC3B,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAOpC,OAAS,gCAAAC,MAAoC,gCAC7C,OAAOC,MAAa,qBAGb,IAAMC,EAAN,KAAiD,CACtD,MAAa,oBAAoB,CAC/B,QAAAC,EACA,QAAAC,EACA,SAAAC,CACF,EAA8D,CAC5D,GAAI,CACF,MAAMC,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,+CAA+CJ,CAAO,cAAcC,CAAO,oBAAoBC,CAAQ,GAC5G,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,EACnE,CACF,CAAC,EAED,OAAOH,EAAS,KAAK,QACjBI,EAAMJ,EAAS,KAAK,OAAO,EAC3BK,EACE,IAAI,MACF,8DACF,CACF,CACN,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,uEACF,CACF,CACF,CACF,CAEA,MAAa,mBAAmB,CAC9B,QAAAR,EACA,QAAAC,CACF,EAA6D,CAC3D,GAAI,CACF,MAAME,EAAW,MAAMC,EAAM,QAA6B,CACxD,OAAQ,MACR,IAAK,+CAA+CJ,CAAO,cAAcC,CAAO,GAChF,QAAS,CACP,CAACI,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,EACnE,CACF,CAAC,EAED,OAAOH,EAAS,KAAK,QACjBI,EAAMJ,EAAS,KAAK,OAAO,EAC3BK,EAAK,IAAI,MAAM,oDAAoD,CAAC,CAC1E,MAAiB,CACf,OAAOA,EACL,IAAI,MACF,qEACF,CACF,CACF,CACF,CACF,EAvDaT,EAANU,EAAA,CADNC,EAAW,GACCX",
6
+ "names": ["axios", "injectable", "Left", "Right", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "HttpNftDataSource", "chainId", "address", "selector", "response", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "Right", "Left", "__decorateClass", "injectable"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import o from"axios";import r from"../../../package.json";import{HttpNftDataSource as s}from"./HttpNftDataSource";vi.mock("axios");describe("HttpNftDataSource",()=>{let a;beforeAll(()=>{a=new s,vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${r.version}`,t=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(o,"request").mockImplementation(t),await a.getNftInfosPayload({address:"0x00",chainId:1}),await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"}),expect(t).toHaveBeenNthCalledWith(1,expect.objectContaining({headers:{"X-Ledger-Client-Version":e}})),expect(t).toHaveBeenNthCalledWith(2,expect.objectContaining({headers:{"X-Ledger-Client-Version":e}}))}),describe("getNftInfosPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error("error"));const e=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(t.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(t.extract()).toEqual("payload")})}),describe("getSetPluginPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error("error"));const e=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(t.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(t.extract()).toEqual("payload")})})});
1
+ import o from"axios";import{LEDGER_CLIENT_VERSION_HEADER as r}from"../../shared/constant/HttpHeaders";import s from"../../../package.json";import{HttpNftDataSource as n}from"./HttpNftDataSource";vi.mock("axios");describe("HttpNftDataSource",()=>{let a;beforeAll(()=>{a=new n,vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${s.version}`,t=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(o,"request").mockImplementation(t),await a.getNftInfosPayload({address:"0x00",chainId:1}),await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"}),expect(t).toHaveBeenNthCalledWith(1,expect.objectContaining({headers:{[r]:e}})),expect(t).toHaveBeenNthCalledWith(2,expect.objectContaining({headers:{[r]:e}}))}),describe("getNftInfosPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error("error"));const e=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch nft informations"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(t.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: no nft metadata"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getNftInfosPayload({address:"0x00",chainId:1});expect(t.extract()).toEqual("payload")})}),describe("getSetPluginPayload",()=>{it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error("error"));const e=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(e.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload"))}),it("should return an error when the response is empty",async()=>{const e={data:{}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(t.extract()).toEqual(new Error("[ContextModule] HttpNftDataSource: unexpected empty response"))}),it("should return the payload",async()=>{const e={data:{payload:"payload"}};vi.spyOn(o,"request").mockResolvedValue(e);const t=await a.getSetPluginPayload({address:"0x00",chainId:1,selector:"0x00"});expect(t.extract()).toEqual("payload")})})});
2
2
  //# sourceMappingURL=HttpNftDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/nft/data/HttpNftDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\n\nimport PACKAGE from \"@root/package.json\";\n\nimport { HttpNftDataSource } from \"./HttpNftDataSource\";\nimport { type NftDataSource } from \"./NftDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpNftDataSource\", () => {\n let datasource: NftDataSource;\n\n beforeAll(() => {\n datasource = new HttpNftDataSource();\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getNftInfosPayload({ address: \"0x00\", chainId: 1 });\n await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(requestSpy).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n headers: { \"X-Ledger-Client-Version\": version },\n }),\n );\n expect(requestSpy).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n headers: { \"X-Ledger-Client-Version\": version },\n }),\n );\n });\n\n describe(\"getNftInfosPayload\", () => {\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch nft informations\",\n ),\n );\n });\n\n it(\"should return an error when the response is empty\", async () => {\n // GIVEN\n const response = { data: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\"[ContextModule] HttpNftDataSource: no nft metadata\"),\n );\n });\n\n it(\"should return the payload\", async () => {\n // GIVEN\n const response = { data: { payload: \"payload\" } };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\"payload\");\n });\n });\n\n describe(\"getSetPluginPayload\", () => {\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload\",\n ),\n );\n });\n\n it(\"should return an error when the response is empty\", async () => {\n // GIVEN\n const response = { data: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: unexpected empty response\",\n ),\n );\n });\n\n it(\"should return the payload\", async () => {\n // GIVEN\n const response = { data: { payload: \"payload\" } };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\"payload\");\n });\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["axios", "PACKAGE", "HttpNftDataSource", "datasource", "version", "requestSpy", "result", "response"]
4
+ "sourcesContent": ["import axios from \"axios\";\n\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { HttpNftDataSource } from \"./HttpNftDataSource\";\nimport { type NftDataSource } from \"./NftDataSource\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpNftDataSource\", () => {\n let datasource: NftDataSource;\n\n beforeAll(() => {\n datasource = new HttpNftDataSource();\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getNftInfosPayload({ address: \"0x00\", chainId: 1 });\n await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(requestSpy).toHaveBeenNthCalledWith(\n 1,\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n expect(requestSpy).toHaveBeenNthCalledWith(\n 2,\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n describe(\"getNftInfosPayload\", () => {\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch nft informations\",\n ),\n );\n });\n\n it(\"should return an error when the response is empty\", async () => {\n // GIVEN\n const response = { data: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\"[ContextModule] HttpNftDataSource: no nft metadata\"),\n );\n });\n\n it(\"should return the payload\", async () => {\n // GIVEN\n const response = { data: { payload: \"payload\" } };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getNftInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\"payload\");\n });\n });\n\n describe(\"getSetPluginPayload\", () => {\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error(\"error\"));\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: Failed to fetch set plugin payload\",\n ),\n );\n });\n\n it(\"should return an error when the response is empty\", async () => {\n // GIVEN\n const response = { data: {} };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\n new Error(\n \"[ContextModule] HttpNftDataSource: unexpected empty response\",\n ),\n );\n });\n\n it(\"should return the payload\", async () => {\n // GIVEN\n const response = { data: { payload: \"payload\" } };\n vi.spyOn(axios, \"request\").mockResolvedValue(response);\n\n // WHEN\n const result = await datasource.getSetPluginPayload({\n address: \"0x00\",\n chainId: 1,\n selector: \"0x00\",\n });\n\n // THEN\n expect(result.extract()).toEqual(\"payload\");\n });\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "HttpNftDataSource", "datasource", "version", "requestSpy", "result", "response"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var f=(o,e,r,t)=>{for(var i=t>1?void 0:t?m(e,r):e,s=o.length-1,n;s>=0;s--)(n=o[s])&&(i=(t?n(e,r,i):n(i))||i);return t&&i&&d(e,r,i),i},p=(o,e)=>(r,t)=>e(r,t,o);import{hexaStringToBuffer as g}from"@ledgerhq/device-management-kit";import u from"axios";import{inject as l,injectable as C}from"inversify";import{Left as c,Right as y}from"purify-ts";import{configTypes as k}from"../../config/di/configTypes";import{SIGNATURE_TAG as P}from"../../shared/model/SignatureTags";import{HexStringUtils as h}from"../../shared/utils/HexStringUtils";import{KeyUsageMapper as x}from"../../shared/utils/KeyUsageMapper";import M from"../../../package.json";let a=class{constructor(e){this.config=e}async fetchCertificate(e){const r={output:"descriptor",target_device:e.targetDevice,latest:!0,public_key_id:e.keyId,public_key_usage:e.keyUsage};try{const t=await u.request({method:"GET",url:`${this.config.cal.url}/certificates`,params:r,headers:{"X-Ledger-Client-Version":`context-module/${M.version}`}});if(t.status==200&&t.data!==void 0&&t.data.length>0&&this.isValidPkiCertificateResponse(t.data[0],this.config.cal.mode)){const i=g(h.appendSignatureToPayload(t.data[0].descriptor.data,t.data[0].descriptor.signatures[this.config.cal.mode],P));if(!i)return c(Error("[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate"));const s={payload:i,keyUsageNumber:x.mapKeyUsageForFirmware(e.keyUsage)};return y(s)}else return c(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}catch{return c(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}}isValidPkiCertificateResponse(e,r){return typeof e=="object"&&e!==null&&"descriptor"in e&&typeof e.descriptor=="object"&&e.descriptor!==null&&"data"in e.descriptor&&typeof e.descriptor.data=="string"&&"signatures"in e.descriptor&&typeof e.descriptor.signatures=="object"&&e.descriptor.signatures!==null&&r in e.descriptor.signatures&&typeof e.descriptor.signatures[r]=="string"}};a=f([C(),p(0,l(k.Config))],a);export{a as HttpPkiCertificateDataSource};
1
+ var d=Object.defineProperty;var m=Object.getOwnPropertyDescriptor;var f=(o,t,r,e)=>{for(var i=e>1?void 0:e?m(t,r):t,a=o.length-1,n;a>=0;a--)(n=o[a])&&(i=(e?n(t,r,i):n(i))||i);return e&&i&&d(t,r,i),i},p=(o,t)=>(r,e)=>t(r,e,o);import{hexaStringToBuffer as u}from"@ledgerhq/device-management-kit";import g from"axios";import{inject as C,injectable as l}from"inversify";import{Left as c,Right as y}from"purify-ts";import{configTypes as k}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as P}from"../../shared/constant/HttpHeaders";import{SIGNATURE_TAG as h}from"../../shared/model/SignatureTags";import{HexStringUtils as E}from"../../shared/utils/HexStringUtils";import{KeyUsageMapper as R}from"../../shared/utils/KeyUsageMapper";import x from"../../../package.json";let s=class{constructor(t){this.config=t}async fetchCertificate(t){const r={output:"descriptor",target_device:t.targetDevice,latest:!0,public_key_id:t.keyId,public_key_usage:t.keyUsage};try{const e=await g.request({method:"GET",url:`${this.config.cal.url}/certificates`,params:r,headers:{[P]:`context-module/${x.version}`}});if(e.status==200&&e.data!==void 0&&e.data.length>0&&this.isValidPkiCertificateResponse(e.data[0],this.config.cal.mode)){const i=u(E.appendSignatureToPayload(e.data[0].descriptor.data,e.data[0].descriptor.signatures[this.config.cal.mode],h));if(!i)return c(Error("[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate"));const a={payload:i,keyUsageNumber:R.mapKeyUsageForFirmware(t.keyUsage)};return y(a)}else return c(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}catch{return c(Error("[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor"))}}isValidPkiCertificateResponse(t,r){return typeof t=="object"&&t!==null&&"descriptor"in t&&typeof t.descriptor=="object"&&t.descriptor!==null&&"data"in t.descriptor&&typeof t.descriptor.data=="string"&&"signatures"in t.descriptor&&typeof t.descriptor.signatures=="object"&&t.descriptor.signatures!==null&&r in t.descriptor.signatures&&typeof t.descriptor.signatures[r]=="string"}};s=f([l(),p(0,C(k.Config))],s);export{s as HttpPkiCertificateDataSource};
2
2
  //# sourceMappingURL=HttpPkiCertificateDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/pki/data/HttpPkiCertificateDataSource.ts"],
4
- "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type {\n ContextModuleCalMode,\n ContextModuleConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { PkiCertificateInfo } from \"@/pki/model/PkiCertificateInfo\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type PkiCertificateDataSource } from \"./PkiCertificateDataSource\";\nimport {\n type PkiCertificateRequestDto,\n type PkiCertificateResponseDto,\n} from \"./pkiDataSourceTypes\";\n\n@injectable()\nexport class HttpPkiCertificateDataSource implements PkiCertificateDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async fetchCertificate(\n pkiCertificateInfo: PkiCertificateInfo,\n ): Promise<Either<Error, PkiCertificate | undefined>> {\n const requestDto: PkiCertificateRequestDto = {\n output: \"descriptor\",\n target_device: pkiCertificateInfo.targetDevice,\n latest: true,\n public_key_id: pkiCertificateInfo.keyId,\n public_key_usage: pkiCertificateInfo.keyUsage,\n };\n\n try {\n const pkiCertificateResponse = await axios.request<\n PkiCertificateResponseDto[]\n >({\n method: \"GET\",\n url: `${this.config.cal.url}/certificates`,\n params: requestDto,\n headers: {\n \"X-Ledger-Client-Version\": `context-module/${PACKAGE.version}`,\n },\n });\n\n if (\n pkiCertificateResponse.status == 200 &&\n pkiCertificateResponse.data !== undefined &&\n pkiCertificateResponse.data.length > 0 &&\n this.isValidPkiCertificateResponse(\n pkiCertificateResponse.data[0],\n this.config.cal.mode,\n )\n ) {\n const payload = hexaStringToBuffer(\n HexStringUtils.appendSignatureToPayload(\n pkiCertificateResponse.data[0].descriptor.data,\n pkiCertificateResponse.data[0].descriptor.signatures[\n this.config.cal.mode\n ],\n SIGNATURE_TAG,\n ),\n );\n if (!payload) {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate\",\n ),\n );\n }\n const pkiCertificate: PkiCertificate = {\n payload: payload,\n keyUsageNumber: KeyUsageMapper.mapKeyUsageForFirmware(\n pkiCertificateInfo.keyUsage,\n ),\n };\n return Right(pkiCertificate);\n } else {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor\",\n ),\n );\n }\n } catch (_error) {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor\",\n ),\n );\n }\n }\n\n private isValidPkiCertificateResponse(\n value: unknown,\n mode: ContextModuleCalMode,\n ): value is PkiCertificateResponseDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"descriptor\" in value &&\n typeof value.descriptor === \"object\" &&\n value.descriptor !== null &&\n \"data\" in value.descriptor &&\n typeof value.descriptor.data === \"string\" &&\n \"signatures\" in value.descriptor &&\n typeof value.descriptor.signatures === \"object\" &&\n value.descriptor.signatures !== null &&\n mode in value.descriptor.signatures &&\n typeof (value.descriptor.signatures as Record<string, unknown>)[mode] ===\n \"string\"\n );\n }\n}\n"],
5
- "mappings": "iOAAA,OAAS,sBAAAA,MAA0B,kCACnC,OAAOC,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAO5B,OAAS,iBAAAC,MAAqB,+BAC9B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAOC,MAAa,qBASb,IAAMC,EAAN,KAAuE,CAC5E,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,iBACJC,EACoD,CACpD,MAAMC,EAAuC,CAC3C,OAAQ,aACR,cAAeD,EAAmB,aAClC,OAAQ,GACR,cAAeA,EAAmB,MAClC,iBAAkBA,EAAmB,QACvC,EAEA,GAAI,CACF,MAAME,EAAyB,MAAMC,EAAM,QAEzC,CACA,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,gBAC3B,OAAQF,EACR,QAAS,CACP,0BAA2B,kBAAkBG,EAAQ,OAAO,EAC9D,CACF,CAAC,EAED,GACEF,EAAuB,QAAU,KACjCA,EAAuB,OAAS,QAChCA,EAAuB,KAAK,OAAS,GACrC,KAAK,8BACHA,EAAuB,KAAK,CAAC,EAC7B,KAAK,OAAO,IAAI,IAClB,EACA,CACA,MAAMG,EAAUC,EACdC,EAAe,yBACbL,EAAuB,KAAK,CAAC,EAAE,WAAW,KAC1CA,EAAuB,KAAK,CAAC,EAAE,WAAW,WACxC,KAAK,OAAO,IAAI,IAClB,EACAM,CACF,CACF,EACA,GAAI,CAACH,EACH,OAAOI,EACL,MACE,oGACF,CACF,EAEF,MAAMC,EAAiC,CACrC,QAASL,EACT,eAAgBM,EAAe,uBAC7BX,EAAmB,QACrB,CACF,EACA,OAAOY,EAAMF,CAAc,CAC7B,KACE,QAAOD,EACL,MACE,wFACF,CACF,CAEJ,MAAiB,CACf,OAAOA,EACL,MACE,wFACF,CACF,CACF,CACF,CAEQ,8BACNI,EACAC,EACoC,CACpC,OACE,OAAOD,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,OAAOA,EAAM,YAAe,UAC5BA,EAAM,aAAe,MACrB,SAAUA,EAAM,YAChB,OAAOA,EAAM,WAAW,MAAS,UACjC,eAAgBA,EAAM,YACtB,OAAOA,EAAM,WAAW,YAAe,UACvCA,EAAM,WAAW,aAAe,MAChCC,KAAQD,EAAM,WAAW,YACzB,OAAQA,EAAM,WAAW,WAAuCC,CAAI,GAClE,QAEN,CACF,EAhGahB,EAANiB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBrB",
6
- "names": ["hexaStringToBuffer", "axios", "inject", "injectable", "Left", "Right", "configTypes", "SIGNATURE_TAG", "HexStringUtils", "KeyUsageMapper", "PACKAGE", "HttpPkiCertificateDataSource", "config", "pkiCertificateInfo", "requestDto", "pkiCertificateResponse", "axios", "PACKAGE", "payload", "hexaStringToBuffer", "HexStringUtils", "SIGNATURE_TAG", "Left", "pkiCertificate", "KeyUsageMapper", "Right", "value", "mode", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type {\n ContextModuleCalMode,\n ContextModuleConfig,\n} from \"@/config/model/ContextModuleConfig\";\nimport { PkiCertificate } from \"@/pki/model/PkiCertificate\";\nimport { PkiCertificateInfo } from \"@/pki/model/PkiCertificateInfo\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { SIGNATURE_TAG } from \"@/shared/model/SignatureTags\";\nimport { HexStringUtils } from \"@/shared/utils/HexStringUtils\";\nimport { KeyUsageMapper } from \"@/shared/utils/KeyUsageMapper\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { type PkiCertificateDataSource } from \"./PkiCertificateDataSource\";\nimport {\n type PkiCertificateRequestDto,\n type PkiCertificateResponseDto,\n} from \"./pkiDataSourceTypes\";\n\n@injectable()\nexport class HttpPkiCertificateDataSource implements PkiCertificateDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n\n async fetchCertificate(\n pkiCertificateInfo: PkiCertificateInfo,\n ): Promise<Either<Error, PkiCertificate | undefined>> {\n const requestDto: PkiCertificateRequestDto = {\n output: \"descriptor\",\n target_device: pkiCertificateInfo.targetDevice,\n latest: true,\n public_key_id: pkiCertificateInfo.keyId,\n public_key_usage: pkiCertificateInfo.keyUsage,\n };\n\n try {\n const pkiCertificateResponse = await axios.request<\n PkiCertificateResponseDto[]\n >({\n method: \"GET\",\n url: `${this.config.cal.url}/certificates`,\n params: requestDto,\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n\n if (\n pkiCertificateResponse.status == 200 &&\n pkiCertificateResponse.data !== undefined &&\n pkiCertificateResponse.data.length > 0 &&\n this.isValidPkiCertificateResponse(\n pkiCertificateResponse.data[0],\n this.config.cal.mode,\n )\n ) {\n const payload = hexaStringToBuffer(\n HexStringUtils.appendSignatureToPayload(\n pkiCertificateResponse.data[0].descriptor.data,\n pkiCertificateResponse.data[0].descriptor.signatures[\n this.config.cal.mode\n ],\n SIGNATURE_TAG,\n ),\n );\n if (!payload) {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: Cannot generate payload from fetched PKI Certificate\",\n ),\n );\n }\n const pkiCertificate: PkiCertificate = {\n payload: payload,\n keyUsageNumber: KeyUsageMapper.mapKeyUsageForFirmware(\n pkiCertificateInfo.keyUsage,\n ),\n };\n return Right(pkiCertificate);\n } else {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor\",\n ),\n );\n }\n } catch (_error) {\n return Left(\n Error(\n \"[ContextModule] HttpPkiCertificateDataSource: failed to fetch PKI for given descriptor\",\n ),\n );\n }\n }\n\n private isValidPkiCertificateResponse(\n value: unknown,\n mode: ContextModuleCalMode,\n ): value is PkiCertificateResponseDto {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"descriptor\" in value &&\n typeof value.descriptor === \"object\" &&\n value.descriptor !== null &&\n \"data\" in value.descriptor &&\n typeof value.descriptor.data === \"string\" &&\n \"signatures\" in value.descriptor &&\n typeof value.descriptor.signatures === \"object\" &&\n value.descriptor.signatures !== null &&\n mode in value.descriptor.signatures &&\n typeof (value.descriptor.signatures as Record<string, unknown>)[mode] ===\n \"string\"\n );\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAS,sBAAAA,MAA0B,kCACnC,OAAOC,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAO5B,OAAS,gCAAAC,MAAoC,gCAC7C,OAAS,iBAAAC,MAAqB,+BAC9B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAS,kBAAAC,MAAsB,gCAC/B,OAAOC,MAAa,qBASb,IAAMC,EAAN,KAAuE,CAC5E,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CAEH,MAAM,iBACJC,EACoD,CACpD,MAAMC,EAAuC,CAC3C,OAAQ,aACR,cAAeD,EAAmB,aAClC,OAAQ,GACR,cAAeA,EAAmB,MAClC,iBAAkBA,EAAmB,QACvC,EAEA,GAAI,CACF,MAAME,EAAyB,MAAMC,EAAM,QAEzC,CACA,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,gBAC3B,OAAQF,EACR,QAAS,CACP,CAACG,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,EACnE,CACF,CAAC,EAED,GACEH,EAAuB,QAAU,KACjCA,EAAuB,OAAS,QAChCA,EAAuB,KAAK,OAAS,GACrC,KAAK,8BACHA,EAAuB,KAAK,CAAC,EAC7B,KAAK,OAAO,IAAI,IAClB,EACA,CACA,MAAMI,EAAUC,EACdC,EAAe,yBACbN,EAAuB,KAAK,CAAC,EAAE,WAAW,KAC1CA,EAAuB,KAAK,CAAC,EAAE,WAAW,WACxC,KAAK,OAAO,IAAI,IAClB,EACAO,CACF,CACF,EACA,GAAI,CAACH,EACH,OAAOI,EACL,MACE,oGACF,CACF,EAEF,MAAMC,EAAiC,CACrC,QAASL,EACT,eAAgBM,EAAe,uBAC7BZ,EAAmB,QACrB,CACF,EACA,OAAOa,EAAMF,CAAc,CAC7B,KACE,QAAOD,EACL,MACE,wFACF,CACF,CAEJ,MAAiB,CACf,OAAOA,EACL,MACE,wFACF,CACF,CACF,CACF,CAEQ,8BACNI,EACAC,EACoC,CACpC,OACE,OAAOD,GAAU,UACjBA,IAAU,MACV,eAAgBA,GAChB,OAAOA,EAAM,YAAe,UAC5BA,EAAM,aAAe,MACrB,SAAUA,EAAM,YAChB,OAAOA,EAAM,WAAW,MAAS,UACjC,eAAgBA,EAAM,YACtB,OAAOA,EAAM,WAAW,YAAe,UACvCA,EAAM,WAAW,aAAe,MAChCC,KAAQD,EAAM,WAAW,YACzB,OAAQA,EAAM,WAAW,WAAuCC,CAAI,GAClE,QAEN,CACF,EAhGajB,EAANkB,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBtB",
6
+ "names": ["hexaStringToBuffer", "axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "SIGNATURE_TAG", "HexStringUtils", "KeyUsageMapper", "PACKAGE", "HttpPkiCertificateDataSource", "config", "pkiCertificateInfo", "requestDto", "pkiCertificateResponse", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "payload", "hexaStringToBuffer", "HexStringUtils", "SIGNATURE_TAG", "Left", "pkiCertificate", "KeyUsageMapper", "Right", "value", "mode", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -0,0 +1,2 @@
1
+ const E="X-Ledger-Client-Version",e="X-Ledger-Origin-Token";export{E as LEDGER_CLIENT_VERSION_HEADER,e as LEDGER_ORIGIN_TOKEN_HEADER};
2
+ //# sourceMappingURL=HttpHeaders.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../src/shared/constant/HttpHeaders.ts"],
4
+ "sourcesContent": ["export const LEDGER_CLIENT_VERSION_HEADER = \"X-Ledger-Client-Version\";\nexport const LEDGER_ORIGIN_TOKEN_HEADER = \"X-Ledger-Origin-Token\";\n"],
5
+ "mappings": "AAAO,MAAMA,EAA+B,0BAC/BC,EAA6B",
6
+ "names": ["LEDGER_CLIENT_VERSION_HEADER", "LEDGER_ORIGIN_TOKEN_HEADER"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/shared/model/TypedDataClearSignContext.ts"],
4
- "sourcesContent": ["// The general informations for a typed message\nexport type TypedDataMessageInfo = {\n displayName: string;\n filtersCount: number;\n signature: string;\n};\n\n// Token index and descriptor. Needed for tokens that are referenced by a typed message\nexport type TypedDataTokenIndex = number;\nexport type TypedDataToken = string;\n// Special token index value when the referenced token is the verifying contract\nexport const VERIFYING_CONTRACT_TOKEN_INDEX = 255;\n\n// Typed message filters, to select fields to display, and provide formatting informations\nexport type TypedDataFilterPath = string;\nexport type TypedDataFilter =\n | {\n type: \"datetime\" | \"raw\";\n displayName: string;\n path: TypedDataFilterPath;\n signature: string;\n }\n | {\n type: \"amount\" | \"token\";\n displayName: string;\n tokenIndex: TypedDataTokenIndex;\n path: TypedDataFilterPath;\n signature: string;\n };\n\n// Clear signing context for a typed message\nexport type TypedDataClearSignContextSuccess = {\n type: \"success\";\n messageInfo: TypedDataMessageInfo;\n filters: Record<TypedDataFilterPath, TypedDataFilter>;\n tokens: Record<TypedDataTokenIndex, TypedDataToken>;\n};\nexport type TypedDataClearSignContextError = {\n type: \"error\";\n error: Error;\n};\nexport type TypedDataClearSignContext =\n | TypedDataClearSignContextSuccess\n | TypedDataClearSignContextError;\n"],
5
- "mappings": "AAWO,MAAMA,EAAiC",
4
+ "sourcesContent": ["import type { HexaString } from \"@ledgerhq/device-management-kit\";\n\n// The general informations for a typed message\nexport type TypedDataMessageInfo = {\n displayName: string;\n filtersCount: number;\n signature: string;\n};\n\n// Token index and descriptor. Needed for tokens that are referenced by a typed message\nexport type TypedDataTokenIndex = number;\nexport type TypedDataToken = string;\n// Special token index value when the referenced token is the verifying contract\nexport const VERIFYING_CONTRACT_TOKEN_INDEX = 255;\n\n// Typed message filters, to select fields to display, and provide formatting informations\nexport type TypedDataFilterPath = string;\nexport type TypedDataFilterWithToken = {\n type: \"amount\" | \"token\";\n displayName: string;\n tokenIndex: TypedDataTokenIndex;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilterWithTrustedName = {\n type: \"trusted-name\";\n displayName: string;\n types: string[];\n sources: string[];\n typesAndSourcesPayload: string;\n path: TypedDataFilterPath;\n signature: string;\n};\nexport type TypedDataFilter =\n | {\n type: \"datetime\" | \"raw\";\n displayName: string;\n path: TypedDataFilterPath;\n signature: string;\n }\n | TypedDataFilterWithToken\n | TypedDataFilterWithTrustedName;\n\n// Clear signing context for a typed message\nexport type TypedDataClearSignContextSuccess = {\n type: \"success\";\n messageInfo: TypedDataMessageInfo;\n filters: Record<TypedDataFilterPath, TypedDataFilter>;\n trustedNamesAddresses: Record<TypedDataFilterPath, HexaString>;\n tokens: Record<TypedDataTokenIndex, TypedDataToken>;\n};\nexport type TypedDataClearSignContextError = {\n type: \"error\";\n error: Error;\n};\nexport type TypedDataClearSignContext =\n | TypedDataClearSignContextSuccess\n | TypedDataClearSignContextError;\n"],
5
+ "mappings": "AAaO,MAAMA,EAAiC",
6
6
  "names": ["VERIFYING_CONTRACT_TOKEN_INDEX"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var m=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=(n,t,r,e)=>{for(var o=e>1?void 0:e?p(t,r):t,i=n.length-1,a;i>=0;i--)(a=n[i])&&(o=(e?a(t,r,o):a(o))||o);return e&&o&&m(t,r,o),o},f=(n,t)=>(r,e)=>t(r,e,n);import g from"axios";import{inject as l,injectable as u}from"inversify";import{Left as d,Right as h}from"purify-ts";import{configTypes as k}from"../../config/di/configTypes";import C from"../../../package.json";let s=class{constructor(t){this.config=t}async getTokenInfosPayload({chainId:t,address:r}){try{const o=(await g.request({method:"GET",url:`${this.config.cal.url}/tokens`,params:{contract_address:r,chain_id:t,output:"descriptor,ticker",ref:`branch:${this.config.cal.branch}`},headers:{"X-Ledger-Client-Version":`context-module/${C.version}`}})).data?.[0];if(!o||!o.ticker||!o.descriptor||!o.descriptor.data||!o.descriptor.signatures||typeof o.descriptor.signatures[this.config.cal.mode]!="string")return d(new Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${r} on chain ${t}`));const i=o.ticker.length.toString(16).padStart(2,"0");return h([i,o.descriptor.data,o.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return d(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};s=c([u(),f(0,l(k.Config))],s);export{s as HttpTokenDataSource};
1
+ var d=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=(n,t,r,e)=>{for(var o=e>1?void 0:e?p(t,r):t,i=n.length-1,a;i>=0;i--)(a=n[i])&&(o=(e?a(t,r,o):a(o))||o);return e&&o&&d(t,r,o),o},f=(n,t)=>(r,e)=>t(r,e,n);import g from"axios";import{inject as l,injectable as u}from"inversify";import{Left as m,Right as h}from"purify-ts";import{configTypes as k}from"../../config/di/configTypes";import{LEDGER_CLIENT_VERSION_HEADER as E}from"../../shared/constant/HttpHeaders";import C from"../../../package.json";let s=class{constructor(t){this.config=t}async getTokenInfosPayload({chainId:t,address:r}){try{const o=(await g.request({method:"GET",url:`${this.config.cal.url}/tokens`,params:{contract_address:r,chain_id:t,output:"descriptor,ticker",ref:`branch:${this.config.cal.branch}`},headers:{[E]:`context-module/${C.version}`}})).data?.[0];if(!o||!o.ticker||!o.descriptor||!o.descriptor.data||!o.descriptor.signatures||typeof o.descriptor.signatures[this.config.cal.mode]!="string")return m(new Error(`[ContextModule] HttpTokenDataSource: no token metadata for address ${r} on chain ${t}`));const i=o.ticker.length.toString(16).padStart(2,"0");return h([i,o.descriptor.data,o.descriptor.signatures[this.config.cal.mode]].join(""))}catch{return m(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations"))}}};s=c([u(),f(0,l(k.Config))],s);export{s as HttpTokenDataSource};
2
2
  //# sourceMappingURL=HttpTokenDataSource.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/data/HttpTokenDataSource.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor,ticker\",\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n \"X-Ledger-Client-Version\": `context-module/${PACKAGE.version}`,\n },\n });\n const tokenInfos = response.data?.[0];\n\n if (\n !tokenInfos ||\n !tokenInfos.ticker ||\n !tokenInfos.descriptor ||\n !tokenInfos.descriptor.data ||\n !tokenInfos.descriptor.signatures ||\n typeof tokenInfos.descriptor.signatures[this.config.cal.mode] !==\n \"string\"\n ) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenDataSource: no token metadata for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n // 1 byte for the length of the ticker\n const tickerLengthBuff = tokenInfos.ticker.length\n .toString(16)\n .padStart(2, \"0\");\n\n return Right(\n [\n tickerLengthBuff,\n tokenInfos.descriptor.data,\n tokenInfos.descriptor.signatures[this.config.cal.mode],\n ].join(\"\"),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n );\n }\n }\n}\n"],
5
- "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAOC,MAAa,qBAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAMC,EAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,oBACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,EACA,QAAS,CACP,0BAA2B,kBAAkBI,EAAQ,OAAO,EAC9D,CACF,CAAC,GAC2B,OAAO,CAAC,EAEpC,GACE,CAACF,GACD,CAACA,EAAW,QACZ,CAACA,EAAW,YACZ,CAACA,EAAW,WAAW,MACvB,CAACA,EAAW,WAAW,YACvB,OAAOA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,GAC1D,SAEF,OAAOG,EACL,IAAI,MACF,sEAAsEJ,CAAO,aAAaD,CAAO,EACnG,CACF,EAIF,MAAMM,EAAmBJ,EAAW,OAAO,OACxC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EAElB,OAAOK,EACL,CACED,EACAJ,EAAW,WAAW,KACtBA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,CACvD,EAAE,KAAK,EAAE,CACX,CACF,MAAiB,CACf,OAAOG,EACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EA5DaP,EAANU,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBd",
6
- "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "PACKAGE", "HttpTokenDataSource", "config", "chainId", "address", "tokenInfos", "axios", "PACKAGE", "Left", "tickerLengthBuff", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { inject, injectable } from \"inversify\";\nimport { Either, Left, Right } from \"purify-ts\";\n\nimport { configTypes } from \"@/config/di/configTypes\";\nimport type { ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport PACKAGE from \"@root/package.json\";\n\nimport { GetTokenInfosParams, TokenDataSource } from \"./TokenDataSource\";\nimport { TokenDto } from \"./TokenDto\";\n\n@injectable()\nexport class HttpTokenDataSource implements TokenDataSource {\n constructor(\n @inject(configTypes.Config) private readonly config: ContextModuleConfig,\n ) {}\n public async getTokenInfosPayload({\n chainId,\n address,\n }: GetTokenInfosParams): Promise<Either<Error, string>> {\n try {\n const response = await axios.request<TokenDto[]>({\n method: \"GET\",\n url: `${this.config.cal.url}/tokens`,\n params: {\n contract_address: address,\n chain_id: chainId,\n output: \"descriptor,ticker\",\n ref: `branch:${this.config.cal.branch}`,\n },\n headers: {\n [LEDGER_CLIENT_VERSION_HEADER]: `context-module/${PACKAGE.version}`,\n },\n });\n const tokenInfos = response.data?.[0];\n\n if (\n !tokenInfos ||\n !tokenInfos.ticker ||\n !tokenInfos.descriptor ||\n !tokenInfos.descriptor.data ||\n !tokenInfos.descriptor.signatures ||\n typeof tokenInfos.descriptor.signatures[this.config.cal.mode] !==\n \"string\"\n ) {\n return Left(\n new Error(\n `[ContextModule] HttpTokenDataSource: no token metadata for address ${address} on chain ${chainId}`,\n ),\n );\n }\n\n // 1 byte for the length of the ticker\n const tickerLengthBuff = tokenInfos.ticker.length\n .toString(16)\n .padStart(2, \"0\");\n\n return Right(\n [\n tickerLengthBuff,\n tokenInfos.descriptor.data,\n tokenInfos.descriptor.signatures[this.config.cal.mode],\n ].join(\"\"),\n );\n } catch (_error) {\n return Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n );\n }\n }\n}\n"],
5
+ "mappings": "iOAAA,OAAOA,MAAW,QAClB,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YACnC,OAAiB,QAAAC,EAAM,SAAAC,MAAa,YAEpC,OAAS,eAAAC,MAAmB,0BAE5B,OAAS,gCAAAC,MAAoC,gCAC7C,OAAOC,MAAa,qBAMb,IAAMC,EAAN,KAAqD,CAC1D,YAC+CC,EAC7C,CAD6C,YAAAA,CAC5C,CACH,MAAa,qBAAqB,CAChC,QAAAC,EACA,QAAAC,CACF,EAAwD,CACtD,GAAI,CAcF,MAAMC,GAbW,MAAMC,EAAM,QAAoB,CAC/C,OAAQ,MACR,IAAK,GAAG,KAAK,OAAO,IAAI,GAAG,UAC3B,OAAQ,CACN,iBAAkBF,EAClB,SAAUD,EACV,OAAQ,oBACR,IAAK,UAAU,KAAK,OAAO,IAAI,MAAM,EACvC,EACA,QAAS,CACP,CAACI,CAA4B,EAAG,kBAAkBC,EAAQ,OAAO,EACnE,CACF,CAAC,GAC2B,OAAO,CAAC,EAEpC,GACE,CAACH,GACD,CAACA,EAAW,QACZ,CAACA,EAAW,YACZ,CAACA,EAAW,WAAW,MACvB,CAACA,EAAW,WAAW,YACvB,OAAOA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,GAC1D,SAEF,OAAOI,EACL,IAAI,MACF,sEAAsEL,CAAO,aAAaD,CAAO,EACnG,CACF,EAIF,MAAMO,EAAmBL,EAAW,OAAO,OACxC,SAAS,EAAE,EACX,SAAS,EAAG,GAAG,EAElB,OAAOM,EACL,CACED,EACAL,EAAW,WAAW,KACtBA,EAAW,WAAW,WAAW,KAAK,OAAO,IAAI,IAAI,CACvD,EAAE,KAAK,EAAE,CACX,CACF,MAAiB,CACf,OAAOI,EACL,IAAI,MACF,yEACF,CACF,CACF,CACF,CACF,EA5DaR,EAANW,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAY,MAAM,IAFjBf",
6
+ "names": ["axios", "inject", "injectable", "Left", "Right", "configTypes", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "HttpTokenDataSource", "config", "chainId", "address", "tokenInfos", "axios", "LEDGER_CLIENT_VERSION_HEADER", "PACKAGE", "Left", "tickerLengthBuff", "Right", "__decorateClass", "injectable", "__decorateParam", "inject", "configTypes"]
7
7
  }
@@ -1,2 +1,2 @@
1
- import o from"axios";import{Left as n}from"purify-ts";import{HttpTokenDataSource as r}from"../../token/data/HttpTokenDataSource";import s from"../../../package.json";vi.mock("axios");describe("HttpTokenDataSource",()=>{let t;beforeAll(()=>{const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t=new r(e),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${s.version}`,a=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(o,"request").mockImplementation(a),await t.getTokenInfosPayload({address:"0x00",chainId:1}),expect(a).toHaveBeenCalledWith(expect.objectContaining({headers:{"X-Ledger-Client-Version":e}}))}),it("should return a string when axios response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{prod:"0123"}}};vi.spyOn(o,"request").mockResolvedValue({data:[e]});const a=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(a.extract()).toEqual("04555344430000000008000000010123")}),it("should return an error when data is empty",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:void 0});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:[{}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no ticker",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{test:"0123"}}};vi.spyOn(o,"request").mockResolvedValue({data:[e]});const a=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(a).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:[{live_signature:"0x0",ticker:"USDC"}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error);const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
1
+ import o from"axios";import{Left as n}from"purify-ts";import{LEDGER_CLIENT_VERSION_HEADER as r}from"../../shared/constant/HttpHeaders";import{HttpTokenDataSource as s}from"../../token/data/HttpTokenDataSource";import d from"../../../package.json";vi.mock("axios");describe("HttpTokenDataSource",()=>{let t;beforeAll(()=>{const e={cal:{url:"https://crypto-assets-service.api.ledger.com/v1",mode:"prod",branch:"main"}};t=new s(e),vi.clearAllMocks()}),it("should call axios with the ledger client version header",async()=>{const e=`context-module/${d.version}`,a=vi.fn(()=>Promise.resolve({data:[]}));vi.spyOn(o,"request").mockImplementation(a),await t.getTokenInfosPayload({address:"0x00",chainId:1}),expect(a).toHaveBeenCalledWith(expect.objectContaining({headers:{[r]:e}}))}),it("should return a string when axios response is correct",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{prod:"0123"}}};vi.spyOn(o,"request").mockResolvedValue({data:[e]});const a=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(a.extract()).toEqual("04555344430000000008000000010123")}),it("should return an error when data is empty",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:void 0});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no signature",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:[{}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no ticker",async()=>{const e={ticker:"USDC",descriptor:{data:"55534443000000000800000001",signatures:{test:"0123"}}};vi.spyOn(o,"request").mockResolvedValue({data:[e]});const a=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(a).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return undefined when no decimals",async()=>{vi.spyOn(o,"request").mockResolvedValue({data:[{live_signature:"0x0",ticker:"USDC"}]});const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1")))}),it("should return an error when axios throws an error",async()=>{vi.spyOn(o,"request").mockRejectedValue(new Error);const e=await t.getTokenInfosPayload({address:"0x00",chainId:1});expect(e).toEqual(n(new Error("[ContextModule] HttpTokenDataSource: Failed to fetch token informations")))})});
2
2
  //# sourceMappingURL=HttpTokenDataSource.test.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/token/data/HttpTokenDataSource.test.ts"],
4
- "sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { \"X-Ledger-Client-Version\": version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\"04555344430000000008000000010123\");\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [{}] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n test: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ live_signature: \"0x0\", ticker: \"USDC\" }],\n });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
- "mappings": "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",
6
- "names": ["axios", "Left", "HttpTokenDataSource", "PACKAGE", "datasource", "config", "version", "requestSpy", "tokenDTO", "result"]
4
+ "sourcesContent": ["import axios from \"axios\";\nimport { Left } from \"purify-ts\";\n\nimport { type ContextModuleConfig } from \"@/config/model/ContextModuleConfig\";\nimport { LEDGER_CLIENT_VERSION_HEADER } from \"@/shared/constant/HttpHeaders\";\nimport { HttpTokenDataSource } from \"@/token/data/HttpTokenDataSource\";\nimport { type TokenDataSource } from \"@/token/data/TokenDataSource\";\nimport { type TokenDto } from \"@/token/data/TokenDto\";\nimport PACKAGE from \"@root/package.json\";\n\nvi.mock(\"axios\");\n\ndescribe(\"HttpTokenDataSource\", () => {\n let datasource: TokenDataSource;\n\n beforeAll(() => {\n const config = {\n cal: {\n url: \"https://crypto-assets-service.api.ledger.com/v1\",\n mode: \"prod\",\n branch: \"main\",\n },\n } as ContextModuleConfig;\n datasource = new HttpTokenDataSource(config);\n vi.clearAllMocks();\n });\n\n it(\"should call axios with the ledger client version header\", async () => {\n // GIVEN\n const version = `context-module/${PACKAGE.version}`;\n const requestSpy = vi.fn(() => Promise.resolve({ data: [] }));\n vi.spyOn(axios, \"request\").mockImplementation(requestSpy);\n\n // WHEN\n await datasource.getTokenInfosPayload({ address: \"0x00\", chainId: 1 });\n\n // THEN\n expect(requestSpy).toHaveBeenCalledWith(\n expect.objectContaining({\n headers: { [LEDGER_CLIENT_VERSION_HEADER]: version },\n }),\n );\n });\n\n it(\"should return a string when axios response is correct\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n prod: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result.extract()).toEqual(\"04555344430000000008000000010123\");\n });\n\n it(\"should return an error when data is empty\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: undefined });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no signature\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [{}] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no ticker\", async () => {\n // GIVEN\n const tokenDTO: TokenDto = {\n ticker: \"USDC\",\n descriptor: {\n data: \"55534443000000000800000001\",\n signatures: {\n test: \"0123\",\n },\n },\n };\n vi.spyOn(axios, \"request\").mockResolvedValue({ data: [tokenDTO] });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return undefined when no decimals\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockResolvedValue({\n data: [{ live_signature: \"0x0\", ticker: \"USDC\" }],\n });\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: no token metadata for address 0x00 on chain 1\",\n ),\n ),\n );\n });\n\n it(\"should return an error when axios throws an error\", async () => {\n // GIVEN\n vi.spyOn(axios, \"request\").mockRejectedValue(new Error());\n\n // WHEN\n const result = await datasource.getTokenInfosPayload({\n address: \"0x00\",\n chainId: 1,\n });\n\n // THEN\n expect(result).toEqual(\n Left(\n new Error(\n \"[ContextModule] HttpTokenDataSource: Failed to fetch token informations\",\n ),\n ),\n );\n });\n});\n"],
5
+ "mappings": "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",
6
+ "names": ["axios", "Left", "LEDGER_CLIENT_VERSION_HEADER", "HttpTokenDataSource", "PACKAGE", "datasource", "config", "version", "requestSpy", "tokenDTO", "result"]
7
7
  }
@@ -1,2 +1,2 @@
1
- var _=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var d=(l,e,t,r)=>{for(var o=r>1?void 0:r?S(e,t):e,n=l.length-1,i;n>=0;n--)(i=l[n])&&(o=(r?i(e,t,o):i(o))||o);return r&&o&&_(e,t,o),o},f=(l,e)=>(t,r)=>e(t,r,l);import M from"axios";import{inject as m,injectable as I}from"inversify";import{Left as c,Right as x}from"purify-ts";import{configTypes as R}from"../../config/di/configTypes";import{pkiTypes as O}from"../../pki/di/pkiTypes";import{KeyId as F}from"../../pki/model/KeyId";import{KeyUsage as U}from"../../pki/model/KeyUsage";import{ClearSignContextType as a}from"../../shared/model/ClearSignContext";import{INFO_SIGNATURE_TAG as h}from"../../shared/model/SignatureTags";import{HexStringUtils as T}from"../../shared/utils/HexStringUtils";import k from"../../../package.json";let y=class{constructor(e,t){this.config=e;this._certificateLoader=t}async getTransactionDescriptors({chainId:e,address:t,selector:r,deviceModelId:o}){let n;try{n=(await M.request({method:"GET",url:`${this.config.cal.url}/dapps`,params:{output:"descriptors_calldata",chain_id:e,contracts:t,ref:`branch:${this.config.cal.branch}`},headers:{"X-Ledger-Client-Version":`context-module/${k.version}`}})).data}catch(i){return c(new Error(`[ContextModule] HttpTransactionDataSource: Failed to fetch transaction informations: ${i}`))}if(!Array.isArray(n))return c(new Error("[ContextModule] HttpTransactionDataSource: Response is not an array"));if(n.length===0)return c(new Error(`[ContextModule] HttpTransactionDataSource: No data for contract ${t} and selector ${r}`));for(const i of n){t=t.toLowerCase(),r=`0x${r.slice(2).toLowerCase()}`;const s=i.descriptors_calldata?.[t]?.[r];if(!s||!this.isCalldataDescriptorV1(s,this.config.cal.mode))continue;const g=s.transaction_info.descriptor.data,E=s.transaction_info.descriptor.signatures[this.config.cal.mode],D={targetDevice:o,keyUsage:U.Calldata,keyId:F.CalCalldataKey},u=await this._certificateLoader.loadCertificate(D),V={type:a.TRANSACTION_INFO,payload:T.appendSignatureToPayload(g,E,h),certificate:u},C=[];for(const[p,b]of Object.entries(s.enums))for(const[v,{data:N,signatures:P}]of Object.entries(b))C.push({type:a.ENUM,id:Number(p),value:Number(v),payload:T.appendSignatureToPayload(N,P[this.config.cal.mode],h),certificate:u});const A=s.fields.map(p=>({type:a.TRANSACTION_FIELD_DESCRIPTION,payload:p.descriptor,reference:this.getReference(p.param)}));return x([V,...C,...A])}return c(new Error(`[ContextModule] HttpTransactionDataSource: Invalid response for contract ${t} and selector ${r}`))}getReference(e){if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="path")return{type:a.TOKEN,valuePath:this.toGenericPath(e.token.binary_path)};if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="constant")return{type:a.TOKEN,value:e.token.value};if(e.type==="NFT"&&e.collection.type==="path")return{type:a.NFT,valuePath:this.toGenericPath(e.collection.binary_path)};if(e.type==="NFT"&&e.collection.type==="constant")return{type:a.NFT,value:e.collection.value};if(e.type==="TRUSTED_NAME"&&e.value.type==="path")return{type:a.TRUSTED_NAME,valuePath:this.toGenericPath(e.value.binary_path),types:e.types,sources:e.sources};if(e.type==="ENUM"&&e.value.type==="path")return{type:a.ENUM,valuePath:this.toGenericPath(e.value.binary_path),id:e.id}}toGenericPath(e){return e.type==="CONTAINER"?e.value:e.elements.map(t=>{if(t.type==="ARRAY"){const{weight:r,...o}=t;return{itemSize:r,...o}}else if(t.type==="LEAF"){const{leaf_type:r,...o}=t;return{leafType:r,...o}}return t})}isCalldataDescriptorV1(e,t){return typeof e=="object"&&e.type==="calldata"&&e.version==="v1"&&this.isTransactionInfoV1(e.transaction_info,t)&&this.isEnumV1(e.enums,t)&&Array.isArray(e.fields)&&e.fields.every(r=>this.isFieldV1(r))}isTransactionInfoV1(e,t){return typeof e=="object"&&typeof e.descriptor=="object"&&typeof e.descriptor.data=="string"&&typeof e.descriptor.signatures=="object"&&typeof e.descriptor.signatures[t]=="string"}isEnumV1(e,t){return typeof e=="object"&&Object.entries(e).every(([r,o])=>typeof r=="string"&&typeof o=="object"&&Object.entries(o).every(([n,i])=>typeof n=="string"&&typeof i=="object"&&typeof i.data=="string"&&i.signatures!==void 0&&this.isCalldataSignatures(i.signatures,t)))}isCalldataSignatures(e,t){return typeof e=="object"&&typeof e[t]=="string"}isFieldV1(e){return typeof e=="object"&&typeof e.descriptor=="string"&&typeof e.param=="object"&&typeof e.param.value=="object"&&this.isDescriptorValueV1(e.param.value)&&(e.param.type==="RAW"||e.param.type==="AMOUNT"||e.param.type==="DATETIME"||e.param.type==="DURATION"||e.param.type==="UNIT"||e.param.type==="ENUM"||e.param.type==="NFT"&&this.isDescriptorValueV1(e.param.collection)||e.param.type==="TOKEN_AMOUNT"&&(e.param.token===void 0||this.isDescriptorValueV1(e.param.token))||e.param.type==="TRUSTED_NAME"&&Array.isArray(e.param.types)&&Array.isArray(e.param.sources)&&e.param.types.every(t=>typeof t=="string")&&e.param.sources.every(t=>typeof t=="string"))}isDescriptorValueV1(e){return typeof e=="object"&&typeof e.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(e.type_family)&&(typeof e.type_size>"u"||typeof e.type_size=="number")&&(e.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(e)||e.type==="constant"&&this.isCalldataDescriptorValueConstantV1(e))}isCalldataDescriptorValueConstantV1(e){return typeof e=="object"&&e.type==="constant"&&typeof e.value=="string"}isCalldataDescriptorValueBinaryPathV1(e){return typeof e=="object"&&(e.type==="path"&&e.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(e.binary_path.value)||e.binary_path.type==="DATA"&&Array.isArray(e.binary_path.elements)&&e.binary_path.elements.every(t=>this.isPathElementV1(t)))}isPathElementV1(e){return typeof e=="object"&&(e.type==="REF"||e.type==="TUPLE"&&typeof e.offset=="number"||e.type==="ARRAY"&&typeof e.weight=="number"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number")||e.type==="LEAF"&&typeof e.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(e.leaf_type)||e.type==="SLICE"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number"))}};y=d([I(),f(0,m(R.Config)),f(1,m(O.PkiCertificateLoader))],y);export{y as HttpTransactionDataSource};
1
+ var P=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var d=(l,e,t,r)=>{for(var o=r>1?void 0:r?S(e,t):e,n=l.length-1,i;n>=0;n--)(i=l[n])&&(o=(r?i(e,t,o):i(o))||o);return r&&o&&P(e,t,o),o},f=(l,e)=>(t,r)=>e(t,r,l);import M from"axios";import{inject as m,injectable as I}from"inversify";import{Left as c,Right as R}from"purify-ts";import{configTypes as x}from"../../config/di/configTypes";import{pkiTypes as O}from"../../pki/di/pkiTypes";import{KeyId as F}from"../../pki/model/KeyId";import{KeyUsage as L}from"../../pki/model/KeyUsage";import{LEDGER_CLIENT_VERSION_HEADER as U}from"../../shared/constant/HttpHeaders";import{ClearSignContextType as a}from"../../shared/model/ClearSignContext";import{INFO_SIGNATURE_TAG as h}from"../../shared/model/SignatureTags";import{HexStringUtils as T}from"../../shared/utils/HexStringUtils";import k from"../../../package.json";let y=class{constructor(e,t){this.config=e;this._certificateLoader=t}async getTransactionDescriptors({chainId:e,address:t,selector:r,deviceModelId:o}){let n;try{n=(await M.request({method:"GET",url:`${this.config.cal.url}/dapps`,params:{output:"descriptors_calldata",chain_id:e,contracts:t,ref:`branch:${this.config.cal.branch}`},headers:{[U]:`context-module/${k.version}`}})).data}catch(i){return c(new Error(`[ContextModule] HttpTransactionDataSource: Failed to fetch transaction informations: ${i}`))}if(!Array.isArray(n))return c(new Error("[ContextModule] HttpTransactionDataSource: Response is not an array"));if(n.length===0)return c(new Error(`[ContextModule] HttpTransactionDataSource: No data for contract ${t} and selector ${r}`));for(const i of n){t=t.toLowerCase(),r=`0x${r.slice(2).toLowerCase()}`;const s=i.descriptors_calldata?.[t]?.[r];if(!s||!this.isCalldataDescriptorV1(s,this.config.cal.mode))continue;const E=s.transaction_info.descriptor.data,g=s.transaction_info.descriptor.signatures[this.config.cal.mode],D={targetDevice:o,keyUsage:L.Calldata,keyId:F.CalCalldataKey},u=await this._certificateLoader.loadCertificate(D),V={type:a.TRANSACTION_INFO,payload:T.appendSignatureToPayload(E,g,h),certificate:u},C=[];for(const[p,_]of Object.entries(s.enums))for(const[N,{data:b,signatures:v}]of Object.entries(_))C.push({type:a.ENUM,id:Number(p),value:Number(N),payload:T.appendSignatureToPayload(b,v[this.config.cal.mode],h),certificate:u});const A=s.fields.map(p=>({type:a.TRANSACTION_FIELD_DESCRIPTION,payload:p.descriptor,reference:this.getReference(p.param)}));return R([V,...C,...A])}return c(new Error(`[ContextModule] HttpTransactionDataSource: Invalid response for contract ${t} and selector ${r}`))}getReference(e){if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="path")return{type:a.TOKEN,valuePath:this.toGenericPath(e.token.binary_path)};if(e.type==="TOKEN_AMOUNT"&&e.token!==void 0&&e.token.type==="constant")return{type:a.TOKEN,value:e.token.value};if(e.type==="NFT"&&e.collection.type==="path")return{type:a.NFT,valuePath:this.toGenericPath(e.collection.binary_path)};if(e.type==="NFT"&&e.collection.type==="constant")return{type:a.NFT,value:e.collection.value};if(e.type==="TRUSTED_NAME"&&e.value.type==="path")return{type:a.TRUSTED_NAME,valuePath:this.toGenericPath(e.value.binary_path),types:e.types,sources:e.sources};if(e.type==="ENUM"&&e.value.type==="path")return{type:a.ENUM,valuePath:this.toGenericPath(e.value.binary_path),id:e.id}}toGenericPath(e){return e.type==="CONTAINER"?e.value:e.elements.map(t=>{if(t.type==="ARRAY"){const{weight:r,...o}=t;return{itemSize:r,...o}}else if(t.type==="LEAF"){const{leaf_type:r,...o}=t;return{leafType:r,...o}}return t})}isCalldataDescriptorV1(e,t){return typeof e=="object"&&e.type==="calldata"&&e.version==="v1"&&this.isTransactionInfoV1(e.transaction_info,t)&&this.isEnumV1(e.enums,t)&&Array.isArray(e.fields)&&e.fields.every(r=>this.isFieldV1(r))}isTransactionInfoV1(e,t){return typeof e=="object"&&typeof e.descriptor=="object"&&typeof e.descriptor.data=="string"&&typeof e.descriptor.signatures=="object"&&typeof e.descriptor.signatures[t]=="string"}isEnumV1(e,t){return typeof e=="object"&&Object.entries(e).every(([r,o])=>typeof r=="string"&&typeof o=="object"&&Object.entries(o).every(([n,i])=>typeof n=="string"&&typeof i=="object"&&typeof i.data=="string"&&i.signatures!==void 0&&this.isCalldataSignatures(i.signatures,t)))}isCalldataSignatures(e,t){return typeof e=="object"&&typeof e[t]=="string"}isFieldV1(e){return typeof e=="object"&&typeof e.descriptor=="string"&&typeof e.param=="object"&&typeof e.param.value=="object"&&this.isDescriptorValueV1(e.param.value)&&(e.param.type==="RAW"||e.param.type==="AMOUNT"||e.param.type==="DATETIME"||e.param.type==="DURATION"||e.param.type==="UNIT"||e.param.type==="ENUM"||e.param.type==="NFT"&&this.isDescriptorValueV1(e.param.collection)||e.param.type==="TOKEN_AMOUNT"&&(e.param.token===void 0||this.isDescriptorValueV1(e.param.token))||e.param.type==="TRUSTED_NAME"&&Array.isArray(e.param.types)&&Array.isArray(e.param.sources)&&e.param.types.every(t=>typeof t=="string")&&e.param.sources.every(t=>typeof t=="string"))}isDescriptorValueV1(e){return typeof e=="object"&&typeof e.type_family=="string"&&["UINT","INT","UFIXED","FIXED","ADDRESS","BOOL","BYTES","STRING"].includes(e.type_family)&&(typeof e.type_size>"u"||typeof e.type_size=="number")&&(e.type==="path"&&this.isCalldataDescriptorValueBinaryPathV1(e)||e.type==="constant"&&this.isCalldataDescriptorValueConstantV1(e))}isCalldataDescriptorValueConstantV1(e){return typeof e=="object"&&e.type==="constant"&&typeof e.value=="string"}isCalldataDescriptorValueBinaryPathV1(e){return typeof e=="object"&&(e.type==="path"&&e.binary_path.type==="CONTAINER"&&["FROM","TO","VALUE"].includes(e.binary_path.value)||e.binary_path.type==="DATA"&&Array.isArray(e.binary_path.elements)&&e.binary_path.elements.every(t=>this.isPathElementV1(t)))}isPathElementV1(e){return typeof e=="object"&&(e.type==="REF"||e.type==="TUPLE"&&typeof e.offset=="number"||e.type==="ARRAY"&&typeof e.weight=="number"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number")||e.type==="LEAF"&&typeof e.leaf_type=="string"&&["ARRAY_LEAF","TUPLE_LEAF","STATIC_LEAF","DYNAMIC_LEAF"].includes(e.leaf_type)||e.type==="SLICE"&&(typeof e.start>"u"||typeof e.start=="number")&&(typeof e.end>"u"||typeof e.end=="number"))}};y=d([I(),f(0,m(x.Config)),f(1,m(O.PkiCertificateLoader))],y);export{y as HttpTransactionDataSource};
2
2
  //# sourceMappingURL=HttpTransactionDataSource.js.map